summaryrefslogtreecommitdiffstats
path: root/arch
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2017-08-12 02:38:59 +1000
committerMichael Ellerman <mpe@ellerman.id.au>2017-08-23 23:02:48 +1000
commite0c827c09c0d04d77616a4506a71b3d5b0cf07e8 (patch)
treea81445323ca0ea2c741016b44d1b24e79f8cfd4d /arch
parent3a2df3798d4da2fc40052c25f0d9c687b1467d53 (diff)
downloadlinux-stable-e0c827c09c0d04d77616a4506a71b3d5b0cf07e8.tar.gz
linux-stable-e0c827c09c0d04d77616a4506a71b3d5b0cf07e8.tar.bz2
linux-stable-e0c827c09c0d04d77616a4506a71b3d5b0cf07e8.zip
powerpc/64s: Avoid a branch in masked_[H]interrupt()
Interrupts which do not require EE to be cleared can all be tested with a single bitwise test. Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch')
-rw-r--r--arch/powerpc/kernel/exceptions-64s.S6
1 files changed, 2 insertions, 4 deletions
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
index 3c36ecbc1539..caf083d89500 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -1370,10 +1370,8 @@ masked_##_H##interrupt: \
ori r10,r10,0xffff; \
mtspr SPRN_DEC,r10; \
b MASKED_DEC_HANDLER_LABEL; \
-1: cmpwi r10,PACA_IRQ_DBELL; \
- beq 2f; \
- cmpwi r10,PACA_IRQ_HMI; \
- beq 2f; \
+1: andi. r10,r10,(PACA_IRQ_DBELL|PACA_IRQ_HMI); \
+ bne 2f; \
mfspr r10,SPRN_##_H##SRR1; \
rldicl r10,r10,48,1; /* clear MSR_EE */ \
rotldi r10,r10,16; \