powerpc/rtas: Add rtas_call_unlocked()
authorMichael Ellerman <mpe@ellerman.id.au>
Wed, 16 Dec 2015 10:01:42 +0000 (21:01 +1100)
committerMichael Ellerman <mpe@ellerman.id.au>
Thu, 17 Dec 2015 11:40:55 +0000 (22:40 +1100)
commit209eb4e5cbaba53ab555f3e7b43aa27176f3a925
treeb0b4ead78364930134cddcc293befe7a3a2359a6
parente4d54f71d29997344b4c4c8d47708240f9f23a5c
powerpc/rtas: Add rtas_call_unlocked()

Most users of RTAS (Run-Time Abstraction Services) use rtas_call(),
which deals with locking as well as endian handling.

However we have two users outside of rtas.c that can't use rtas_call()
because they have different locking requirements.

The hotplug CPU code can't take the RTAS lock because the CPU would go
offline with the lock held and no other CPUs would be able to call RTAS
until the CPU came back online.

The xmon code doesn't want to take the lock because it would risk dead
locking when we are trying to recover from a crash.

Both sites required multiple patches when we added little endian
support, proving that programmers can't do endian right.

Although that ship has sailed, we can still clean the code up by
providing an unlocked version of rtas_call() which avoids the need to
open code the logic elsewhere.

Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
arch/powerpc/include/asm/rtas.h
arch/powerpc/kernel/rtas.c