> Hi Lorenzo, Hi Ilias, thx for the review. > > On Tue, Oct 27, 2020 at 08:04:07PM +0100, Lorenzo Bianconi wrote: [...] > > +void xdp_return_frame_bulk(struct xdp_frame *xdpf, > > + struct xdp_frame_bulk *bq) > > +{ > > + struct xdp_mem_info *mem = &xdpf->mem; > > + struct xdp_mem_allocator *xa, *nxa; > > + > > + if (mem->type != MEM_TYPE_PAGE_POOL) { > > + __xdp_return(xdpf->data, &xdpf->mem, false); > > + return; > > + } > > + > > + rcu_read_lock(); > > + > > + xa = bq->xa; > > + if (unlikely(!xa || mem->id != xa->mem.id)) { > > Why is this marked as unlikely? The driver passes it as NULL. Should unlikely be > checked on both xa and the comparison? xa is NULL only for the first xdp_frame in the burst while it is set for subsequent ones. Do you think it is better to remove it? > > > + nxa = rhashtable_lookup(mem_id_ht, &mem->id, mem_id_rht_params); > > Is there a chance nxa can be NULL? I do not think so since the page_pool is not destroyed while there are in-flight pages, right? Regards, Lorenzo > > > + if (unlikely(!xa)) { > > Same here, driver passes it as NULL > > > + bq->count = 0; > > + bq->xa = nxa; > > + xa = nxa; > > + } > > + } > > + > > + if (mem->id != xa->mem.id || bq->count == XDP_BULK_QUEUE_SIZE) > > + xdp_flush_frame_bulk(bq); > > + > > + bq->q[bq->count++] = xdpf->data; > > + if (mem->id != xa->mem.id) > > + bq->xa = nxa; > > + > > + rcu_read_unlock(); > > +} > > +EXPORT_SYMBOL_GPL(xdp_return_frame_bulk); > > + > > void xdp_return_buff(struct xdp_buff *xdp) > > { > > __xdp_return(xdp->data, &xdp->rxq->mem, true); > > -- > > 2.26.2 > > > > Cheers > /Ilias
Attachment:
signature.asc
Description: PGP signature