patches for DPDK stable branches
 help / color / mirror / Atom feed
From: Kevin Traynor <ktraynor@redhat.com>
To: Beilei Xing <beilei.xing@intel.com>
Cc: Konstantin Ananyev <konstantin.ananyev@intel.com>,
	dpdk stable <stable@dpdk.org>
Subject: [dpdk-stable] patch 'net/i40e: fix Rx instability with vector mode' has been queued to stable release 18.08.1
Date: Fri, 23 Nov 2018 10:26:50 +0000	[thread overview]
Message-ID: <20181123102713.17309-46-ktraynor@redhat.com> (raw)
In-Reply-To: <20181123102713.17309-1-ktraynor@redhat.com>

Hi,

FYI, your patch has been queued to stable release 18.08.1

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/29/18. So please
shout if anyone has objections.

Also note that after the patch there's a diff of the upstream commit vs the patch applied
to the branch. If the code is different (ie: not only metadata diffs), due for example to
a change in context or macro names, please double check it.

Thanks.

Kevin Traynor

---
>From b9d615675c577192f26e1203c54c70aa22f483fd Mon Sep 17 00:00:00 2001
From: Beilei Xing <beilei.xing@intel.com>
Date: Mon, 5 Nov 2018 11:18:12 +0800
Subject: [PATCH] net/i40e: fix Rx instability with vector mode

[ upstream commit 054d1be48cc114c5d3bf87c7ebdf46703876e8d5 ]

Previously, there is instability during vector Rx if descriptor
number is not power of 2, e.g. process hang and some Rx packets
are unexpectedly empty. That's because vector Rx mode assumes Rx
descriptor number is power of 2 when doing bit mask.
This patch allows vector mode only when the number of Rx descriptor
is power of 2.

Fixes: 8e109464c022 ("i40e: allow vector Rx and Tx usage")
Fixes: a3c83a2527e1 ("net/i40e: enable runtime queue setup")

Signed-off-by: Beilei Xing <beilei.xing@intel.com>
Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
---
 doc/guides/nics/i40e.rst                | 29 +++++++++++++++++++
 drivers/net/i40e/i40e_rxtx.c            |  5 ++++
 drivers/net/i40e/i40e_rxtx_vec_common.h | 38 +++++++++++++++++++++++++
 3 files changed, 72 insertions(+)

diff --git a/doc/guides/nics/i40e.rst b/doc/guides/nics/i40e.rst
index 65d87f869..003257ccc 100644
--- a/doc/guides/nics/i40e.rst
+++ b/doc/guides/nics/i40e.rst
@@ -164,4 +164,33 @@ Runtime Config Options
   representors must be specified on the creation of the PF.
 
+<<<<<<< HEAD
+||||||| merged common ancestors
+- ``Use latest supported vector`` (default ``disable``)
+
+  Latest supported vector path may not always get the best perf so vector path was
+  recommended to use only on later platform. But users may want the latest vector path
+  since it can get better perf in some real work loading cases. So ``devargs`` param
+  ``use-latest-supported-vec`` is introduced, for example::
+
+  -w 84:00.0,use-latest-supported-vec=1
+
+=======
+- ``Use latest supported vector`` (default ``disable``)
+
+  Latest supported vector path may not always get the best perf so vector path was
+  recommended to use only on later platform. But users may want the latest vector path
+  since it can get better perf in some real work loading cases. So ``devargs`` param
+  ``use-latest-supported-vec`` is introduced, for example::
+
+  -w 84:00.0,use-latest-supported-vec=1
+
+Vector RX Pre-conditions
+~~~~~~~~~~~~~~~~~~~~~~~~
+For Vector RX it is assumed that the number of descriptor rings will be a power
+of 2. With this pre-condition, the ring pointer can easily scroll back to the
+head after hitting the tail without a conditional check. In addition Vector RX
+can use this assumption to do a bit mask using ``ring_size - 1``.
+
+>>>>>>> net/i40e: fix Rx instability with vector mode
 Driver compilation and testing
 ------------------------------
diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c
index 26c2f17bd..e0d53d022 100644
--- a/drivers/net/i40e/i40e_rxtx.c
+++ b/drivers/net/i40e/i40e_rxtx.c
@@ -1741,4 +1741,9 @@ i40e_dev_rx_queue_setup_runtime(struct rte_eth_dev *dev,
 		i40e_set_rx_function(dev);
 		return 0;
+	} else if (ad->rx_vec_allowed && !rte_is_power_of_2(rxq->nb_rx_desc)) {
+		PMD_DRV_LOG(ERR, "Vector mode is allowed, but descriptor"
+			    " number %d of queue %d isn't power of 2",
+			    rxq->nb_rx_desc, rxq->queue_id);
+		return -EINVAL;
 	}
 
