patches for DPDK stable branches
 help / color / mirror / Atom feed
From: luca.boccassi@gmail.com
To: Olivier Matz <olivier.matz@6wind.com>
Cc: Yuanhan Liu <yliu@fridaylinux.org>, dpdk stable <stable@dpdk.org>
Subject: [dpdk-stable] patch 'net/virtio: fix queue setup consistency' has been queued to LTS release 16.11.4
Date: Mon, 30 Oct 2017 15:34:46 +0000	[thread overview]
Message-ID: <20171030153511.13322-43-luca.boccassi@gmail.com> (raw)
In-Reply-To: <20171030153511.13322-1-luca.boccassi@gmail.com>

Hi,

FYI, your patch has been queued to LTS release 16.11.4

Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 11/01/17. So please
shout if anyone has objections.

Thanks.

Kind regards,
Luca Boccassi

---
>From 29113fef0f37476ba992e00ad17cd23a7eb6ac89 Mon Sep 17 00:00:00 2001
From: Olivier Matz <olivier.matz@6wind.com>
Date: Thu, 7 Sep 2017 14:13:43 +0200
Subject: [PATCH] net/virtio: fix queue setup consistency

[ upstream commit efc83a1e7fc319876835738871bf968e7ed5c935 ]

In rx/tx queue setup functions, some code is executed only if
use_simple_rxtx == 1. The value of this variable can change depending on
the offload flags or sse support. If Rx queue setup is called before Tx
queue setup, it can result in an invalid configuration:

- dev_configure is called: use_simple_rxtx is initialized to 0
- rx queue setup is called: queues are initialized without simple path
  support
- tx queue setup is called: use_simple_rxtx switch to 1, and simple
  Rx/Tx handlers are selected

Fix this by postponing a part of Rx/Tx queue initialization in
dev_start(), as it was the case in the initial implementation.

Fixes: 48cec290a3d2 ("net/virtio: move queue configure code to proper place")

Signed-off-by: Olivier Matz <olivier.matz@6wind.com>
Acked-by: Yuanhan Liu <yliu@fridaylinux.org>
---
 drivers/net/virtio/virtio_ethdev.c | 13 +++++++++++++
 drivers/net/virtio/virtio_ethdev.h |  6 ++++++
 drivers/net/virtio/virtio_rxtx.c   | 40 ++++++++++++++++++++++++++++++--------
 3 files changed, 51 insertions(+), 8 deletions(-)

diff --git a/drivers/net/virtio/virtio_ethdev.c b/drivers/net/virtio/virtio_ethdev.c
index 67ebb1e5b..6903368db 100644
--- a/drivers/net/virtio/virtio_ethdev.c
+++ b/drivers/net/virtio/virtio_ethdev.c
@@ -1523,6 +1523,19 @@ virtio_dev_start(struct rte_eth_dev *dev)
 	struct virtnet_rx *rxvq;
 	struct virtnet_tx *txvq __rte_unused;
 	struct virtio_hw *hw = dev->data->dev_private;
