Commit 59bc300b authored by Peter Zijlstra's avatar Peter Zijlstra Committed by Thomas Gleixner
Browse files

x86/entry: Clarify irq_{enter,exit}_rcu()



Because:

  irq_enter_rcu() includes lockdep_hardirq_enter()
  irq_exit_rcu() does *NOT* include lockdep_hardirq_exit()

Which resulted in two 'stray' lockdep_hardirq_exit() calls in
idtentry.h, and me spending a long time trying to find the matching
enter calls.

Signed-off-by: default avatarPeter Zijlstra (Intel) <peterz@infradead.org>
Signed-off-by: default avatarThomas Gleixner <tglx@linutronix.de>
Link: https://lkml.kernel.org/r/20200529213321.359433429@infradead.org

parent fd501d4f
Loading
Loading
Loading
Loading
+0 −2
Original line number Diff line number Diff line
@@ -206,7 +206,6 @@ __visible noinstr void func(struct pt_regs *regs, \
	kvm_set_cpu_l1tf_flush_l1d();					\
	__##func (regs, (u8)error_code);				\
	irq_exit_rcu();							\
	lockdep_hardirq_exit();						\
	instrumentation_end();						\
	idtentry_exit_cond_rcu(regs, rcu_exit);				\
}									\
@@ -249,7 +248,6 @@ __visible noinstr void func(struct pt_regs *regs) \
	kvm_set_cpu_l1tf_flush_l1d();					\
	run_on_irqstack_cond(__##func, regs, regs);			\
	irq_exit_rcu();							\
	lockdep_hardirq_exit();						\
	instrumentation_end();						\
	idtentry_exit_cond_rcu(regs, rcu_exit);				\
}									\
+14 −7
Original line number Diff line number Diff line
@@ -404,12 +404,7 @@ static inline void tick_irq_exit(void)
#endif
}

/**
 * irq_exit_rcu() - Exit an interrupt context without updating RCU
 *
 * Also processes softirqs if needed and possible.
 */
void irq_exit_rcu(void)
static inline void __irq_exit_rcu(void)
{
#ifndef __ARCH_IRQ_EXIT_IRQS_DISABLED
	local_irq_disable();
@@ -424,6 +419,18 @@ void irq_exit_rcu(void)
	tick_irq_exit();
}

/**
 * irq_exit_rcu() - Exit an interrupt context without updating RCU
 *
 * Also processes softirqs if needed and possible.
 */
void irq_exit_rcu(void)
{
	__irq_exit_rcu();
	 /* must be last! */
	lockdep_hardirq_exit();
}

/**
 * irq_exit - Exit an interrupt context, update RCU and lockdep
 *
@@ -431,7 +438,7 @@ void irq_exit_rcu(void)
 */
void irq_exit(void)
{
	irq_exit_rcu();
	__irq_exit_rcu();
	rcu_irq_exit();
	 /* must be last! */
	lockdep_hardirq_exit();