Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9f83e00f authored by Nicholas Piggin's avatar Nicholas Piggin Committed by Michael Ellerman
Browse files

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: default avatarMadhavan Srinivasan <maddy@linux.vnet.ibm.com>
Signed-off-by: default avatarNicholas Piggin <npiggin@gmail.com>
Signed-off-by: default avatarMadhavan Srinivasan <maddy@linux.vnet.ibm.com>
Signed-off-by: default avatarMichael Ellerman <mpe@ellerman.id.au>
parent c2e480ba
Loading
Loading
Loading
Loading
+5 −5
Original line number Diff line number Diff line
@@ -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;