> > First, fix the bug that keyword const of func arg should be after "*".
I believe there is no bug here. > This is because const before "*" means the value of "cbi" should not be > changed. Exactly, it says that the function itself will not change the value of "cbi". It just waits for the value to be changed by someone else. So please keep parameter list intact. > But we should monitor that cbi->use changed and then we can > jump out of loop. > > Second, instead of polling for cbi->use to be updated, use > wait event scheme. > > Fixes: a93ff62a8938 ("bpf: introduce basic Rx/Tx filters") > Cc: konstantin.anan...@intel.com > Cc: sta...@dpdk.org > > Signed-off-by: Feifei Wang <feifei.wa...@arm.com> > Reviewed-by: Ruifeng Wang <ruifeng.w...@arm.com> > --- > lib/bpf/bpf_pkt.c | 11 ++++------- > 1 file changed, 4 insertions(+), 7 deletions(-) > > diff --git a/lib/bpf/bpf_pkt.c b/lib/bpf/bpf_pkt.c > index 6e8248f0d6..08ed8ff68c 100644 > --- a/lib/bpf/bpf_pkt.c > +++ b/lib/bpf/bpf_pkt.c > @@ -111,9 +111,9 @@ bpf_eth_cbi_unuse(struct bpf_eth_cbi *cbi) > * Waits till datapath finished using given callback. > */ > static void > -bpf_eth_cbi_wait(const struct bpf_eth_cbi *cbi) > +bpf_eth_cbi_wait(struct bpf_eth_cbi *const cbi) > { > - uint32_t nuse, puse; > + uint32_t puse; > > /* make sure all previous loads and stores are completed */ > rte_smp_mb(); > @@ -122,11 +122,8 @@ bpf_eth_cbi_wait(const struct bpf_eth_cbi *cbi) > > /* in use, busy wait till current RX/TX iteration is finished */ > if ((puse & BPF_ETH_CBI_INUSE) != 0) { > - do { > - rte_pause(); > - rte_compiler_barrier(); > - nuse = cbi->use; > - } while (nuse == puse); > + rte_compiler_barrier(); > + rte_wait_event_32(&cbi->use, UINT_MAX, puse, ==, > __ATOMIC_RELAXED); > } > } > > -- > 2.25.1