diff --git a/drivers/net/i40e/i40e_rxtx_vec_common.h b/drivers/net/i40e/i40e_rxtx_vec_common.h
index 63cb17742..ccaffef99 100644
--- a/drivers/net/i40e/i40e_rxtx_vec_common.h
+++ b/drivers/net/i40e/i40e_rxtx_vec_common.h
@@ -193,6 +193,11 @@ i40e_rx_vec_dev_conf_condition_check_default(struct rte_eth_dev *dev)
 {
 #ifndef RTE_LIBRTE_IEEE1588
+	struct i40e_adapter *ad =
+		I40E_DEV_PRIVATE_TO_ADAPTER(dev->data->dev_private);
 	struct rte_eth_rxmode *rxmode = &dev->data->dev_conf.rxmode;
 	struct rte_fdir_conf *fconf = &dev->data->dev_conf.fdir_conf;
+	struct i40e_rx_queue *rxq;
+	uint16_t desc, i;
+	bool first_queue;
 
 	/* no fdir support */
@@ -210,4 +215,37 @@ i40e_rx_vec_dev_conf_condition_check_default(struct rte_eth_dev *dev)
 		return -1;
 
+	/**
+	 * Vector mode is allowed only when number of Rx queue
+	 * descriptor is power of 2.
+	 */
+	if (!dev->data->dev_started) {
+		first_queue = true;
+		for (i = 0; i < dev->data->nb_rx_queues; i++) {
+			rxq = dev->data->rx_queues[i];
+			if (!rxq)
+				continue;
+			desc = rxq->nb_rx_desc;
+			if (first_queue)
+				ad->rx_vec_allowed =
+					rte_is_power_of_2(desc);
+			else
+				ad->rx_vec_allowed =
+					ad->rx_vec_allowed ?
+					rte_is_power_of_2(desc) :
+					ad->rx_vec_allowed;
+			first_queue = false;
+		}
+	} else {
+		/* Only check the first queue's descriptor number */
+		for (i = 0; i < dev->data->nb_rx_queues; i++) {
+			rxq = dev->data->rx_queues[i];
+			if (!rxq)
+				continue;
+			desc = rxq->nb_rx_desc;
+			ad->rx_vec_allowed = rte_is_power_of_2(desc);
+			break;
+		}
+	}
+
 	return 0;
 #else
-- 
2.19.0

---
  Diff of the applied patch vs upstream commit (please double-check if non-empty:
---
--- -	2018-11-23 10:22:55.456409870 +0000
+++ 0046-net-i40e-fix-Rx-instability-with-vector-mode.patch	2018-11-23 10:22:54.000000000 +0000
@@ -1,8 +1,10 @@
-From 054d1be48cc114c5d3bf87c7ebdf46703876e8d5 Mon Sep 17 00:00:00 2001
+From b9d615675c577192f26e1203c54c70aa22f483fd Mon Sep 17 00:00:00 2001
 From: Beilei Xing <beilei.xing@intel.com>
 Date: Mon, 5 Nov 2018 11:18:12 +0800
 Subject: [PATCH] net/i40e: fix Rx instability with vector mode
 
+[ upstream commit 054d1be48cc114c5d3bf87c7ebdf46703876e8d5 ]
+
 Previously, there is instability during vector Rx if descriptor
 number is not power of 2, e.g. process hang and some Rx packets
 are unexpectedly empty. That's because vector Rx mode assumes Rx
@@ -12,23 +14,43 @@
 
 Fixes: 8e109464c022 ("i40e: allow vector Rx and Tx usage")
 Fixes: a3c83a2527e1 ("net/i40e: enable runtime queue setup")
-Cc: stable@dpdk.org
 
 Signed-off-by: Beilei Xing <beilei.xing@intel.com>
 Acked-by: Konstantin Ananyev <konstantin.ananyev@intel.com>
 ---
- doc/guides/nics/i40e.rst                |  7 +++++
+ doc/guides/nics/i40e.rst                | 29 +++++++++++++++++++
  drivers/net/i40e/i40e_rxtx.c            |  5 ++++
  drivers/net/i40e/i40e_rxtx_vec_common.h | 38 +++++++++++++++++++++++++
- 3 files changed, 50 insertions(+)
+ 3 files changed, 72 insertions(+)
 
 diff --git a/doc/guides/nics/i40e.rst b/doc/guides/nics/i40e.rst
-index ab3928a68..bfacbd117 100644
+index 65d87f869..003257ccc 100644
 --- a/doc/guides/nics/i40e.rst
 +++ b/doc/guides/nics/i40e.rst
-@@ -173,4 +173,11 @@ Runtime Config Options
-   -w 84:00.0,use-latest-supported-vec=1
+@@ -164,4 +164,33 @@ Runtime Config Options
+   representors must be specified on the creation of the PF.
  
++<<<<<<< HEAD
++||||||| merged common ancestors
++- ``Use latest supported vector`` (default ``disable``)
++
++  Latest supported vector path may not always get the best perf so vector path was
++  recommended to use only on later platform. But users may want the latest vector path
++  since it can get better perf in some real work loading cases. So ``devargs`` param
++  ``use-latest-supported-vec`` is introduced, for example::
++
++  -w 84:00.0,use-latest-supported-vec=1
++
++=======
++- ``Use latest supported vector`` (default ``disable``)
++
++  Latest supported vector path may not always get the best perf so vector path was
++  recommended to use only on later platform. But users may want the latest vector path
++  since it can get better perf in some real work loading cases. So ``devargs`` param
++  ``use-latest-supported-vec`` is introduced, for example::
++
++  -w 84:00.0,use-latest-supported-vec=1
++
 +Vector RX Pre-conditions
 +~~~~~~~~~~~~~~~~~~~~~~~~
 +For Vector RX it is assumed that the number of descriptor rings will be a power
@@ -36,13 +58,14 @@
 +head after hitting the tail without a conditional check. In addition Vector RX
 +can use this assumption to do a bit mask using ``ring_size - 1``.
 +
++>>>>>>> net/i40e: fix Rx instability with vector mode
  Driver compilation and testing
  ------------------------------
 diff --git a/drivers/net/i40e/i40e_rxtx.c b/drivers/net/i40e/i40e_rxtx.c
-index e76412207..e1152ff0e 100644
+index 26c2f17bd..e0d53d022 100644
 --- a/drivers/net/i40e/i40e_rxtx.c
 +++ b/drivers/net/i40e/i40e_rxtx.c
-@@ -1742,4 +1742,9 @@ i40e_dev_rx_queue_setup_runtime(struct rte_eth_dev *dev,
+@@ -1741,4 +1741,9 @@ i40e_dev_rx_queue_setup_runtime(struct rte_eth_dev *dev,
  		i40e_set_rx_function(dev);
  		return 0;
 +	} else if (ad->rx_vec_allowed && !rte_is_power_of_2(rxq->nb_rx_desc)) {
@@ -53,7 +76,7 @@
  	}
  
 diff --git a/drivers/net/i40e/i40e_rxtx_vec_common.h b/drivers/net/i40e/i40e_rxtx_vec_common.h
-index f00f6d648..0e6ffa007 100644
+index 63cb17742..ccaffef99 100644
 --- a/drivers/net/i40e/i40e_rxtx_vec_common.h
 +++ b/drivers/net/i40e/i40e_rxtx_vec_common.h
 @@ -193,6 +193,11 @@ i40e_rx_vec_dev_conf_condition_check_default(struct rte_eth_dev *dev)
@@ -68,7 +91,7 @@
 +	bool first_queue;
  
  	/* no fdir support */
-@@ -208,4 +213,37 @@ i40e_rx_vec_dev_conf_condition_check_default(struct rte_eth_dev *dev)
+@@ -210,4 +215,37 @@ i40e_rx_vec_dev_conf_condition_check_default(struct rte_eth_dev *dev)
  		return -1;
  
 +	/**

  parent reply	other threads:[~2018-11-23 10:30 UTC|newest]

Thread overview: 74+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2018-11-23 10:26 [dpdk-stable] patch 'ip_frag: fix overflow in key comparison' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'eal/linux: fix memory leak of logid' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'malloc: check size hint when reserving the biggest element' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'bus/vdev: fix devargs after multi-process bus scan' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'vfio: fix sPAPR IOMMU mapping' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/virtio: fix PCI config error handling' " Kevin Traynor
2018-11-26  2:02   ` Tiwei Bie
2018-11-26 15:42     ` Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'bus/pci: compare kernel driver instead of interrupt handler' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'vfio: check if group fd is already open' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'vfio: fix read of freed memory on getting container fd' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'vfio: share default container in multi-process' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'fix global variable issues' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/virtio: register/unregister intr handler on start/stop' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'eal/linux: handle UIO read failure in interrupt handler' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'examples/vm_power: respect maximum CPUs' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'mk: disable gcc AVX512F support' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'crypto/scheduler: fix build with gcc 8.2' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'bus/dpaa: fix build with gcc 9.0' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'eal: " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'app/testpmd: fix shaper profile parameters' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'app/testpmd: fix RED byte stats' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'examples/ip_pipeline: fix port and table stats read' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'crypto/openssl: fix RSA verify operation' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'compressdev: clarify usage of op structure' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'compressdev: fix op allocation' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'compress/isal: fix uncleared compression states' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'ring/c11: synchronize load and store of the tail' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'ring/c11: move atomic load of head above the loop' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/i40e: fix offload not supported mask' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/mlx5: use pkg-config to handle SUSE libmnl' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/vhost: fix parameters string' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/virtio-user: do not stop stopped device again' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/virtio-user: do not make vhost channel non-block' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/virtio-user: do not reset owner when driver resets' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/virtio-user: fix device features for server mode' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/virtio: fix guest announce support' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net: fix build with pedantic' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/ixgbe: fix busy polling while fiber link update' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/virtio: do not re-enter clean up routines' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'ethdev: fix redundant function pointer check' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'app/testpmd: fix Tx offload flags' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/bonding: fix crash on probe' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'doc: clarify TSO Tx offload prerequisite' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'vhost/crypto: fix inferred misuse of enum' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/igb: update Tx offload mask' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'net/avf/base: fix shifting 32-bit signed variable 31 times' " Kevin Traynor
2018-11-23 10:26 ` Kevin Traynor [this message]
2018-11-23 10:26 ` [dpdk-stable] patch 'net/bnxt: fix uninitialized variable access' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'lib: fix shifting 32-bit signed variable 31 times' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'service: fix possible null access' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'vhost: fix possible out of bound " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'ip_frag: check fragment length of incoming packet' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'bus/pci: fix config r/w access' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'examples/flow_filtering: filter out unsupported offloads' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'examples/flow_filtering: remove VLAN item' " Kevin Traynor
2018-11-23 10:26 ` [dpdk-stable] patch 'test/hash: fix build' " Kevin Traynor
2018-11-23 10:27 ` [dpdk-stable] patch 'eal/x86: remove unused memcpy file' " Kevin Traynor
2018-11-23 10:27 ` [dpdk-stable] patch 'test: fix build' " Kevin Traynor
2018-11-23 10:27 ` [dpdk-stable] patch 'ring/c11: keep deterministic order allowing retry to work' " Kevin Traynor
2018-11-23 10:27 ` [dpdk-stable] patch 'ring/c11: relax ordering for load and store of the head' " Kevin Traynor
2018-11-23 10:27 ` [dpdk-stable] patch 'pci: fix parsing of address without function number' " Kevin Traynor
2018-11-23 10:27 ` [dpdk-stable] patch 'bpf: fix x86 JIT for immediate loads' " Kevin Traynor
2018-11-23 10:27 ` [dpdk-stable] patch 'ipc: remove panic in async request' " Kevin Traynor
2018-11-23 10:27 ` [dpdk-stable] patch 'hash: fix TSX aborts with newer gcc' " Kevin Traynor
2018-11-23 10:27 ` [dpdk-stable] patch 'bus/vmbus: fix directory handle leak on error' " Kevin Traynor
2018-11-23 10:27 ` [dpdk-stable] patch 'net/tap: fix file descriptor " Kevin Traynor
2018-11-23 10:27 ` [dpdk-stable] patch 'net/tap: fix file descriptor check' " Kevin Traynor
2018-11-23 10:27 ` [dpdk-stable] patch 'examples/flow_filtering: fix capability setting' " Kevin Traynor
2018-11-23 10:27 ` [dpdk-stable] patch 'app/testpmd: fix Rx offload search' " Kevin Traynor
2018-11-23 10:27 ` [dpdk-stable] patch 'net/tap: fix probe for multiq or flowq failure' " Kevin Traynor
2018-11-23 11:02   ` Varghese, Vipin
2018-11-29 13:20 [dpdk-stable] patch 'app/testpmd: fix port status for new bonded devices' " Kevin Traynor
2018-11-29 13:20 ` [dpdk-stable] patch 'net/i40e: fix Rx instability with vector mode' " Kevin Traynor
2018-11-29 13:30   ` Kevin Traynor

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=20181123102713.17309-46-ktraynor@redhat.com \
    --to=ktraynor@redhat.com \
    --cc=beilei.xing@intel.com \
    --cc=konstantin.ananyev@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).