* [dpdk-dev] [PATCH v1 0/5] net/mlx4: restore inner VXLAN & UDP RSS support @ 2017-11-21 14:27 Adrien Mazarguil 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 1/5] net/mlx4: fix unnecessary include Adrien Mazarguil ` (6 more replies) 0 siblings, 7 replies; 14+ messages in thread From: Adrien Mazarguil @ 2017-11-21 14:27 UTC (permalink / raw) To: Ferruh Yigit; +Cc: dev, stable Following the refactoring of the entire mlx4 PMD for DPDK 17.11, UDP RSS support was left in a disabled state. Likewise, inner VXLAN RSS used to be performed automatically by default but it's not the case anymore. This series brings back both features by relying on the latest API updates and bugfixes in RDMA core and Linux. All patches are CC'ed stable since they target both DPDK 18.02 and 17.11.1. Adrien Mazarguil (5): net/mlx4: fix unnecessary include net/mlx4: fix documentation in private structure net/mlx4: use function to get default RSS fields net/mlx4: restore UDP RSS by probing capabilities net/mlx4: restore inner VXLAN RSS support drivers/net/mlx4/mlx4.c | 21 +++++++++++++++++++++ drivers/net/mlx4/mlx4.h | 10 ++++++++-- drivers/net/mlx4/mlx4_flow.c | 35 +++++++++++++++++++++-------------- drivers/net/mlx4/mlx4_flow.h | 1 + drivers/net/mlx4/mlx4_txq.c | 1 - 5 files changed, 51 insertions(+), 17 deletions(-) -- 2.1.4 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v1 1/5] net/mlx4: fix unnecessary include 2017-11-21 14:27 [dpdk-dev] [PATCH v1 0/5] net/mlx4: restore inner VXLAN & UDP RSS support Adrien Mazarguil @ 2017-11-21 14:27 ` Adrien Mazarguil 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 2/5] net/mlx4: fix documentation in private structure Adrien Mazarguil ` (5 subsequent siblings) 6 siblings, 0 replies; 14+ messages in thread From: Adrien Mazarguil @ 2017-11-21 14:27 UTC (permalink / raw) To: Ferruh Yigit; +Cc: dev, stable Fixes: a2ce2121c01c ("net/mlx4: separate Tx configuration functions") Cc: stable@dpdk.org Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com> --- drivers/net/mlx4/mlx4_txq.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/net/mlx4/mlx4_txq.c b/drivers/net/mlx4/mlx4_txq.c index 7882a4d..17f3b00 100644 --- a/drivers/net/mlx4/mlx4_txq.c +++ b/drivers/net/mlx4/mlx4_txq.c @@ -59,7 +59,6 @@ #include <rte_mempool.h> #include "mlx4.h" -#include "mlx4_autoconf.h" #include "mlx4_prm.h" #include "mlx4_rxtx.h" #include "mlx4_utils.h" -- 2.1.4 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v1 2/5] net/mlx4: fix documentation in private structure 2017-11-21 14:27 [dpdk-dev] [PATCH v1 0/5] net/mlx4: restore inner VXLAN & UDP RSS support Adrien Mazarguil 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 1/5] net/mlx4: fix unnecessary include Adrien Mazarguil @ 2017-11-21 14:27 ` Adrien Mazarguil 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 3/5] net/mlx4: use function to get default RSS fields Adrien Mazarguil ` (4 subsequent siblings) 6 siblings, 0 replies; 14+ messages in thread From: Adrien Mazarguil @ 2017-11-21 14:27 UTC (permalink / raw) To: Ferruh Yigit; +Cc: dev, Moti Haimovsky, stable A couple of structure fields are not Doxygen-friendly. Fixes: 5db1d364086e ("net/mlx4: restore Tx checksum offloads") Cc: Moti Haimovsky <motih@mellanox.com> Cc: stable@dpdk.org Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com> --- drivers/net/mlx4/mlx4.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h index 3aeef87..7721858 100644 --- a/drivers/net/mlx4/mlx4.h +++ b/drivers/net/mlx4/mlx4.h @@ -126,8 +126,8 @@ struct priv { uint32_t vf:1; /**< This is a VF device. */ uint32_t intr_alarm:1; /**< An interrupt alarm is scheduled. */ uint32_t isolated:1; /**< Toggle isolated mode. */ - uint32_t hw_csum:1; /* Checksum offload is supported. */ - uint32_t hw_csum_l2tun:1; /* Checksum support for L2 tunnels. */ + uint32_t hw_csum:1; /**< Checksum offload is supported. */ + uint32_t hw_csum_l2tun:1; /**< Checksum support for L2 tunnels. */ struct rte_intr_handle intr_handle; /**< Port interrupt handle. */ struct mlx4_drop *drop; /**< Shared resources for drop flow rules. */ LIST_HEAD(, mlx4_rss) rss; /**< Shared targets for Rx flow rules. */ -- 2.1.4 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v1 3/5] net/mlx4: use function to get default RSS fields 2017-11-21 14:27 [dpdk-dev] [PATCH v1 0/5] net/mlx4: restore inner VXLAN & UDP RSS support Adrien Mazarguil 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 1/5] net/mlx4: fix unnecessary include Adrien Mazarguil 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 2/5] net/mlx4: fix documentation in private structure Adrien Mazarguil @ 2017-11-21 14:27 ` Adrien Mazarguil 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 4/5] net/mlx4: restore UDP RSS by probing capabilities Adrien Mazarguil ` (3 subsequent siblings) 6 siblings, 0 replies; 14+ messages in thread From: Adrien Mazarguil @ 2017-11-21 14:27 UTC (permalink / raw) To: Ferruh Yigit; +Cc: dev, stable Supported RSS hash fields are listed in function mlx4_conv_rss_hf() and duplicated in mlx4_flow_prepare(); the latter are used when RSS is requested without specifying any parameters. This commit standardizes on mlx4_conv_rss_hf(). Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com> --- drivers/net/mlx4/mlx4_flow.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c index 8b87b29..7397dde 100644 --- a/drivers/net/mlx4/mlx4_flow.c +++ b/drivers/net/mlx4/mlx4_flow.c @@ -105,6 +105,9 @@ struct mlx4_drop { /** * Convert DPDK RSS hash fields to their Verbs equivalent. * + * This function returns the supported (default) set when @p rss_hf has + * special value (uint64_t)-1. + * * @param rss_hf * Hash fields in DPDK format (see struct rte_eth_rss_conf). * @@ -154,6 +157,8 @@ mlx4_conv_rss_hf(uint64_t rss_hf) seen |= rss_hf & in[i]; conv |= out[i]; } + if (rss_hf == (uint64_t)-1) + return conv; if (!(rss_hf & ~seen)) return conv; rte_errno = ENOTSUP; @@ -759,10 +764,7 @@ mlx4_flow_prepare(struct priv *priv, &(struct rte_eth_rss_conf){ .rss_key = mlx4_rss_hash_key_default, .rss_key_len = MLX4_RSS_HASH_KEY_SIZE, - .rss_hf = (ETH_RSS_IPV4 | - ETH_RSS_NONFRAG_IPV4_TCP | - ETH_RSS_IPV6 | - ETH_RSS_NONFRAG_IPV6_TCP), + .rss_hf = -1, }; /* Sanity checks. */ for (i = 0; i < rss->num; ++i) -- 2.1.4 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v1 4/5] net/mlx4: restore UDP RSS by probing capabilities 2017-11-21 14:27 [dpdk-dev] [PATCH v1 0/5] net/mlx4: restore inner VXLAN & UDP RSS support Adrien Mazarguil ` (2 preceding siblings ...) 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 3/5] net/mlx4: use function to get default RSS fields Adrien Mazarguil @ 2017-11-21 14:27 ` Adrien Mazarguil 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 5/5] net/mlx4: restore inner VXLAN RSS support Adrien Mazarguil ` (2 subsequent siblings) 6 siblings, 0 replies; 14+ messages in thread From: Adrien Mazarguil @ 2017-11-21 14:27 UTC (permalink / raw) To: Ferruh Yigit; +Cc: dev, stable Until now, UDP RSS support could not be relied on due to a problem in the Linux kernel implementation and mlx4 RSS capabilities were not reported at all, hence the PMD had to make assumptions. Since both issues will be addressed simultaneously in Linux 4.15 (related patches already upstream) and likely backported afterward, UDP RSS support can be enabled by probing RSS capabilities. Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com> --- drivers/net/mlx4/mlx4.c | 20 ++++++++++++++++++++ drivers/net/mlx4/mlx4.h | 1 + drivers/net/mlx4/mlx4_flow.c | 27 +++++++++++++++------------ drivers/net/mlx4/mlx4_flow.h | 1 + 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index f9e4f9d..025b887 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -426,6 +426,7 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) int err = 0; struct ibv_context *attr_ctx = NULL; struct ibv_device_attr device_attr; + struct ibv_device_attr_ex device_attr_ex; struct mlx4_conf conf = { .ports.present = 0, }; @@ -499,6 +500,11 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) /* Use all ports when none are defined */ if (!conf.ports.enabled) conf.ports.enabled = conf.ports.present; + /* Retrieve extended device attributes. */ + if (ibv_query_device_ex(attr_ctx, NULL, &device_attr_ex)) { + rte_errno = ENODEV; + goto error; + } for (i = 0; i < device_attr.phys_port_cnt; i++) { uint32_t port = i + 1; /* ports are indexed from one */ struct ibv_context *ctx = NULL; @@ -573,6 +579,20 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) PCI_DEVICE_ID_MELLANOX_CONNECTX3PRO); DEBUG("L2 tunnel checksum offloads are %ssupported", (priv->hw_csum_l2tun ? "" : "not ")); + priv->hw_rss_sup = device_attr_ex.rss_caps.rx_hash_fields_mask; + if (!priv->hw_rss_sup) { + WARN("no RSS capabilities reported; disabling support" + " for UDP 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); + } + DEBUG("supported RSS hash fields mask: %016" PRIx64, + priv->hw_rss_sup); /* Configure the first MAC address by default. */ if (mlx4_get_mac(priv, &mac.addr_bytes)) { ERROR("cannot get MAC address, is mlx4_en loaded?" diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h index 7721858..e5ab934 100644 --- a/drivers/net/mlx4/mlx4.h +++ b/drivers/net/mlx4/mlx4.h @@ -128,6 +128,7 @@ struct priv { uint32_t isolated:1; /**< Toggle isolated mode. */ uint32_t hw_csum:1; /**< Checksum offload is supported. */ uint32_t hw_csum_l2tun:1; /**< Checksum support for L2 tunnels. */ + uint64_t hw_rss_sup; /**< Supported RSS hash fields (Verbs format). */ struct rte_intr_handle intr_handle; /**< Port interrupt handle. */ struct mlx4_drop *drop; /**< Shared resources for drop flow rules. */ LIST_HEAD(, mlx4_rss) rss; /**< Shared targets for Rx flow rules. */ diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c index 7397dde..a41d99d 100644 --- a/drivers/net/mlx4/mlx4_flow.c +++ b/drivers/net/mlx4/mlx4_flow.c @@ -108,6 +108,8 @@ struct mlx4_drop { * This function returns the supported (default) set when @p rss_hf has * special value (uint64_t)-1. * + * @param priv + * Pointer to private structure. * @param rss_hf * Hash fields in DPDK format (see struct rte_eth_rss_conf). * @@ -115,8 +117,8 @@ struct mlx4_drop { * A valid Verbs RSS hash fields mask for mlx4 on success, (uint64_t)-1 * otherwise and rte_errno is set. */ -static uint64_t -mlx4_conv_rss_hf(uint64_t rss_hf) +uint64_t +mlx4_conv_rss_hf(struct priv *priv, uint64_t rss_hf) { enum { IPV4, IPV6, TCP, UDP, }; const uint64_t in[] = { @@ -136,11 +138,9 @@ mlx4_conv_rss_hf(uint64_t rss_hf) [TCP] = (ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_IPV6_TCP_EX), - /* - * UDP support is temporarily disabled due to an - * implementation issue in the kernel. - */ - [UDP] = 0, + [UDP] = (ETH_RSS_NONFRAG_IPV4_UDP | + ETH_RSS_NONFRAG_IPV6_UDP | + ETH_RSS_IPV6_UDP_EX), }; const uint64_t out[RTE_DIM(in)] = { [IPV4] = IBV_RX_HASH_SRC_IPV4 | IBV_RX_HASH_DST_IPV4, @@ -157,10 +157,12 @@ mlx4_conv_rss_hf(uint64_t rss_hf) seen |= rss_hf & in[i]; conv |= out[i]; } - if (rss_hf == (uint64_t)-1) - return conv; - if (!(rss_hf & ~seen)) - return conv; + if ((conv & priv->hw_rss_sup) == conv) { + if (rss_hf == (uint64_t)-1) + return conv; + if (!(rss_hf & ~seen)) + return conv; + } rte_errno = ENOTSUP; return (uint64_t)-1; } @@ -803,7 +805,8 @@ mlx4_flow_prepare(struct priv *priv, goto exit_action_not_supported; } flow->rss = mlx4_rss_get - (priv, mlx4_conv_rss_hf(rss_conf->rss_hf), + (priv, + mlx4_conv_rss_hf(priv, rss_conf->rss_hf), rss_conf->rss_key, rss->num, rss->queue); if (!flow->rss) { msg = "either invalid parameters or not enough" diff --git a/drivers/net/mlx4/mlx4_flow.h b/drivers/net/mlx4/mlx4_flow.h index 651fd37..b10c4f5 100644 --- a/drivers/net/mlx4/mlx4_flow.h +++ b/drivers/net/mlx4/mlx4_flow.h @@ -75,6 +75,7 @@ struct rte_flow { /* mlx4_flow.c */ +uint64_t mlx4_conv_rss_hf(struct priv *priv, uint64_t rss_hf); int mlx4_flow_sync(struct priv *priv, struct rte_flow_error *error); void mlx4_flow_clean(struct priv *priv); int mlx4_filter_ctrl(struct rte_eth_dev *dev, -- 2.1.4 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v1 5/5] net/mlx4: restore inner VXLAN RSS support 2017-11-21 14:27 [dpdk-dev] [PATCH v1 0/5] net/mlx4: restore inner VXLAN & UDP RSS support Adrien Mazarguil ` (3 preceding siblings ...) 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 4/5] net/mlx4: restore UDP RSS by probing capabilities Adrien Mazarguil @ 2017-11-21 14:27 ` Adrien Mazarguil 2017-11-21 14:41 ` [dpdk-dev] [PATCH v1 0/5] net/mlx4: restore inner VXLAN & UDP " Neil Horman 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 " Adrien Mazarguil 6 siblings, 0 replies; 14+ messages in thread From: Adrien Mazarguil @ 2017-11-21 14:27 UTC (permalink / raw) To: Ferruh Yigit; +Cc: dev, stable Inner VXLAN RSS was supported and performed by default prior to the entire mlx4 refactoring that occurred in DPDK 17.11, however so far the new Verbs RSS API did not provide means to enable it. This will be addressed in Linux 4.15 and in RDMA core. Thanks to RSS capabilities, the PMD can now probe for its support and enable it again by default. Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com> --- drivers/net/mlx4/mlx4.c | 5 +++-- drivers/net/mlx4/mlx4.h | 5 +++++ drivers/net/mlx4/mlx4_flow.c | 2 ++ 3 files changed, 10 insertions(+), 2 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index 025b887..8c20eea 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -582,14 +582,15 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) priv->hw_rss_sup = device_attr_ex.rss_caps.rx_hash_fields_mask; if (!priv->hw_rss_sup) { WARN("no RSS capabilities reported; disabling support" - " for UDP RSS"); + " 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_DST_PORT_UDP | + IBV_RX_HASH_INNER); } DEBUG("supported RSS hash fields mask: %016" PRIx64, priv->hw_rss_sup); diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h index e5ab934..99dc335 100644 --- a/drivers/net/mlx4/mlx4.h +++ b/drivers/net/mlx4/mlx4.h @@ -53,6 +53,11 @@ #include <rte_mempool.h> #include <rte_spinlock.h> +#ifndef IBV_RX_HASH_INNER +/** This is not necessarily defined by supported RDMA core versions. */ +#define IBV_RX_HASH_INNER (1ull << 31) +#endif /* IBV_RX_HASH_INNER */ + /** Maximum number of simultaneous MAC addresses. This value is arbitrary. */ #define MLX4_MAX_MAC_ADDRESSES 128 diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c index a41d99d..69ee176 100644 --- a/drivers/net/mlx4/mlx4_flow.c +++ b/drivers/net/mlx4/mlx4_flow.c @@ -152,6 +152,8 @@ mlx4_conv_rss_hf(struct priv *priv, uint64_t rss_hf) uint64_t conv = 0; unsigned int i; + if (rss_hf == (uint64_t)-1) + conv |= IBV_RX_HASH_INNER; for (i = 0; i != RTE_DIM(in); ++i) if (rss_hf & in[i]) { seen |= rss_hf & in[i]; -- 2.1.4 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH v1 0/5] net/mlx4: restore inner VXLAN & UDP RSS support 2017-11-21 14:27 [dpdk-dev] [PATCH v1 0/5] net/mlx4: restore inner VXLAN & UDP RSS support Adrien Mazarguil ` (4 preceding siblings ...) 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 5/5] net/mlx4: restore inner VXLAN RSS support Adrien Mazarguil @ 2017-11-21 14:41 ` Neil Horman 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 " Adrien Mazarguil 6 siblings, 0 replies; 14+ messages in thread From: Neil Horman @ 2017-11-21 14:41 UTC (permalink / raw) To: Adrien Mazarguil; +Cc: Ferruh Yigit, dev, stable On Tue, Nov 21, 2017 at 03:27:22PM +0100, Adrien Mazarguil wrote: > Following the refactoring of the entire mlx4 PMD for DPDK 17.11, UDP RSS > support was left in a disabled state. Likewise, inner VXLAN RSS used to be > performed automatically by default but it's not the case anymore. > > This series brings back both features by relying on the latest API updates > and bugfixes in RDMA core and Linux. > > All patches are CC'ed stable since they target both DPDK 18.02 and 17.11.1. > > Adrien Mazarguil (5): > net/mlx4: fix unnecessary include > net/mlx4: fix documentation in private structure > net/mlx4: use function to get default RSS fields > net/mlx4: restore UDP RSS by probing capabilities > net/mlx4: restore inner VXLAN RSS support > > drivers/net/mlx4/mlx4.c | 21 +++++++++++++++++++++ > drivers/net/mlx4/mlx4.h | 10 ++++++++-- > drivers/net/mlx4/mlx4_flow.c | 35 +++++++++++++++++++++-------------- > drivers/net/mlx4/mlx4_flow.h | 1 + > drivers/net/mlx4/mlx4_txq.c | 1 - > 5 files changed, 51 insertions(+), 17 deletions(-) > > -- > 2.1.4 > Looks reasonable Acked-by: Neil Horman <nhorman@tuxdriver.com> ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v2 0/5] net/mlx4: restore inner VXLAN & UDP RSS support 2017-11-21 14:27 [dpdk-dev] [PATCH v1 0/5] net/mlx4: restore inner VXLAN & UDP RSS support Adrien Mazarguil ` (5 preceding siblings ...) 2017-11-21 14:41 ` [dpdk-dev] [PATCH v1 0/5] net/mlx4: restore inner VXLAN & UDP " Neil Horman @ 2017-11-23 17:37 ` Adrien Mazarguil 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 1/5] net/mlx4: fix unnecessary include Adrien Mazarguil ` (5 more replies) 6 siblings, 6 replies; 14+ messages in thread From: Adrien Mazarguil @ 2017-11-23 17:37 UTC (permalink / raw) To: Shahaf Shuler; +Cc: Ferruh Yigit, dev, stable, Neil Horman Following the refactoring of the entire mlx4 PMD for DPDK 17.11, UDP RSS support was left in a disabled state. Likewise, inner VXLAN RSS used to be performed automatically by default but it's not the case anymore. This series brings back both features by relying on the latest API updates and bugfixes in RDMA core and Linux. All patches are CC'ed stable since they target both DPDK 18.02 and 17.11.1. v2 changes: - Addressed minor issue in "net/mlx4: restore inner VXLAN RSS support" where inner RSS hash could be requested by default even if unsupported. - Modified series to target the dpdk-next-net-mlx tree maintained by Shahaf. Adrien Mazarguil (5): net/mlx4: fix unnecessary include net/mlx4: fix documentation in private structure net/mlx4: use function to get default RSS fields net/mlx4: restore UDP RSS by probing capabilities net/mlx4: restore inner VXLAN RSS support drivers/net/mlx4/mlx4.c | 21 +++++++++++++++++++++ drivers/net/mlx4/mlx4.h | 10 ++++++++-- drivers/net/mlx4/mlx4_flow.c | 36 ++++++++++++++++++++++-------------- drivers/net/mlx4/mlx4_flow.h | 1 + drivers/net/mlx4/mlx4_txq.c | 1 - 5 files changed, 52 insertions(+), 17 deletions(-) -- 2.11.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v2 1/5] net/mlx4: fix unnecessary include 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 " Adrien Mazarguil @ 2017-11-23 17:37 ` Adrien Mazarguil 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 2/5] net/mlx4: fix documentation in private structure Adrien Mazarguil ` (4 subsequent siblings) 5 siblings, 0 replies; 14+ messages in thread From: Adrien Mazarguil @ 2017-11-23 17:37 UTC (permalink / raw) To: Shahaf Shuler; +Cc: Ferruh Yigit, dev, stable, Neil Horman Fixes: a2ce2121c01c ("net/mlx4: separate Tx configuration functions") Cc: stable@dpdk.org Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com> Acked-by: Neil Horman <nhorman@tuxdriver.com> --- drivers/net/mlx4/mlx4_txq.c | 1 - 1 file changed, 1 deletion(-) diff --git a/drivers/net/mlx4/mlx4_txq.c b/drivers/net/mlx4/mlx4_txq.c index 7882a4d0b..17f3b002c 100644 --- a/drivers/net/mlx4/mlx4_txq.c +++ b/drivers/net/mlx4/mlx4_txq.c @@ -59,7 +59,6 @@ #include <rte_mempool.h> #include "mlx4.h" -#include "mlx4_autoconf.h" #include "mlx4_prm.h" #include "mlx4_rxtx.h" #include "mlx4_utils.h" -- 2.11.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v2 2/5] net/mlx4: fix documentation in private structure 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 " Adrien Mazarguil 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 1/5] net/mlx4: fix unnecessary include Adrien Mazarguil @ 2017-11-23 17:37 ` Adrien Mazarguil 2017-11-23 17:38 ` [dpdk-dev] [PATCH v2 3/5] net/mlx4: use function to get default RSS fields Adrien Mazarguil ` (3 subsequent siblings) 5 siblings, 0 replies; 14+ messages in thread From: Adrien Mazarguil @ 2017-11-23 17:37 UTC (permalink / raw) To: Shahaf Shuler; +Cc: Ferruh Yigit, dev, stable, Neil Horman, Moti Haimovsky A couple of structure fields are not Doxygen-friendly. Fixes: 5db1d364086e ("net/mlx4: restore Tx checksum offloads") Cc: Moti Haimovsky <motih@mellanox.com> Cc: stable@dpdk.org Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com> Acked-by: Neil Horman <nhorman@tuxdriver.com> --- drivers/net/mlx4/mlx4.h | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h index 3aeef87e9..77218580e 100644 --- a/drivers/net/mlx4/mlx4.h +++ b/drivers/net/mlx4/mlx4.h @@ -126,8 +126,8 @@ struct priv { uint32_t vf:1; /**< This is a VF device. */ uint32_t intr_alarm:1; /**< An interrupt alarm is scheduled. */ uint32_t isolated:1; /**< Toggle isolated mode. */ - uint32_t hw_csum:1; /* Checksum offload is supported. */ - uint32_t hw_csum_l2tun:1; /* Checksum support for L2 tunnels. */ + uint32_t hw_csum:1; /**< Checksum offload is supported. */ + uint32_t hw_csum_l2tun:1; /**< Checksum support for L2 tunnels. */ struct rte_intr_handle intr_handle; /**< Port interrupt handle. */ struct mlx4_drop *drop; /**< Shared resources for drop flow rules. */ LIST_HEAD(, mlx4_rss) rss; /**< Shared targets for Rx flow rules. */ -- 2.11.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v2 3/5] net/mlx4: use function to get default RSS fields 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 " Adrien Mazarguil 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 1/5] net/mlx4: fix unnecessary include Adrien Mazarguil 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 2/5] net/mlx4: fix documentation in private structure Adrien Mazarguil @ 2017-11-23 17:38 ` Adrien Mazarguil 2017-11-23 17:38 ` [dpdk-dev] [PATCH v2 4/5] net/mlx4: restore UDP RSS by probing capabilities Adrien Mazarguil ` (2 subsequent siblings) 5 siblings, 0 replies; 14+ messages in thread From: Adrien Mazarguil @ 2017-11-23 17:38 UTC (permalink / raw) To: Shahaf Shuler; +Cc: Ferruh Yigit, dev, stable, Neil Horman Supported RSS hash fields are listed in function mlx4_conv_rss_hf() and duplicated in mlx4_flow_prepare(); the latter are used when RSS is requested without specifying any parameters. This commit standardizes on mlx4_conv_rss_hf(). Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com> Acked-by: Neil Horman <nhorman@tuxdriver.com> --- drivers/net/mlx4/mlx4_flow.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c index 8b87b2989..7397dde26 100644 --- a/drivers/net/mlx4/mlx4_flow.c +++ b/drivers/net/mlx4/mlx4_flow.c @@ -105,6 +105,9 @@ struct mlx4_drop { /** * Convert DPDK RSS hash fields to their Verbs equivalent. * + * This function returns the supported (default) set when @p rss_hf has + * special value (uint64_t)-1. + * * @param rss_hf * Hash fields in DPDK format (see struct rte_eth_rss_conf). * @@ -154,6 +157,8 @@ mlx4_conv_rss_hf(uint64_t rss_hf) seen |= rss_hf & in[i]; conv |= out[i]; } + if (rss_hf == (uint64_t)-1) + return conv; if (!(rss_hf & ~seen)) return conv; rte_errno = ENOTSUP; @@ -759,10 +764,7 @@ mlx4_flow_prepare(struct priv *priv, &(struct rte_eth_rss_conf){ .rss_key = mlx4_rss_hash_key_default, .rss_key_len = MLX4_RSS_HASH_KEY_SIZE, - .rss_hf = (ETH_RSS_IPV4 | - ETH_RSS_NONFRAG_IPV4_TCP | - ETH_RSS_IPV6 | - ETH_RSS_NONFRAG_IPV6_TCP), + .rss_hf = -1, }; /* Sanity checks. */ for (i = 0; i < rss->num; ++i) -- 2.11.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v2 4/5] net/mlx4: restore UDP RSS by probing capabilities 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 " Adrien Mazarguil ` (2 preceding siblings ...) 2017-11-23 17:38 ` [dpdk-dev] [PATCH v2 3/5] net/mlx4: use function to get default RSS fields Adrien Mazarguil @ 2017-11-23 17:38 ` Adrien Mazarguil 2017-11-23 17:38 ` [dpdk-dev] [PATCH v2 5/5] net/mlx4: restore inner VXLAN RSS support Adrien Mazarguil 2017-12-04 12:07 ` [dpdk-dev] [PATCH v2 0/5] net/mlx4: restore inner VXLAN & UDP " Shahaf Shuler 5 siblings, 0 replies; 14+ messages in thread From: Adrien Mazarguil @ 2017-11-23 17:38 UTC (permalink / raw) To: Shahaf Shuler; +Cc: Ferruh Yigit, dev, stable, Neil Horman Until now, UDP RSS support could not be relied on due to a problem in the Linux kernel implementation and mlx4 RSS capabilities were not reported at all, hence the PMD had to make assumptions. Since both issues will be addressed simultaneously in Linux 4.15 (related patches already upstream) and likely backported afterward, UDP RSS support can be enabled by probing RSS capabilities. Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com> Acked-by: Neil Horman <nhorman@tuxdriver.com> --- drivers/net/mlx4/mlx4.c | 20 ++++++++++++++++++++ drivers/net/mlx4/mlx4.h | 1 + drivers/net/mlx4/mlx4_flow.c | 27 +++++++++++++++------------ drivers/net/mlx4/mlx4_flow.h | 1 + 4 files changed, 37 insertions(+), 12 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index f9e4f9d73..025b88766 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -426,6 +426,7 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) int err = 0; struct ibv_context *attr_ctx = NULL; struct ibv_device_attr device_attr; + struct ibv_device_attr_ex device_attr_ex; struct mlx4_conf conf = { .ports.present = 0, }; @@ -499,6 +500,11 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) /* Use all ports when none are defined */ if (!conf.ports.enabled) conf.ports.enabled = conf.ports.present; + /* Retrieve extended device attributes. */ + if (ibv_query_device_ex(attr_ctx, NULL, &device_attr_ex)) { + rte_errno = ENODEV; + goto error; + } for (i = 0; i < device_attr.phys_port_cnt; i++) { uint32_t port = i + 1; /* ports are indexed from one */ struct ibv_context *ctx = NULL; @@ -573,6 +579,20 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) PCI_DEVICE_ID_MELLANOX_CONNECTX3PRO); DEBUG("L2 tunnel checksum offloads are %ssupported", (priv->hw_csum_l2tun ? "" : "not ")); + priv->hw_rss_sup = device_attr_ex.rss_caps.rx_hash_fields_mask; + if (!priv->hw_rss_sup) { + WARN("no RSS capabilities reported; disabling support" + " for UDP 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); + } + DEBUG("supported RSS hash fields mask: %016" PRIx64, + priv->hw_rss_sup); /* Configure the first MAC address by default. */ if (mlx4_get_mac(priv, &mac.addr_bytes)) { ERROR("cannot get MAC address, is mlx4_en loaded?" diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h index 77218580e..e5ab934c1 100644 --- a/drivers/net/mlx4/mlx4.h +++ b/drivers/net/mlx4/mlx4.h @@ -128,6 +128,7 @@ struct priv { uint32_t isolated:1; /**< Toggle isolated mode. */ uint32_t hw_csum:1; /**< Checksum offload is supported. */ uint32_t hw_csum_l2tun:1; /**< Checksum support for L2 tunnels. */ + uint64_t hw_rss_sup; /**< Supported RSS hash fields (Verbs format). */ struct rte_intr_handle intr_handle; /**< Port interrupt handle. */ struct mlx4_drop *drop; /**< Shared resources for drop flow rules. */ LIST_HEAD(, mlx4_rss) rss; /**< Shared targets for Rx flow rules. */ diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c index 7397dde26..a41d99dd8 100644 --- a/drivers/net/mlx4/mlx4_flow.c +++ b/drivers/net/mlx4/mlx4_flow.c @@ -108,6 +108,8 @@ struct mlx4_drop { * This function returns the supported (default) set when @p rss_hf has * special value (uint64_t)-1. * + * @param priv + * Pointer to private structure. * @param rss_hf * Hash fields in DPDK format (see struct rte_eth_rss_conf). * @@ -115,8 +117,8 @@ struct mlx4_drop { * A valid Verbs RSS hash fields mask for mlx4 on success, (uint64_t)-1 * otherwise and rte_errno is set. */ -static uint64_t -mlx4_conv_rss_hf(uint64_t rss_hf) +uint64_t +mlx4_conv_rss_hf(struct priv *priv, uint64_t rss_hf) { enum { IPV4, IPV6, TCP, UDP, }; const uint64_t in[] = { @@ -136,11 +138,9 @@ mlx4_conv_rss_hf(uint64_t rss_hf) [TCP] = (ETH_RSS_NONFRAG_IPV4_TCP | ETH_RSS_NONFRAG_IPV6_TCP | ETH_RSS_IPV6_TCP_EX), - /* - * UDP support is temporarily disabled due to an - * implementation issue in the kernel. - */ - [UDP] = 0, + [UDP] = (ETH_RSS_NONFRAG_IPV4_UDP | + ETH_RSS_NONFRAG_IPV6_UDP | + ETH_RSS_IPV6_UDP_EX), }; const uint64_t out[RTE_DIM(in)] = { [IPV4] = IBV_RX_HASH_SRC_IPV4 | IBV_RX_HASH_DST_IPV4, @@ -157,10 +157,12 @@ mlx4_conv_rss_hf(uint64_t rss_hf) seen |= rss_hf & in[i]; conv |= out[i]; } - if (rss_hf == (uint64_t)-1) - return conv; - if (!(rss_hf & ~seen)) - return conv; + if ((conv & priv->hw_rss_sup) == conv) { + if (rss_hf == (uint64_t)-1) + return conv; + if (!(rss_hf & ~seen)) + return conv; + } rte_errno = ENOTSUP; return (uint64_t)-1; } @@ -803,7 +805,8 @@ mlx4_flow_prepare(struct priv *priv, goto exit_action_not_supported; } flow->rss = mlx4_rss_get - (priv, mlx4_conv_rss_hf(rss_conf->rss_hf), + (priv, + mlx4_conv_rss_hf(priv, rss_conf->rss_hf), rss_conf->rss_key, rss->num, rss->queue); if (!flow->rss) { msg = "either invalid parameters or not enough" diff --git a/drivers/net/mlx4/mlx4_flow.h b/drivers/net/mlx4/mlx4_flow.h index 651fd37b6..b10c4f552 100644 --- a/drivers/net/mlx4/mlx4_flow.h +++ b/drivers/net/mlx4/mlx4_flow.h @@ -75,6 +75,7 @@ struct rte_flow { /* mlx4_flow.c */ +uint64_t mlx4_conv_rss_hf(struct priv *priv, uint64_t rss_hf); int mlx4_flow_sync(struct priv *priv, struct rte_flow_error *error); void mlx4_flow_clean(struct priv *priv); int mlx4_filter_ctrl(struct rte_eth_dev *dev, -- 2.11.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* [dpdk-dev] [PATCH v2 5/5] net/mlx4: restore inner VXLAN RSS support 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 " Adrien Mazarguil ` (3 preceding siblings ...) 2017-11-23 17:38 ` [dpdk-dev] [PATCH v2 4/5] net/mlx4: restore UDP RSS by probing capabilities Adrien Mazarguil @ 2017-11-23 17:38 ` Adrien Mazarguil 2017-12-04 12:07 ` [dpdk-dev] [PATCH v2 0/5] net/mlx4: restore inner VXLAN & UDP " Shahaf Shuler 5 siblings, 0 replies; 14+ messages in thread From: Adrien Mazarguil @ 2017-11-23 17:38 UTC (permalink / raw) To: Shahaf Shuler; +Cc: Ferruh Yigit, dev, stable, Neil Horman Inner VXLAN RSS was supported and performed by default prior to the entire mlx4 refactoring that occurred in DPDK 17.11, however so far the new Verbs RSS API did not provide means to enable it. This will be addressed in Linux 4.15 and in RDMA core. Thanks to RSS capabilities, the PMD can now probe for its support and enable it again by default. Signed-off-by: Adrien Mazarguil <adrien.mazarguil@6wind.com> Acked-by: Neil Horman <nhorman@tuxdriver.com> --- drivers/net/mlx4/mlx4.c | 5 +++-- drivers/net/mlx4/mlx4.h | 5 +++++ drivers/net/mlx4/mlx4_flow.c | 5 ++++- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index 025b88766..8c20eea41 100644 --- a/drivers/net/mlx4/mlx4.c +++ b/drivers/net/mlx4/mlx4.c @@ -582,14 +582,15 @@ mlx4_pci_probe(struct rte_pci_driver *pci_drv, struct rte_pci_device *pci_dev) priv->hw_rss_sup = device_attr_ex.rss_caps.rx_hash_fields_mask; if (!priv->hw_rss_sup) { WARN("no RSS capabilities reported; disabling support" - " for UDP RSS"); + " 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_DST_PORT_UDP | + IBV_RX_HASH_INNER); } DEBUG("supported RSS hash fields mask: %016" PRIx64, priv->hw_rss_sup); diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h index e5ab934c1..99dc3357a 100644 --- a/drivers/net/mlx4/mlx4.h +++ b/drivers/net/mlx4/mlx4.h @@ -53,6 +53,11 @@ #include <rte_mempool.h> #include <rte_spinlock.h> +#ifndef IBV_RX_HASH_INNER +/** This is not necessarily defined by supported RDMA core versions. */ +#define IBV_RX_HASH_INNER (1ull << 31) +#endif /* IBV_RX_HASH_INNER */ + /** Maximum number of simultaneous MAC addresses. This value is arbitrary. */ #define MLX4_MAX_MAC_ADDRESSES 128 diff --git a/drivers/net/mlx4/mlx4_flow.c b/drivers/net/mlx4/mlx4_flow.c index a41d99dd8..69025da42 100644 --- a/drivers/net/mlx4/mlx4_flow.c +++ b/drivers/net/mlx4/mlx4_flow.c @@ -158,8 +158,11 @@ mlx4_conv_rss_hf(struct priv *priv, uint64_t rss_hf) conv |= out[i]; } if ((conv & priv->hw_rss_sup) == conv) { - if (rss_hf == (uint64_t)-1) + 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; } -- 2.11.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [dpdk-dev] [PATCH v2 0/5] net/mlx4: restore inner VXLAN & UDP RSS support 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 " Adrien Mazarguil ` (4 preceding siblings ...) 2017-11-23 17:38 ` [dpdk-dev] [PATCH v2 5/5] net/mlx4: restore inner VXLAN RSS support Adrien Mazarguil @ 2017-12-04 12:07 ` Shahaf Shuler 5 siblings, 0 replies; 14+ messages in thread From: Shahaf Shuler @ 2017-12-04 12:07 UTC (permalink / raw) To: Adrien Mazarguil; +Cc: Ferruh Yigit, dev, stable, Neil Horman Thursday, November 23, 2017 7:38 PM, Adrien Mazarguil: > Following the refactoring of the entire mlx4 PMD for DPDK 17.11, UDP RSS > support was left in a disabled state. Likewise, inner VXLAN RSS used to be > performed automatically by default but it's not the case anymore. > > This series brings back both features by relying on the latest API updates and > bugfixes in RDMA core and Linux. > > All patches are CC'ed stable since they target both DPDK 18.02 and 17.11.1. > > v2 changes: > > - Addressed minor issue in "net/mlx4: restore inner VXLAN RSS support" > where > inner RSS hash could be requested by default even if unsupported. > - Modified series to target the dpdk-next-net-mlx tree maintained by > Shahaf. > > Adrien Mazarguil (5): > net/mlx4: fix unnecessary include > net/mlx4: fix documentation in private structure > net/mlx4: use function to get default RSS fields > net/mlx4: restore UDP RSS by probing capabilities > net/mlx4: restore inner VXLAN RSS support > > drivers/net/mlx4/mlx4.c | 21 +++++++++++++++++++++ > drivers/net/mlx4/mlx4.h | 10 ++++++++-- > drivers/net/mlx4/mlx4_flow.c | 36 ++++++++++++++++++++++-------------- > drivers/net/mlx4/mlx4_flow.h | 1 + > drivers/net/mlx4/mlx4_txq.c | 1 - > 5 files changed, 52 insertions(+), 17 deletions(-) Applied to next-net-mlx, thanks. > > -- > 2.11.0 ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2017-12-04 12:07 UTC | newest] Thread overview: 14+ messages (download: mbox.gz / follow: Atom feed) -- links below jump to the message on this page -- 2017-11-21 14:27 [dpdk-dev] [PATCH v1 0/5] net/mlx4: restore inner VXLAN & UDP RSS support Adrien Mazarguil 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 1/5] net/mlx4: fix unnecessary include Adrien Mazarguil 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 2/5] net/mlx4: fix documentation in private structure Adrien Mazarguil 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 3/5] net/mlx4: use function to get default RSS fields Adrien Mazarguil 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 4/5] net/mlx4: restore UDP RSS by probing capabilities Adrien Mazarguil 2017-11-21 14:27 ` [dpdk-dev] [PATCH v1 5/5] net/mlx4: restore inner VXLAN RSS support Adrien Mazarguil 2017-11-21 14:41 ` [dpdk-dev] [PATCH v1 0/5] net/mlx4: restore inner VXLAN & UDP " Neil Horman 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 " Adrien Mazarguil 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 1/5] net/mlx4: fix unnecessary include Adrien Mazarguil 2017-11-23 17:37 ` [dpdk-dev] [PATCH v2 2/5] net/mlx4: fix documentation in private structure Adrien Mazarguil 2017-11-23 17:38 ` [dpdk-dev] [PATCH v2 3/5] net/mlx4: use function to get default RSS fields Adrien Mazarguil 2017-11-23 17:38 ` [dpdk-dev] [PATCH v2 4/5] net/mlx4: restore UDP RSS by probing capabilities Adrien Mazarguil 2017-11-23 17:38 ` [dpdk-dev] [PATCH v2 5/5] net/mlx4: restore inner VXLAN RSS support Adrien Mazarguil 2017-12-04 12:07 ` [dpdk-dev] [PATCH v2 0/5] net/mlx4: restore inner VXLAN & UDP " Shahaf Shuler
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).