Re: [PATCH 09/19] rcu/context-tracking: Remove rcu_irq_enter/exit()

From: Frederic Weisbecker
Date: Wed Mar 09 2022 - 17:25:27 EST


On Sat, Mar 05, 2022 at 03:16:03PM +0100, Peter Zijlstra wrote:
> On Wed, Mar 02, 2022 at 04:48:00PM +0100, Frederic Weisbecker wrote:
> > void ct_irq_enter_irqson(void)
> > {
> > - rcu_irq_enter_irqson();
> > + unsigned long flags;
> > +
> > + local_irq_save(flags);
> > + ct_irq_enter();
> > + local_irq_restore(flags);
> > }
> >
> > void ct_irq_exit_irqson(void)
> > {
> > - rcu_irq_exit_irqson();
> > + unsigned long flags;
> > +
> > + local_irq_save(flags);
> > + ct_irq_exit();
> > + local_irq_restore(flags);
> > }
>
> I know you're just copying code around, but this is broken per
> construction :/
>
> On the irq_enter site, local_irq_save() will hit a tracepoint, which
> requires RCU, which will only be made available by the ct_irq_enter().
> Same in reverse for the exit case.

Ouch. And playing a game similar to that in default_idle_call() is going to
be trickier because rcu_irq_enter() may or may not exit an RCU-off mode. But it's
feasible. Again I'll fix it ahead.

Thanks!