[dpdk-stable] patch 'net/mlx4: fix default RSS hash fields' has been queued to stable release 18.02.2
luca.boccassi at gmail.com
luca.boccassi at gmail.com
Thu May 3 13:06:10 CEST 2018
Hi,
FYI, your patch has been queued to stable release 18.02.2
Note it hasn't been pushed to http://dpdk.org/browse/dpdk-stable yet.
It will be pushed if I get no objections before 05/04/18. So please
shout if anyone has objections.
Thanks.
Luca Boccassi
---
>From 4da4da9d55e86db126aaee76369a58289dcb2bbd Mon Sep 17 00:00:00 2001
From: Adrien Mazarguil <adrien.mazarguil at 6wind.com>
Date: Thu, 26 Apr 2018 18:26:15 +0200
Subject: [PATCH] net/mlx4: fix default RSS hash fields
[ upstream commit 1d173da83ef2176b7ef107b76a4c5b80d47e1d00 ]
Using special types value -1 with mlx4_conv_rss_types() is supposed to
return a supported set of Verbs RSS hash fields, that is, priv->hw_rss_sup
unmodified.
Due to the way this function is written and because it is also used to
initially populate priv->hw_rss_sup however, this special value works
properly only once and fails with ENOTSUP errors afterward.
This problem can be seen when re-creating default flows (e.g. by entering
and leaving isolated mode).
Fixes: 024e87bef40b ("net/mlx4: restore UDP RSS by probing capabilities")
Signed-off-by: Adrien Mazarguil <adrien.mazarguil at 6wind.com>
---
drivers/net/mlx4/mlx4.c | 15 +++++++--------
drivers/net/mlx4/mlx4_flow.c | 13 ++++---------
2 files changed, 11 insertions(+), 17 deletions(-)
diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c
index c1f825e75..3a95e1d5e 100644
--- a/drivers/net/mlx4/mlx4.c
+++ b/drivers/net/mlx4/mlx4.c
@@ -569,14 +569,13 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev)
if (!priv->hw_rss_sup) {
WARN("no RSS capabilities reported; disabling support"
" for UDP RSS and inner VXLAN RSS");
- /* Fake support for all possible RSS hash fields. */
- priv->hw_rss_sup = ~UINT64_C(0);
- priv->hw_rss_sup = mlx4_conv_rss_hf(priv, -1);
- /* Filter out known unsupported fields. */
- priv->hw_rss_sup &=
- ~(uint64_t)(IBV_RX_HASH_SRC_PORT_UDP |
- IBV_RX_HASH_DST_PORT_UDP |
- IBV_RX_HASH_INNER);
+ priv->hw_rss_sup =
+ IBV_RX_HASH_SRC_IPV4 |
+ IBV_RX_HASH_DST_IPV4 |
+ IBV_RX_HASH_SRC_IPV6 |
+ IBV_RX_HASH_DST_IPV6 |
+ IBV_RX_HASH_SRC_PORT_TCP |
+ IBV_RX_HASH_DST_PORT_TCP;
}
DEBUG("supported RSS hash fields mask: %016" PRIx64,
priv->hw_rss_sup);
diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c
index 4d26df326..d7a02e90c 100644
--- a/drivers/net/mlx4/mlx4_flow.c
+++ b/drivers/net/mlx4/mlx4_flow.c
@@ -125,20 +125,15 @@ mlx4_conv_rss_hf(struct priv *priv, uint64_t rss_hf)
uint64_t conv = 0;
unsigned int i;
+ if (rss_hf == (uint64_t)-1)
+ return priv->hw_rss_sup;
for (i = 0; i != RTE_DIM(in); ++i)
if (rss_hf & in[i]) {
seen |= rss_hf & in[i];
conv |= out[i];
}
- if ((conv & priv->hw_rss_sup) == conv) {
- if (rss_hf == (uint64_t)-1) {
- /* Include inner RSS by default if supported. */
- conv |= priv->hw_rss_sup & IBV_RX_HASH_INNER;
- return conv;
- }
- if (!(rss_hf & ~seen))
- return conv;
- }
+ if ((conv & priv->hw_rss_sup) == conv && !(rss_hf & ~seen))
+ return conv;
rte_errno = ENOTSUP;
return (uint64_t)-1;
}
--
2.14.2
More information about the stable
mailing list