summaryrefslogtreecommitdiff
path: root/arch/powerpc/include/asm/hw_irq.h
diff options
context:
space:
mode:
authorNicholas Piggin <npiggin@gmail.com>2017-12-20 09:25:43 +0530
committerMichael Ellerman <mpe@ellerman.id.au>2018-01-19 22:36:57 +1100
commit9f83e00f4cc1c560b6847acecba2b3746c8d8c06 (patch)
treed164740eb00037ab08f8cec702e4ff2c546c52fc /arch/powerpc/include/asm/hw_irq.h
parentc2e480ba822718190e58849b79a76db13c3dac18 (diff)
powerpc/64: Improve inline asm in arch_local_irq_disable
arch_local_irq_disable is implemented strangely, with a temporary output register being set to the desired soft_enabled value via an immediate input, which is then used to store to memory. This is not required, the immediate can be specified directly as a register input. For simple cases at least, assembly is unchanged except register mapping. Reviewed-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> Signed-off-by: Nicholas Piggin <npiggin@gmail.com> Signed-off-by: Madhavan Srinivasan <maddy@linux.vnet.ibm.com> Signed-off-by: Michael Ellerman <mpe@ellerman.id.au>
Diffstat (limited to 'arch/powerpc/include/asm/hw_irq.h')
-rw-r--r--arch/powerpc/include/asm/hw_irq.h10
1 files changed, 5 insertions, 5 deletions
diff --git a/arch/powerpc/include/asm/hw_irq.h b/arch/powerpc/include/asm/hw_irq.h
index 7c2717dfd89a..4210ddbf38b0 100644
--- a/arch/powerpc/include/asm/hw_irq.h
+++ b/arch/powerpc/include/asm/hw_irq.h
@@ -63,13 +63,13 @@ static inline unsigned long arch_local_save_flags(void)
static inline unsigned long arch_local_irq_disable(void)
{
- unsigned long flags, zero;
+ unsigned long flags;
asm volatile(
- "li %1,%3; lbz %0,%2(13); stb %1,%2(13)"
- : "=r" (flags), "=&r" (zero)
- : "i" (offsetof(struct paca_struct, soft_enabled)),\
- "i" (IRQS_DISABLED)
+ "lbz %0,%1(13); stb %2,%1(13)"
+ : "=&r" (flags)
+ : "i" (offsetof(struct paca_struct, soft_enabled)),
+ "r" (IRQS_DISABLED)
: "memory");
return flags;