On Thu, Mar 19, 2026 at 10:03:15AM +0100, Sebastian Andrzej Siewior wrote:
> On 2026-03-18 18:08:21 [-0700], Boqun Feng wrote:
> > @@ -1979,6 +1986,17 @@ static void process_srcu(struct work_struct *work)
> >     srcu_reschedule(ssp, curdelay);
> >  }
> >  
> > +static void srcu_irq_work(struct irq_work *work)
> > +{
> > +   struct srcu_struct *ssp;
> > +   struct srcu_usage *sup;
> > +
> > +   sup = container_of(work, struct srcu_usage, irq_work);
> > +   ssp = sup->srcu_ssp;
> > +
> > +   queue_delayed_work(rcu_gp_wq, &sup->work, !!srcu_get_delay(ssp));
> > +}
> > +
> 
> Please just use the queue_delayed_work() with a delay >0.
> 

That doesn't work since queue_delayed_work() with a positive delay will
still acquire timer base lock, and we can have BPF instrument with timer
base lock held i.e. calling call_srcu() with timer base lock.

irq_work on the other hand doesn't use any locking.

Regards,
Boqun

> Sebastian

Reply via email to