Re: [PATCH net-next 12/24] seg6: Use nested-BH locking for seg6_bpf_srh_states.

From: Sebastian Andrzej Siewior
Date: Fri Jan 12 2024 - 06:24:14 EST


On 2023-12-18 09:33:39 [+0100], Paolo Abeni wrote:
> > --- a/net/ipv6/seg6_local.c
> > +++ b/net/ipv6/seg6_local.c
> > @@ -1420,41 +1422,44 @@ static int input_action_end_bpf(struct sk_buff *skb,
> > }
> > advance_nextseg(srh, &ipv6_hdr(skb)->daddr);
> >
> > - /* preempt_disable is needed to protect the per-CPU buffer srh_state,
> > - * which is also accessed by the bpf_lwt_seg6_* helpers
> > + /* The access to the per-CPU buffer srh_state is protected by running
> > + * always in softirq context (with disabled BH). On PREEMPT_RT the
> > + * required locking is provided by the following local_lock_nested_bh()
> > + * statement. It is also accessed by the bpf_lwt_seg6_* helpers via
> > + * bpf_prog_run_save_cb().
> > */
> > - preempt_disable();
> > - srh_state->srh = srh;
> > - srh_state->hdrlen = srh->hdrlen << 3;
> > - srh_state->valid = true;
> > + scoped_guard(local_lock_nested_bh, &seg6_bpf_srh_states.bh_lock) {
> > + srh_state = this_cpu_ptr(&seg6_bpf_srh_states);
> > + srh_state->srh = srh;
> > + srh_state->hdrlen = srh->hdrlen << 3;
> > + srh_state->valid = true;
>
> Here the 'scoped_guard' usage adds a lot of noise to the patch, due to
> the added indentation. What about using directly
> local_lock_nested_bh()/local_unlock_nested_bh() ?

If this is preferred, sure.

> Cheers,
>
> Paolo

Sebastian