From: "Loftus, Ciara" <ciara.loftus@intel.com>
To: Baruch Siach <baruch@tkos.co.il>, "Zhang, Qi Z" <qi.z.zhang@intel.com>
Cc: "dev@dpdk.org" <dev@dpdk.org>, "stable@dpdk.org" <stable@dpdk.org>
Subject: Re: [dpdk-dev] [PATCH] net/af_xdp: fix zero copy Tx queue drain
Date: Wed, 25 Aug 2021 09:32:29 +0000 [thread overview]
Message-ID: <PH0PR11MB4791E563B588D6562AC44F698EC69@PH0PR11MB4791.namprd11.prod.outlook.com> (raw)
In-Reply-To: <421e4003bb7f556588ae95f0ed32ce282906a000.1629737818.git.baruch@tkos.co.il>
>
> Call xsk_ring_prod__submit() before kick_tx() so that the kernel
> consumer sees the updated state of Tx ring. Otherwise, Tx packets are
> stuck in the ring until the next call to af_xdp_tx_zc().
>
> Fixes: d8a210774e1d ("net/af_xdp: support unaligned umem chunks")
> Cc: stable@dpdk.org
>
> Signed-off-by: Baruch Siach <baruch@tkos.co.il>
> ---
> drivers/net/af_xdp/rte_eth_af_xdp.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/drivers/net/af_xdp/rte_eth_af_xdp.c
> b/drivers/net/af_xdp/rte_eth_af_xdp.c
> index 74ffa4511284..81998d86b4aa 100644
> --- a/drivers/net/af_xdp/rte_eth_af_xdp.c
> +++ b/drivers/net/af_xdp/rte_eth_af_xdp.c
> @@ -502,10 +502,11 @@ af_xdp_tx_zc(void *queue, struct rte_mbuf
> **bufs, uint16_t nb_pkts)
>
> if (mbuf->pool == umem->mb_pool) {
> if (!xsk_ring_prod__reserve(&txq->tx, 1, &idx_tx)) {
> + xsk_ring_prod__submit(&txq->tx, count);
We cannot submit 'count' to the tx ring both here and at 'out'. We could end up submitting too many.
> kick_tx(txq, cq);
The purpose of this kick is not necessarily to transmit new descriptors but to drain the completion queue. No space in the completion queue may be what is preventing the kernel from transmitting existing tx buffers and then in userspace causing the the xsk_ring_prod__reserve to fail.
We are not trying to transmit new descriptors here.
> if (!xsk_ring_prod__reserve(&txq->tx, 1,
> &idx_tx))
> - goto out;
> + goto out_skip_tx;
> }
> desc = xsk_ring_prod__tx_desc(&txq->tx, idx_tx);
> desc->len = mbuf->pkt_len;
> @@ -527,7 +528,6 @@ af_xdp_tx_zc(void *queue, struct rte_mbuf **bufs,
> uint16_t nb_pkts)
>
> if (!xsk_ring_prod__reserve(&txq->tx, 1, &idx_tx)) {
> rte_pktmbuf_free(local_mbuf);
> - kick_tx(txq, cq);
> goto out;
> }
>
> @@ -551,11 +551,11 @@ af_xdp_tx_zc(void *queue, struct rte_mbuf
> **bufs, uint16_t nb_pkts)
> tx_bytes += mbuf->pkt_len;
> }
>
> - kick_tx(txq, cq);
> -
> out:
> xsk_ring_prod__submit(&txq->tx, count);
> + kick_tx(txq, cq);
I think this change is valid. We should kick here after the submit.
Thanks for the patch. Could you please spin a v2 if you agree with the above?
Thanks,
Ciara
>
> +out_skip_tx:
> txq->stats.tx_pkts += count;
> txq->stats.tx_bytes += tx_bytes;
> txq->stats.tx_dropped += nb_pkts - count;
> --
> 2.32.0
prev parent reply other threads:[~2021-08-25 9:32 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2021-08-23 16:56 Baruch Siach
2021-08-25 9:32 ` Loftus, Ciara [this message]
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=PH0PR11MB4791E563B588D6562AC44F698EC69@PH0PR11MB4791.namprd11.prod.outlook.com \
--to=ciara.loftus@intel.com \
--cc=baruch@tkos.co.il \
--cc=dev@dpdk.org \
--cc=qi.z.zhang@intel.com \
--cc=stable@dpdk.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).