+	int ret;
+
+	/* Finish the initialization of the queues */
+	for (i = 0; i < dev->data->nb_rx_queues; i++) {
+		ret = virtio_dev_rx_queue_setup_finish(dev, i);
+		if (ret < 0)
+			return ret;
+	}
+	for (i = 0; i < dev->data->nb_tx_queues; i++) {
+		ret = virtio_dev_tx_queue_setup_finish(dev, i);
+		if (ret < 0)
+			return ret;
+	}
 
 	/* check if lsc interrupt feature is enabled */
 	if (dev->data->dev_conf.intr_conf.lsc) {
diff --git a/drivers/net/virtio/virtio_ethdev.h b/drivers/net/virtio/virtio_ethdev.h
index 4feccf939..c491ec1b0 100644
--- a/drivers/net/virtio/virtio_ethdev.h
+++ b/drivers/net/virtio/virtio_ethdev.h
@@ -88,10 +88,16 @@ int  virtio_dev_rx_queue_setup(struct rte_eth_dev *dev, uint16_t rx_queue_id,
 		const struct rte_eth_rxconf *rx_conf,
 		struct rte_mempool *mb_pool);
 
+int virtio_dev_rx_queue_setup_finish(struct rte_eth_dev *dev,
+				uint16_t rx_queue_id);
+
 int  virtio_dev_tx_queue_setup(struct rte_eth_dev *dev, uint16_t tx_queue_id,
 		uint16_t nb_tx_desc, unsigned int socket_id,
 		const struct rte_eth_txconf *tx_conf);
 
+int virtio_dev_tx_queue_setup_finish(struct rte_eth_dev *dev,
+				uint16_t tx_queue_id);
+
 uint16_t virtio_recv_pkts(void *rx_queue, struct rte_mbuf **rx_pkts,
 		uint16_t nb_pkts);
 
diff --git a/drivers/net/virtio/virtio_rxtx.c b/drivers/net/virtio/virtio_rxtx.c
index a33ef1a88..ad582f3e5 100644
--- a/drivers/net/virtio/virtio_rxtx.c
+++ b/drivers/net/virtio/virtio_rxtx.c
@@ -412,9 +412,6 @@ virtio_dev_rx_queue_setup(struct rte_eth_dev *dev,
 	struct virtio_hw *hw = dev->data->dev_private;
 	struct virtqueue *vq = hw->vqs[vtpci_queue_idx];
 	struct virtnet_rx *rxvq;
-	int error, nbufs;
-	struct rte_mbuf *m;
-	uint16_t desc_idx;
 
 	PMD_INIT_FUNC_TRACE();
 
@@ -431,10 +428,24 @@ virtio_dev_rx_queue_setup(struct rte_eth_dev *dev,
 	}
 	dev->data->rx_queues[queue_idx] = rxvq;
 
+	return 0;
+}
+
+int
+virtio_dev_rx_queue_setup_finish(struct rte_eth_dev *dev, uint16_t queue_idx)
+{
+	uint16_t vtpci_queue_idx = 2 * queue_idx + VTNET_SQ_RQ_QUEUE_IDX;
+	struct virtio_hw *hw = dev->data->dev_private;
+	struct virtqueue *vq = hw->vqs[vtpci_queue_idx];
+	struct virtnet_rx *rxvq = &vq->rxq;
+	struct rte_mbuf *m;
+	uint16_t desc_idx;
+	int error, nbufs;
+
+	PMD_INIT_FUNC_TRACE();
 
 	/* Allocate blank mbufs for the each rx descriptor */
 	nbufs = 0;
-	error = ENOSPC;
 
 	if (hw->use_simple_rxtx) {
 		for (desc_idx = 0; desc_idx < vq->vq_nentries;
@@ -525,7 +536,6 @@ virtio_dev_tx_queue_setup(struct rte_eth_dev *dev,
 	struct virtqueue *vq = hw->vqs[vtpci_queue_idx];
 	struct virtnet_tx *txvq;
 	uint16_t tx_free_thresh;
-	uint16_t desc_idx;
 
 	PMD_INIT_FUNC_TRACE();
 
@@ -554,9 +564,24 @@ virtio_dev_tx_queue_setup(struct rte_eth_dev *dev,
 
 	vq->vq_free_thresh = tx_free_thresh;
 
+	dev->data->tx_queues[queue_idx] = txvq;
+	return 0;
+}
+
+int
+virtio_dev_tx_queue_setup_finish(struct rte_eth_dev *dev,
+				uint16_t queue_idx)
+{
+	uint8_t vtpci_queue_idx = 2 * queue_idx + VTNET_SQ_TQ_QUEUE_IDX;
+	struct virtio_hw *hw = dev->data->dev_private;
+	struct virtqueue *vq = hw->vqs[vtpci_queue_idx];
+	uint16_t mid_idx = vq->vq_nentries >> 1;
+	struct virtnet_tx *txvq = &vq->txq;
+	uint16_t desc_idx;
+
+	PMD_INIT_FUNC_TRACE();
+
 	if (hw->use_simple_rxtx) {
-		uint16_t mid_idx  = vq->vq_nentries >> 1;
-
 		for (desc_idx = 0; desc_idx < mid_idx; desc_idx++) {
 			vq->vq_ring.avail->ring[desc_idx] =
 				desc_idx + mid_idx;
@@ -578,7 +603,6 @@ virtio_dev_tx_queue_setup(struct rte_eth_dev *dev,
 
 	VIRTQUEUE_DUMP(vq);
 
-	dev->data->tx_queues[queue_idx] = txvq;
 	return 0;
 }
 
-- 
2.11.0

  parent reply	other threads:[~2017-10-30 15:37 UTC|newest]

Thread overview: 109+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2017-10-30 15:34 [dpdk-stable] patch 'cmdline: fix warning for unused return value' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net: fix inner L2 length in packet type parser' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'vfio: fix close unchecked file descriptor' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'eal: fix auxv open check for ARM and PPC' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/i40e: fix flow control watermark mismatch' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/nfp: fix RSS' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/i40e: fix PF notify issue when VF is not up' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/ixgbe: fix mapping of user priority to TC' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/enic: fix possible null pointer dereference' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/mlx5: fix clang build' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/mlx5: improve stack usage during link update' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/mlx5: fix probe failure report' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/cxgbe: fix memory leak' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/ixgbe: fix adding a mirror rule' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/vmxnet3: fix MAC address set' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/i40e: fix memory leak if VF init fails' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/i40e: fix i40evf MAC filter table' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/mlx5: fix Tx stats error counter definition' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/mlx5: fix Tx stats error counter logic' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/i40e: fix packet count for PF' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'test: fix assignment operation' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/igb: fix memcpy length' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/i40e/base: fix bool definition' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/i40e: fix variable assignment' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/qede/base: fix to use a passed ptt handle' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/qede/base: fix macros to check chip revision/metal' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/qede/base: fix API return types' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/qede/base: fix number of app table entries' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/i40e: fix clear xstats bug in VF' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'app/testpmd: fix packet throughput after stats reset' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/i40e: fix mirror rule reset when port is closed' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/bnxt: fix an issue with broadcast traffic' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/bnxt: set checksum offload flags correctly' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/bnxt: update status of Rx IP/L4 CKSUM' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/bnxt: fix interrupt handler' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/vmxnet3: fix dereference before null check' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'uio: fix compilation with -Og' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'cmdline: " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'hash: fix eviction counter' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'mem: fix malloc element free in debug mode' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'eal: copy raw strings taken from command line' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/virtio: fix mbuf port for simple Rx function' " luca.boccassi
2017-10-30 15:34 ` luca.boccassi [this message]
2017-10-30 15:34 ` [dpdk-stable] patch 'net/virtio: fix untrusted scalar value' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'timer: use 64-bit specific code on more platforms' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/virtio: fix compilation with -Og' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/bonding: fix LACP slave deactivate behavioral' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/qede/base: fix for VF malicious indication' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/qede/base: fix return code to align with FW' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'app/testpmd: fix invalid port id parameters' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/mlx5: fix clang compilation error' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/enic: fix assignment' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/i40e: fix uninitialized variable' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/ixgbe: fix VFIO interrupt mapping in VF' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'net/ixgbe: fix uninitialized variable' " luca.boccassi
2017-10-30 15:34 ` [dpdk-stable] patch 'examples/l2fwd-crypto: fix uninitialized errno value' " luca.boccassi
2017-10-30 15:35 ` [dpdk-stable] patch 'drivers/crypto: use snprintf return value correctly' " luca.boccassi
2017-10-30 15:35 ` [dpdk-stable] patch 'net/i40e: fix flexible payload configuration' " luca.boccassi
2017-10-30 15:35 ` [dpdk-stable] patch 'net/i40e: fix mbuf free in vector Tx' " luca.boccassi
2017-10-30 15:35 ` [dpdk-stable] patch 'kni: fix ethtool build with kernel 4.11' " luca.boccassi
2017-10-30 15:35 ` [dpdk-stable] patch 'kni: fix build on RHEL 7.4' " luca.boccassi
2017-10-30 15:35 ` [dpdk-stable] patch 'kni: fix build on SLE12 SP3' " luca.boccassi
2017-10-30 15:35 ` [dpdk-stable] patch 'examples/l2fwd-cat: fix build with PQOS 1.4' " luca.boccassi
2017-10-30 15:35 ` [dpdk-stable] patch 'examples/l2fwd_fork: fix message pool init' " luca.boccassi
2017-10-30 15:35 ` [dpdk-stable] patch 'examples/l3fwd-acl: check fseek return' " luca.boccassi
2017-10-30 15:35 ` [dpdk-stable] patch 'examples/performance-thread: check thread creation' " luca.boccassi
2017-10-30 15:35 ` [dpdk-stable] patch 'examples/performance-thread: fix out-of-bounds sched array' " luca.boccassi
2017-10-30 15:35 ` [dpdk-stable] patch 'examples/performance-thread: fix out-of-bounds tls " luca.boccassi
2017-11-02 12:02 ` [dpdk-stable] patch 'eal/bsd: fix missing interrupt stub functions' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'net/virtio: flush Rx queues on start' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'net/virtio: fix Tx packet length stats' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'examples/qos_sched: fix uninitialized config' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'examples/ipsec-secgw: fix IP version check' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'cryptodev: fix build with -Ofast' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'examples/ipsec-secgw: fix IPv6 payload length' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'app/testpmd: fix RSS structure initialisation' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'net/enic: fix packet loss after MTU change' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'net/ixgbe: fix PF DCB info' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'app/testpmd: fix mapping of user priority to DCB TC' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'net/bnxt: fix Tx offload capability' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'net/bnxt: fix Rx " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'net/bnxt: fix a bit shift operation' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'net/bnxt: fix a potential null pointer dereference' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'eal/x86: fix atomic cmpset' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'examples/multi_process: fix received message length' " luca.boccassi
2017-11-02 12:02   ` [dpdk-stable] patch 'lpm6: fix compilation with -Og' " luca.boccassi
2017-11-10 16:09     ` [dpdk-stable] patch 'buildtools: fix icc build' " luca.boccassi
2017-11-10 16:09       ` [dpdk-stable] patch 'config: fix bnx2x option for armv7a' " luca.boccassi
2017-11-10 16:09       ` [dpdk-stable] patch 'net/i40e: fix mirror with firmware 6.0' " luca.boccassi
2017-11-10 16:09       ` [dpdk-stable] patch 'net/i40e: fix Rx packets number for NEON' " luca.boccassi
2017-11-10 16:09       ` [dpdk-stable] patch 'net/vmxnet3: fix memory leak when releasing queues' " luca.boccassi
2017-11-10 16:09       ` [dpdk-stable] patch 'net/i40e: fix VFIO interrupt mapping in VF' " luca.boccassi
2017-11-10 16:09       ` [dpdk-stable] patch 'net/i40e: fix Rx queue " luca.boccassi
2017-11-10 16:09       ` [dpdk-stable] patch 'net/igb: fix Rx interrupt with VFIO and MSI-X' " luca.boccassi
2017-11-10 16:09       ` [dpdk-stable] patch 'net/pcap: fix memory leak in dumper open' " luca.boccassi
2017-11-10 16:09       ` [dpdk-stable] patch 'test/pmd_perf: fix crash with multiple devices' " luca.boccassi
2017-11-10 16:09       ` [dpdk-stable] patch 'app/testpmd: fix forwarding between non consecutive ports' " luca.boccassi
2017-11-10 16:09       ` [dpdk-stable] patch 'app/testpmd: fix topology error message' " luca.boccassi
2017-11-10 16:09       ` [dpdk-stable] patch 'usertools: fix device binding with python 3' " luca.boccassi
2017-11-10 16:09       ` [dpdk-stable] patch 'net/qede/base: fix division by zero' " luca.boccassi
2017-11-10 16:09       ` [dpdk-stable] patch 'net/qede: fix icc build' " luca.boccassi
2017-11-10 16:10       ` [dpdk-stable] patch 'buildtools: check allocation error in pmdinfogen' " luca.boccassi
2017-11-13 14:49         ` [dpdk-stable] patch 'net/i40e: fix VF cannot forward packets issue' " luca.boccassi
2017-11-13 14:49           ` [dpdk-stable] patch 'net/nfp: fix stats struct initial value' " luca.boccassi
2017-11-13 14:49           ` [dpdk-stable] patch 'net/bnxt: fix link handling and configuration' " luca.boccassi
2017-11-13 14:49           ` [dpdk-stable] patch 'net/mlx5: fix link speed bitmasks' " luca.boccassi
2017-11-13 14:49           ` [dpdk-stable] patch 'test/memzone: fix memory leak' " luca.boccassi
2017-11-13 14:49           ` [dpdk-stable] patch 'pdump: fix possible mbuf leak on failure' " luca.boccassi
2017-11-13 14:49           ` [dpdk-stable] patch 'ring: guarantee load/load order in enqueue and dequeue' " luca.boccassi

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=20171030153511.13322-43-luca.boccassi@gmail.com \
    --to=luca.boccassi@gmail.com \
    --cc=olivier.matz@6wind.com \
    --cc=stable@dpdk.org \
    --cc=yliu@fridaylinux.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).