>> +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. [Suman] Thanks for the comment, I will push a follow-up patch.