diff options
author | David S. Miller <davem@davemloft.net> | 2018-10-14 20:22:28 -0700 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2018-11-04 14:51:55 +0100 |
commit | a756494fb7bdf4ddcfa73e42dc15431b562cf59c (patch) | |
tree | bc34bf2e1617ab3d2fbf6be94f689db0b2d58b93 /arch | |
parent | 1a47e59c44717bd40a068cd9b995bfa7a9b8a857 (diff) | |
download | linux-stable-a756494fb7bdf4ddcfa73e42dc15431b562cf59c.tar.gz linux-stable-a756494fb7bdf4ddcfa73e42dc15431b562cf59c.tar.bz2 linux-stable-a756494fb7bdf4ddcfa73e42dc15431b562cf59c.zip |
sparc64: Set %l4 properly on trap return after handling signals.
[ Upstream commit d1f1f98c6d1708a90436e1a3b2aff5e93946731b ]
If we did some signal processing, we have to reload the pt_regs
tstate register because it's value may have changed.
In doing so we also have to extract the %pil value contained in there
anre load that into %l4.
This value is at bit 20 and thus needs to be shifted down before we
later write it into the %pil register.
Most of the time this is harmless as we are returning to userspace
and the %pil is zero for that case.
Signed-off-by: David S. Miller <davem@davemloft.net>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'arch')
-rw-r--r-- | arch/sparc/kernel/rtrap_64.S | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/arch/sparc/kernel/rtrap_64.S b/arch/sparc/kernel/rtrap_64.S index e17eceda7de0..29aa34f11720 100644 --- a/arch/sparc/kernel/rtrap_64.S +++ b/arch/sparc/kernel/rtrap_64.S @@ -85,8 +85,9 @@ __handle_signal: ldx [%sp + PTREGS_OFF + PT_V9_TSTATE], %l1 sethi %hi(0xf << 20), %l4 and %l1, %l4, %l4 + andn %l1, %l4, %l1 ba,pt %xcc, __handle_preemption_continue - andn %l1, %l4, %l1 + srl %l4, 20, %l4 /* When returning from a NMI (%pil==15) interrupt we want to * avoid running softirqs, doing IRQ tracing, preempting, etc. |