From: Yuanhan Liu <yliu@fridaylinux.org>
To: Tiwei Bie <tiwei.bie@intel.com>
Cc: Xiao Wang <xiao.w.wang@intel.com>,
dev@dpdk.org, stephen@networkplumber.org
Subject: Re: [PATCH v2 2/2] net/virtio: support GUEST ANNOUNCE
Date: Wed, 6 Dec 2017 22:22:54 +0800 [thread overview]
Message-ID: <20171206142254.GD17112@yliu-dev> (raw)
In-Reply-To: <20171206112311.u7uuv66lev3er4yh@debian-xvivbkq>
On Wed, Dec 06, 2017 at 07:23:11PM +0800, Tiwei Bie wrote:
> On Mon, Dec 04, 2017 at 06:02:08AM -0800, Xiao Wang wrote:
> [...]
> > diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
> > index 6a24fde..7313bdd 100644
> > --- a/drivers/net/virtio/virtio_rxtx.c
> > +++ b/drivers/net/virtio/virtio_rxtx.c
> > @@ -1100,3 +1100,84 @@
> >
> > return nb_tx;
> > }
> > +
> > +uint16_t
> > +virtio_inject_pkts(void *tx_queue, struct rte_mbuf **tx_pkts, uint16_t nb_pkts)
> > +{
> > + struct virtnet_tx *txvq = tx_queue;
> > + struct virtqueue *vq = txvq->vq;
> > + struct virtio_hw *hw = vq->hw;
> > + uint16_t hdr_size = hw->vtnet_hdr_size;
> > + uint16_t nb_used, nb_tx = 0;
> > +
> > + if (unlikely(nb_pkts < 1))
> > + return nb_pkts;
> > +
> > + PMD_TX_LOG(DEBUG, "%d packets to xmit", nb_pkts);
> > + nb_used = VIRTQUEUE_NUSED(vq);
> > +
> > + virtio_rmb();
> > + if (likely(nb_used > vq->vq_nentries - vq->vq_free_thresh))
> > + virtio_xmit_cleanup(vq, nb_used);
> > +
> > + for (nb_tx = 0; nb_tx < nb_pkts; nb_tx++) {
> > + struct rte_mbuf *txm = tx_pkts[nb_tx];
> > + int can_push = 0, use_indirect = 0, slots, need;
> > +
> > + /* optimize ring usage */
> > + if ((vtpci_with_feature(hw, VIRTIO_F_ANY_LAYOUT) ||
> > + vtpci_with_feature(hw, VIRTIO_F_VERSION_1)) &&
> > + rte_mbuf_refcnt_read(txm) == 1 &&
> > + RTE_MBUF_DIRECT(txm) &&
> > + txm->nb_segs == 1 &&
> > + rte_pktmbuf_headroom(txm) >= hdr_size &&
> > + rte_is_aligned(rte_pktmbuf_mtod(txm, char *),
> > + __alignof__(struct virtio_net_hdr_mrg_rxbuf)))
> > + can_push = 1;
> > + else if (vtpci_with_feature(hw, VIRTIO_RING_F_INDIRECT_DESC) &&
> > + txm->nb_segs < VIRTIO_MAX_TX_INDIRECT)
> > + use_indirect = 1;
> > +
> > + /* How many main ring entries are needed to this Tx?
> > + * any_layout => number of segments
> > + * indirect => 1
> > + * default => number of segments + 1
> > + */
> > + slots = use_indirect ? 1 : (txm->nb_segs + !can_push);
> > + need = slots - vq->vq_free_cnt;
> > +
> > + /* Positive value indicates it need free vring descriptors */
> > + if (unlikely(need > 0)) {
> > + nb_used = VIRTQUEUE_NUSED(vq);
> > + virtio_rmb();
> > + need = RTE_MIN(need, (int)nb_used);
> > +
> > + virtio_xmit_cleanup(vq, need);
> > + need = slots - vq->vq_free_cnt;
> > + if (unlikely(need > 0)) {
> > + PMD_TX_LOG(ERR,
> > + "No free tx descriptors to transmit");
> > + break;
> > + }
> > + }
> > +
> > + /* Enqueue Packet buffers */
> > + virtqueue_enqueue_xmit(txvq, txm, slots, use_indirect, can_push);
> > +
> > + txvq->stats.bytes += txm->pkt_len;
> > + virtio_update_packet_stats(&txvq->stats, txm);
> > + }
> > +
> > + txvq->stats.packets += nb_tx;
> > +
> > + if (likely(nb_tx)) {
> > + vq_update_avail_idx(vq);
> > +
> > + if (unlikely(virtqueue_kick_prepare(vq))) {
> > + virtqueue_notify(vq);
> > + PMD_TX_LOG(DEBUG, "Notified backend after xmit");
> > + }
> > + }
> > +
> > + return nb_tx;
> > +}
>
> Simple Tx has some special assumptions and setups of the txq.
> Basically the current implementation of virtio_inject_pkts()
> is a mirror of virtio_xmit_pkts(). So when simple Tx function
> is chosen, calling virtio_inject_pkts() could cause problems.
That's why I suggested to invoke the tx_pkt_burst callback directly.
--yliu
next prev parent reply other threads:[~2017-12-06 14:23 UTC|newest]
Thread overview: 112+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-11-24 11:03 [PATCH 0/2] net/virtio: support GUEST ANNOUNCE Xiao Wang
2017-11-24 11:03 ` [PATCH 1/2] net/virtio: make control queue thread-safe Xiao Wang
2017-11-24 5:38 ` Tiwei Bie
2017-11-30 2:10 ` Wang, Xiao W
2017-11-30 2:59 ` Stephen Hemminger
2017-12-01 1:38 ` Wang, Xiao W
2017-12-04 14:02 ` [PATCH v2 0/2] net/virtio: support GUEST ANNOUNCE Xiao Wang
2017-12-04 14:02 ` [PATCH v2 1/2] net/virtio: make control queue thread-safe Xiao Wang
2017-12-04 14:02 ` [PATCH v2 2/2] net/virtio: support GUEST ANNOUNCE Xiao Wang
2017-12-04 8:46 ` Tiwei Bie
2018-01-03 1:37 ` Wang, Xiao W
2018-01-03 8:42 ` Wang, Xiao W
2017-12-06 11:23 ` Tiwei Bie
2017-12-06 14:22 ` Yuanhan Liu [this message]
2018-01-03 1:41 ` Wang, Xiao W
2018-01-04 7:41 ` [PATCH v3 0/2] " Xiao Wang
2018-01-04 7:41 ` [PATCH v3 1/2] net/virtio: make control queue thread-safe Xiao Wang
2018-01-04 7:41 ` [PATCH v3 2/2] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-04 2:51 ` Tiwei Bie
2018-01-04 7:11 ` Wang, Xiao W
2018-01-04 15:59 ` [PATCH v4 0/3] " Xiao Wang
2018-01-04 15:59 ` [PATCH v4 1/3] net/virtio: make control queue thread-safe Xiao Wang
2018-01-04 15:59 ` [PATCH v4 2/3] net/virtio: add packet injection method Xiao Wang
2018-01-04 7:56 ` Tiwei Bie
2018-01-05 16:46 ` [PATCH v5 0/3] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-05 16:46 ` [PATCH v5 1/3] net/virtio: make control queue thread-safe Xiao Wang
2018-01-05 16:46 ` [PATCH v5 2/3] net/virtio: add packet injection method Xiao Wang
2018-01-05 18:00 ` Tiwei Bie
2018-01-07 2:37 ` Wang, Xiao W
2018-01-05 16:46 ` [PATCH v5 3/3] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-05 17:56 ` Tiwei Bie
2018-01-07 2:29 ` Wang, Xiao W
2018-01-07 12:05 ` [PATCH v6 0/3] " Xiao Wang
2018-01-07 12:05 ` [PATCH v6 1/3] net/virtio: make control queue thread-safe Xiao Wang
2018-01-08 13:06 ` Yuanhan Liu
2018-01-08 15:25 ` Wang, Xiao W
2018-01-07 12:05 ` [PATCH v6 2/3] net/virtio: add packet injection method Xiao Wang
2018-01-08 13:03 ` Yuanhan Liu
2018-01-08 15:11 ` Wang, Xiao W
2018-01-09 2:55 ` Wang, Xiao W
2018-01-09 14:26 ` [PATCH v7 0/3] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-09 14:26 ` [PATCH v7 1/3] net/virtio: make control queue thread-safe Xiao Wang
2018-01-09 14:26 ` [PATCH v7 2/3] net/virtio: add packet injection method Xiao Wang
2018-01-09 14:26 ` [PATCH v7 3/3] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-09 8:49 ` Maxime Coquelin
2018-01-09 10:58 ` Wang, Xiao W
2018-01-09 11:03 ` Wang, Xiao W
2018-01-09 11:41 ` Thomas Monjalon
2018-01-09 13:36 ` Yuanhan Liu
2018-01-09 13:26 ` [PATCH v8 0/5] " Xiao Wang
2018-01-09 13:26 ` [PATCH v8 1/5] net/virtio: make control queue thread-safe Xiao Wang
2018-01-09 13:26 ` [PATCH v8 2/5] net/virtio: add packet injection method Xiao Wang
2018-01-09 13:26 ` [PATCH v8 3/5] net: add a helper for making RARP packet Xiao Wang
2018-01-09 13:48 ` Thomas Monjalon
2018-01-09 15:52 ` Wang, Xiao W
2018-01-09 16:09 ` [PATCH v9 0/5] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-09 16:09 ` [PATCH v9 1/5] net/virtio: make control queue thread-safe Xiao Wang
2018-01-09 16:09 ` [PATCH v9 2/5] net/virtio: add packet injection method Xiao Wang
2018-01-09 16:09 ` [PATCH v9 3/5] net: add a helper for making RARP packet Xiao Wang
2018-01-09 17:22 ` Thomas Monjalon
2018-01-10 1:23 ` [PATCH v10 0/5] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-10 1:23 ` [PATCH v10 1/5] net/virtio: make control queue thread-safe Xiao Wang
2018-01-10 1:23 ` [PATCH v10 2/5] net/virtio: add packet injection method Xiao Wang
2018-01-10 1:23 ` [PATCH v10 3/5] net: add a helper for making RARP packet Xiao Wang
2018-01-10 13:06 ` Yuanhan Liu
2018-01-10 14:10 ` Thomas Monjalon
2018-01-16 9:01 ` Olivier Matz
2018-01-16 9:43 ` Wang, Xiao W
2018-01-16 10:42 ` Olivier Matz
2018-01-16 11:03 ` Wang, Xiao W
2018-01-16 11:42 ` Wang, Xiao W
2018-01-16 21:40 ` [PATCH v11 0/5] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-16 21:40 ` [PATCH v11 1/5] net/virtio: make control queue thread-safe Xiao Wang
2018-01-16 21:41 ` [PATCH v11 2/5] net/virtio: add packet injection method Xiao Wang
2018-01-16 21:41 ` [PATCH v11 3/5] net: add a helper for making RARP packet Xiao Wang
2018-01-16 14:29 ` Olivier Matz
2018-01-16 21:41 ` [PATCH v11 4/5] vhost: use lib API to make " Xiao Wang
2018-01-16 21:41 ` [PATCH v11 5/5] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-19 17:33 ` Ferruh Yigit
2018-01-20 14:31 ` Ferruh Yigit
2018-01-21 1:31 ` Wang, Xiao W
2018-01-18 3:09 ` [PATCH v11 0/5] " Yuanhan Liu
2018-01-18 3:14 ` [PATCH 1/2] net: fixup RARP generation Yuanhan Liu
2018-01-18 3:14 ` [PATCH 2/2] net: fix build error Yuanhan Liu
2018-01-18 7:38 ` Thomas Monjalon
2018-01-18 7:45 ` Wang, Xiao W
2018-01-18 8:03 ` Yuanhan Liu
2018-01-18 8:36 ` Thomas Monjalon
2018-01-18 8:48 ` Yuanhan Liu
2018-01-18 8:38 ` [PATCH 1/2] net: fixup RARP generation Thomas Monjalon
2018-01-18 8:51 ` Yuanhan Liu
2018-01-18 8:53 ` Wang, Xiao W
2018-01-19 16:04 ` Ferruh Yigit
2018-01-10 1:23 ` [PATCH v10 4/5] vhost: use lib API to make RARP packet Xiao Wang
2018-01-10 1:23 ` [PATCH v10 5/5] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-09 16:09 ` [PATCH v9 4/5] vhost: use lib API to make RARP packet Xiao Wang
2018-01-09 16:09 ` [PATCH v9 5/5] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-09 13:26 ` [PATCH v8 4/5] vhost: use lib API to make RARP packet Xiao Wang
2018-01-09 13:26 ` [PATCH v8 5/5] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-09 14:38 ` [PATCH v8 0/5] " Maxime Coquelin
2018-01-07 12:05 ` [PATCH v6 3/3] " Xiao Wang
2018-01-05 20:27 ` [PATCH v4 2/3] net/virtio: add packet injection method Stephen Hemminger
2018-01-06 4:41 ` Tiwei Bie
2018-01-04 15:59 ` [PATCH v4 3/3] net/virtio: support GUEST ANNOUNCE Xiao Wang
2018-01-04 11:13 ` Tiwei Bie
2017-11-24 11:04 ` [PATCH 2/2] " Xiao Wang
2017-11-24 6:04 ` Tiwei Bie
2017-11-30 2:37 ` Wang, Xiao W
2017-11-27 12:48 ` Yuanhan Liu
2017-11-30 2:41 ` Wang, Xiao W
2017-12-05 14:26 ` Yuanhan Liu
2018-01-03 1:43 ` Wang, Xiao W
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=20171206142254.GD17112@yliu-dev \
--to=yliu@fridaylinux.org \
--cc=dev@dpdk.org \
--cc=stephen@networkplumber.org \
--cc=tiwei.bie@intel.com \
--cc=xiao.w.wang@intel.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.