aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc/kernel/rtas.c
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2022-03-08 23:50:46 +1000
committerMichael Ellerman <mpe@ellerman.id.au>2022-05-19 23:11:27 +1000
commit804c0a166ffea628eb7ef72b9fd710883cb1fa8f (patch)
treece80ffed707d98661c28b31b4be35a6226d2cf84 /arch/powerpc/kernel/rtas.c
parentpowerpc/rtas: Leave MSR[RI] enabled over RTAS call (diff)
downloadlinux-dev-804c0a166ffea628eb7ef72b9fd710883cb1fa8f.tar.xz
linux-dev-804c0a166ffea628eb7ef72b9fd710883cb1fa8f.zip
powerpc/rtas: enture rtas_call is called with MMU enabled
rtas_call must not be called with the MMU disabled because in case of rtas error, log_error is called which requires MMU enabled. Add a test and warning for this. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Reviewed-by: Laurent Dufour <ldufour@linux.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au> Link: https://lore.kernel.org/r/20220308135047.478297-14-npiggin@gmail.com
Diffstat (limited to 'arch/powerpc/kernel/rtas.c')
-rw-r--r--arch/powerpc/kernel/rtas.c5
1 files changed, 5 insertions, 0 deletions
diff --git a/arch/powerpc/kernel/rtas.c b/arch/powerpc/kernel/rtas.c
index c1403dc4fd66..9bb43aa53d43 100644
--- a/arch/powerpc/kernel/rtas.c
+++ b/arch/powerpc/kernel/rtas.c
@@ -476,6 +476,11 @@ int rtas_call(int token, int nargs, int nret, int *outputs, ...)
if (!rtas.entry || token == RTAS_UNKNOWN_SERVICE)
return -1;
+ if ((mfmsr() & (MSR_IR|MSR_DR)) != (MSR_IR|MSR_DR)) {
+ WARN_ON_ONCE(1);
+ return -1;
+ }
+
s = lock_rtas();
/* We use the global rtas args buffer */