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

Commit c2e480ba authored by Madhavan Srinivasan's avatar Madhavan Srinivasan Committed by Michael Ellerman
Browse files

powerpc/64: Add #defines for paca->soft_enabled flags



Two #defines IRQS_ENABLED and IRQS_DISABLED are added to be used when
updating paca->soft_enabled. Replace the hardcoded values used when
updating paca->soft_enabled with IRQ_(EN|DIS)ABLED #define. No logic
change.

Reviewed-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 a8a4b03a
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -499,7 +499,7 @@ END_FTR_SECTION_NESTED(ftr,ftr,943)

#define __SOFTEN_TEST(h, vec)						\
	lbz	r10,PACASOFTIRQEN(r13);					\
	cmpwi	r10,0;							\
	cmpwi	r10,IRQS_DISABLED;				\
	li	r10,SOFTEN_VALUE_##vec;					\
	beq	masked_##h##interrupt

+14 −7
Original line number Diff line number Diff line
@@ -28,6 +28,12 @@
#define PACA_IRQ_EE_EDGE	0x10 /* BookE only */
#define PACA_IRQ_HMI		0x20

/*
 * flags for paca->soft_enabled
 */
#define IRQS_ENABLED	1
#define IRQS_DISABLED	0

#endif /* CONFIG_PPC64 */

#ifndef __ASSEMBLY__
@@ -60,9 +66,10 @@ static inline unsigned long arch_local_irq_disable(void)
	unsigned long flags, zero;

	asm volatile(
		"li %1,0; lbz %0,%2(13); stb %1,%2(13)"
		"li %1,%3; lbz %0,%2(13); stb %1,%2(13)"
		: "=r" (flags), "=&r" (zero)
		: "i" (offsetof(struct paca_struct, soft_enabled))
		: "i" (offsetof(struct paca_struct, soft_enabled)),\
		  "i" (IRQS_DISABLED)
		: "memory");

	return flags;
@@ -72,7 +79,7 @@ extern void arch_local_irq_restore(unsigned long);

static inline void arch_local_irq_enable(void)
{
	arch_local_irq_restore(1);
	arch_local_irq_restore(IRQS_ENABLED);
}

static inline unsigned long arch_local_irq_save(void)
@@ -82,7 +89,7 @@ static inline unsigned long arch_local_irq_save(void)

static inline bool arch_irqs_disabled_flags(unsigned long flags)
{
	return flags == 0;
	return flags == IRQS_DISABLED;
}

static inline bool arch_irqs_disabled(void)
@@ -102,9 +109,9 @@ static inline bool arch_irqs_disabled(void)
	u8 _was_enabled;				\
	__hard_irq_disable();				\
	_was_enabled = local_paca->soft_enabled;	\
	local_paca->soft_enabled = 0;			\
	local_paca->soft_enabled = IRQS_DISABLED;\
	local_paca->irq_happened |= PACA_IRQ_HARD_DIS;	\
	if (_was_enabled)				\
	if (_was_enabled == IRQS_ENABLED)	\
		trace_hardirqs_off();			\
} while(0)

@@ -127,7 +134,7 @@ static inline void may_hard_irq_enable(void)

static inline bool arch_irq_disabled_regs(struct pt_regs *regs)
{
	return !regs->softe;
	return (regs->softe == IRQS_DISABLED);
}

extern bool prep_irq_for_idle(void);
+3 −3
Original line number Diff line number Diff line
@@ -49,8 +49,8 @@
#define RECONCILE_IRQ_STATE(__rA, __rB)		\
	lbz	__rA,PACASOFTIRQEN(r13);	\
	lbz	__rB,PACAIRQHAPPENED(r13);	\
	cmpwi	cr0,__rA,0;			\
	li	__rA,0;				\
	cmpwi	cr0,__rA,IRQS_DISABLED;\
	li	__rA,IRQS_DISABLED;	\
	ori	__rB,__rB,PACA_IRQ_HARD_DIS;	\
	stb	__rB,PACAIRQHAPPENED(r13);	\
	beq	44f;				\
