summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorDavid S. Miller <davem@davemloft.net>2018-10-14 20:22:28 -0700
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2018-11-04 14:51:55 +0100
commita756494fb7bdf4ddcfa73e42dc15431b562cf59c (patch)
treebc34bf2e1617ab3d2fbf6be94f689db0b2d58b93 /arch
parent1a47e59c44717bd40a068cd9b995bfa7a9b8a857 (diff)
downloadlinux-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.S3
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.