On Thu, Feb 13, 2025 at 11:01:41AM +0530, Suman Ghosh wrote: > This patch implements below changes, > > 1. To avoid concurrency with normal traffic uses > XDP queues. > 2. Since there are chances that XDP and AF_XDP can > fall under same queue uses separate flags to handle > dma buffers. > > Signed-off-by: Hariprasad Kelam <hkelam@xxxxxxxxxxx> > Signed-off-by: Suman Ghosh <sumang@xxxxxxxxxxx> > --- [...] > +void otx2_zc_napi_handler(struct otx2_nic *pfvf, struct xsk_buff_pool *pool, > + int queue, int budget) > +{ > + struct xdp_desc *xdp_desc = pool->tx_descs; > + int err, i, work_done = 0, batch; > + > + budget = min(budget, otx2_read_free_sqe(pfvf, queue)); > + batch = xsk_tx_peek_release_desc_batch(pool, budget); > + if (!batch) > + return; > + > + for (i = 0; i < batch; i++) { > + dma_addr_t dma_addr; > + > + dma_addr = xsk_buff_raw_get_dma(pool, xdp_desc[i].addr); > + err = otx2_xdp_sq_append_pkt(pfvf, NULL, dma_addr, xdp_desc[i].len, > + queue, OTX2_AF_XDP_FRAME); > + if (!err) { > + netdev_err(pfvf->netdev, "AF_XDP: Unable to transfer packet err%d\n", err); > + break; > + } > + work_done++; > + } > + > + if (work_done) > + xsk_tx_release(pool); this is broken actually. the batch api you're using above is doing tx release internally for you. Sorry for not catching this earlier but i was never CCed in this series. > +} > diff --git a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_xsk.h b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_xsk.h > index 022b3433edbb..8047fafee8fe 100644 > --- a/drivers/net/ethernet/marvell/octeontx2/nic/otx2_xsk.h > +++ b/drivers/net/ethernet/marvell/octeontx2/nic/otx2_xsk.h > @@ -17,5 +17,8 @@ int otx2_xsk_pool_disable(struct otx2_nic *pf, u16 qid); > int otx2_xsk_pool_alloc_buf(struct otx2_nic *pfvf, struct otx2_pool *pool, > dma_addr_t *dma, int idx); > int otx2_xsk_wakeup(struct net_device *dev, u32 queue_id, u32 flags); > +void otx2_zc_napi_handler(struct otx2_nic *pfvf, struct xsk_buff_pool *pool, > + int queue, int budget); > +void otx2_attach_xsk_buff(struct otx2_nic *pfvf, struct otx2_snd_queue *sq, int qidx); > > #endif /* OTX2_XSK_H */ > -- > 2.25.1 > >