@@ -64,7 +64,7 @@

#define RECONCILE_IRQ_STATE(__rA, __rB)		\
	lbz	__rA,PACAIRQHAPPENED(r13);	\
	li	__rB,0;				\
	li	__rB,IRQS_DISABLED;	\
	ori	__rA,__rA,PACA_IRQ_HARD_DIS;	\
	stb	__rB,PACASOFTIRQEN(r13);	\
	stb	__rA,PACAIRQHAPPENED(r13)
+1 −1
Original line number Diff line number Diff line
@@ -873,7 +873,7 @@ static inline void kvmppc_fix_ee_before_entry(void)

	/* Only need to enable IRQs by hard enabling them after this */
	local_paca->irq_happened = 0;
	local_paca->soft_enabled = 1;
	local_paca->soft_enabled = IRQS_ENABLED;
#endif
}

+8 −8
Original line number Diff line number Diff line
@@ -130,7 +130,7 @@ END_FW_FTR_SECTION_IFSET(FW_FEATURE_SPLPAR)
	 */
#if defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_BUG)
	lbz	r10,PACASOFTIRQEN(r13)
	xori	r10,r10,1
	xori	r10,r10,IRQS_ENABLED
1:	tdnei	r10,0
	EMIT_BUG_ENTRY 1b,__FILE__,__LINE__,BUGFLAG_WARNING
#endif
@@ -147,7 +147,7 @@ system_call: /* label this so stack traces look sane */
	/* We do need to set SOFTE in the stack frame or the return
	 * from interrupt will be painful
	 */
	li	r10,1
	li	r10,IRQS_ENABLED
	std	r10,SOFTE(r1)

	CURRENT_THREAD_INFO(r11, r1)
@@ -743,7 +743,7 @@ resume_kernel:
	lwz	r8,TI_PREEMPT(r9)
	cmpwi	cr1,r8,0
	ld	r0,SOFTE(r1)
	cmpdi	r0,0
	cmpdi	r0,IRQS_DISABLED
	crandc	eq,cr1*4+eq,eq
	bne	restore

@@ -783,11 +783,11 @@ restore:
	 */
	ld	r5,SOFTE(r1)
	lbz	r6,PACASOFTIRQEN(r13)
	cmpwi	cr0,r5,0
	cmpwi	cr0,r5,IRQS_DISABLED
	beq	.Lrestore_irq_off

	/* We are enabling, were we already enabled ? Yes, just return */
	cmpwi	cr0,r6,1
	cmpwi	cr0,r6,IRQS_ENABLED
	beq	cr0,.Ldo_restore

	/*
@@ -806,7 +806,7 @@ restore:
	 */
.Lrestore_no_replay:
	TRACE_ENABLE_INTS
	li	r0,1
	li	r0,IRQS_ENABLED
	stb	r0,PACASOFTIRQEN(r13);

	/*
@@ -915,7 +915,7 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
#if defined(CONFIG_TRACE_IRQFLAGS) && defined(CONFIG_BUG)
	/* The interrupt should not have soft enabled. */
	lbz	r7,PACASOFTIRQEN(r13)
1:	tdnei	r7,0
1:	tdnei	r7,IRQS_DISABLED
	EMIT_BUG_ENTRY 1b,__FILE__,__LINE__,BUGFLAG_WARNING
#endif
	b	.Ldo_restore
@@ -1036,7 +1036,7 @@ _GLOBAL(enter_rtas)
	 * check it with the asm equivalent of WARN_ON
	 */
	lbz	r0,PACASOFTIRQEN(r13)
1:	tdnei	r0,0
1:	tdnei	r0,IRQS_DISABLED
	EMIT_BUG_ENTRY 1b,__FILE__,__LINE__,BUGFLAG_WARNING
#endif
	
Loading