net/mlx4: fix default RSS hash fields
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") Cc: stable@dpdk.org Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com>
This commit is contained in:
parent
84a684862f
commit
1d173da83e
@ -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_types(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);
|
||||
|
@ -125,20 +125,15 @@ mlx4_conv_rss_types(struct priv *priv, uint64_t types)
|
||||
uint64_t conv = 0;
|
||||
unsigned int i;
|
||||
|
||||
if (types == (uint64_t)-1)
|
||||
return priv->hw_rss_sup;
|
||||
for (i = 0; i != RTE_DIM(in); ++i)
|
||||
if (types & in[i]) {
|
||||
seen |= types & in[i];
|
||||
conv |= out[i];
|
||||
}
|
||||
if ((conv & priv->hw_rss_sup) == conv) {
|
||||
if (types == (uint64_t)-1) {
|
||||
/* Include inner RSS by default if supported. */
|
||||
conv |= priv->hw_rss_sup & IBV_RX_HASH_INNER;
|
||||
return conv;
|
||||
}
|
||||
if (!(types & ~seen))
|
||||
return conv;
|
||||
}
|
||||
if ((conv & priv->hw_rss_sup) == conv && !(types & ~seen))
|
||||
return conv;
|
||||
rte_errno = ENOTSUP;
|
||||
return (uint64_t)-1;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user