Messages in this thread | | | From | Punit Agrawal <> | Subject | Re: Re: [PATCH] bpf: Simplify code by using for_each_cpu_wrap() | Date | Wed, 17 Aug 2022 17:57:29 +0100 |
| |
Hi Alexei,
Alexei Starovoitov <alexei.starovoitov@gmail.com> writes:
> On Wed, Aug 17, 2022 at 6:08 AM Punit Agrawal > <punit.agrawal@bytedance.com> wrote: >> >> No functional change intended. > > ? > >> - orig_cpu = cpu = raw_smp_processor_id(); >> - while (1) { >> + for_each_cpu_wrap(cpu, cpu_possible_mask, raw_smp_processor_id()) { >> struct pcpu_freelist_head *head; >> >> head = per_cpu_ptr(s->freelist, cpu); >> @@ -68,15 +67,10 @@ static inline void ___pcpu_freelist_push_nmi(struct pcpu_freelist *s, >> raw_spin_unlock(&head->lock); >> return; >> } >> - cpu = cpumask_next(cpu, cpu_possible_mask); >> - if (cpu >= nr_cpu_ids) >> - cpu = 0; >> - >> - /* cannot lock any per cpu lock, try extralist */ >> - if (cpu == orig_cpu && >> - pcpu_freelist_try_push_extra(s, node)) >> - return; >> } >> + >> + /* cannot lock any per cpu lock, try extralist */ >> + pcpu_freelist_try_push_extra(s, node); > > This is obviously not equivalent!
Thanks for taking a look. You're right - I missed the fact that it's an infinite loop until the node gets pushed to one of the lists.
I'll send an update with that fixed up.
| |