* [dpdk-dev] [PATCH v1] net/mlx4: add an RSS hash update callback
@ 2018-05-17 11:04 Ophir Munk
2018-05-21 16:08 ` Adrien Mazarguil
0 siblings, 1 reply; 3+ messages in thread
From: Ophir Munk @ 2018-05-17 11:04 UTC (permalink / raw)
To: dev, Adrien Mazarguil
Cc: Thomas Monjalon, Olga Shern, Ophir Munk, Shahaf Shuler
Add an RSS hash update callback to eth_dev_ops.
Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
---
drivers/net/mlx4/Makefile | 1 +
drivers/net/mlx4/mlx4.c | 1 +
drivers/net/mlx4/mlx4.h | 7 ++++++
| 59 +++++++++++++++++++++++++++++++++++++++++++++
4 files changed, 68 insertions(+)
create mode 100644 drivers/net/mlx4/mlx4_rss.c
diff --git a/drivers/net/mlx4/Makefile b/drivers/net/mlx4/Makefile
index 73f9d40..eb89f6b 100644
--- a/drivers/net/mlx4/Makefile
+++ b/drivers/net/mlx4/Makefile
@@ -23,6 +23,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_rxq.c
SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_rxtx.c
SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_txq.c
SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_utils.c
+SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_rss.c
ifeq ($(CONFIG_RTE_LIBRTE_MLX4_DLOPEN_DEPS),y)
INSTALL-$(CONFIG_RTE_LIBRTE_MLX4_PMD)-lib += $(LIB_GLUE)
diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c
index 9f8ecd0..7000511 100644
--- a/drivers/net/mlx4/mlx4.c
+++ b/drivers/net/mlx4/mlx4.c
@@ -261,6 +261,7 @@ static const struct eth_dev_ops mlx4_dev_ops = {
.flow_ctrl_get = mlx4_flow_ctrl_get,
.flow_ctrl_set = mlx4_flow_ctrl_set,
.mtu_set = mlx4_mtu_set,
+ .rss_hash_update = mlx4_rss_hash_update,
.filter_ctrl = mlx4_filter_ctrl,
.rx_queue_intr_enable = mlx4_rx_intr_enable,
.rx_queue_intr_disable = mlx4_rx_intr_disable,
diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h
index 300cb4d..6842a71 100644
--- a/drivers/net/mlx4/mlx4.h
+++ b/drivers/net/mlx4/mlx4.h
@@ -50,6 +50,9 @@
/** Port parameter. */
#define MLX4_PMD_PORT_KVARG "port"
+/** Supported RSS. */
+#define MLX4_RSS_HF_MASK (~(ETH_RSS_IP | ETH_RSS_UDP | ETH_RSS_TCP))
+
enum {
PCI_VENDOR_ID_MELLANOX = 0x15b3,
};
@@ -144,4 +147,8 @@ void mlx4_rxq_intr_disable(struct priv *priv);
int mlx4_rx_intr_disable(struct rte_eth_dev *dev, uint16_t idx);
int mlx4_rx_intr_enable(struct rte_eth_dev *dev, uint16_t idx);
+/* mlx4_rss.c */
+
+int mlx4_rss_hash_update(struct rte_eth_dev *dev,
+ struct rte_eth_rss_conf *rss_conf);
#endif /* RTE_PMD_MLX4_H_ */
--git a/drivers/net/mlx4/mlx4_rss.c b/drivers/net/mlx4/mlx4_rss.c
new file mode 100644
index 0000000..656a00d
--- /dev/null
+++ b/drivers/net/mlx4/mlx4_rss.c
@@ -0,0 +1,59 @@
+/* SPDX-License-Identifier: BSD-3-Clause
+ * Copyright 2015 6WIND S.A.
+ * Copyright 2015 Mellanox Technologies, Ltd
+ */
+
+#include <stddef.h>
+#include <stdint.h>
+#include <errno.h>
+#include <string.h>
+
+/* Verbs headers do not support -pedantic. */
+/* ISO C doesn't support unnamed structs/unions, disabling -pedantic. */
+#ifdef PEDANTIC
+#pragma GCC diagnostic ignored "-Wpedantic"
+#endif
+#include <infiniband/verbs.h>
+#ifdef PEDANTIC
+#pragma GCC diagnostic error "-Wpedantic"
+#endif
+
+#include "mlx4.h"
+#include "mlx4_flow.h"
+#include "mlx4_utils.h"
+
+/**
+ * DPDK callback to update the RSS hash configuration.
+ *
+ * @param dev
+ * Pointer to Ethernet device structure.
+ * @param[in] rss_conf
+ * RSS configuration data.
+ *
+ * @return
+ * 0 on success, a negative errno value otherwise and rte_errno is set.
+ */
+int
+mlx4_rss_hash_update(struct rte_eth_dev *dev,
+ struct rte_eth_rss_conf *rss_conf)
+{
+ /*
+ * limitation: MLX4 supports all of IP, UDP and TCP hash
+ * functions together and not in partial combinations
+ * Just make sure no unsupported HF is requested
+ */
+ if (rss_conf->rss_hf & MLX4_RSS_HF_MASK) {
+ rte_errno = EINVAL;
+ return -rte_errno;
+ }
+ if (rss_conf->rss_key && rss_conf->rss_key_len) {
+ /*
+ * Currently mlx4 RSS key cannot be updated
+ */
+ ERROR("port %u RSS key cannot be updated",
+ dev->data->port_id);
+ rte_errno = EINVAL;
+ return -rte_errno;
+ }
+ return 0;
+}
--
2.7.4
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dpdk-dev] [PATCH v1] net/mlx4: add an RSS hash update callback
2018-05-17 11:04 [dpdk-dev] [PATCH v1] net/mlx4: add an RSS hash update callback Ophir Munk
@ 2018-05-21 16:08 ` Adrien Mazarguil
2018-05-21 18:20 ` Ophir Munk
0 siblings, 1 reply; 3+ messages in thread
From: Adrien Mazarguil @ 2018-05-21 16:08 UTC (permalink / raw)
To: Ophir Munk; +Cc: dev, Thomas Monjalon, Olga Shern, Shahaf Shuler
On Thu, May 17, 2018 at 11:04:40AM +0000, Ophir Munk wrote:
> Add an RSS hash update callback to eth_dev_ops.
>
> Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
This patch allows applications to configure legacy RSS past initial port
configuration, but doesn't take input parameters into account. Its purpose
is to silence errors instead of telling users it's unsupported.
For this reason, I suggest to either withdraw this patch entirely, or fully
implement legacy RSS configuration by making rss_hash_update more than a
no-op and by adding rss_hash_conf_get, reta_update and reta_query as part of
the same task for completeness.
> ---
> drivers/net/mlx4/Makefile | 1 +
> drivers/net/mlx4/mlx4.c | 1 +
> drivers/net/mlx4/mlx4.h | 7 ++++++
> drivers/net/mlx4/mlx4_rss.c | 59 +++++++++++++++++++++++++++++++++++++++++++++
> 4 files changed, 68 insertions(+)
> create mode 100644 drivers/net/mlx4/mlx4_rss.c
>
> diff --git a/drivers/net/mlx4/Makefile b/drivers/net/mlx4/Makefile
> index 73f9d40..eb89f6b 100644
> --- a/drivers/net/mlx4/Makefile
> +++ b/drivers/net/mlx4/Makefile
> @@ -23,6 +23,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_rxq.c
> SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_rxtx.c
> SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_txq.c
> SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_utils.c
> +SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_rss.c
>
> ifeq ($(CONFIG_RTE_LIBRTE_MLX4_DLOPEN_DEPS),y)
> INSTALL-$(CONFIG_RTE_LIBRTE_MLX4_PMD)-lib += $(LIB_GLUE)
> diff --git a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c
> index 9f8ecd0..7000511 100644
> --- a/drivers/net/mlx4/mlx4.c
> +++ b/drivers/net/mlx4/mlx4.c
> @@ -261,6 +261,7 @@ static const struct eth_dev_ops mlx4_dev_ops = {
> .flow_ctrl_get = mlx4_flow_ctrl_get,
> .flow_ctrl_set = mlx4_flow_ctrl_set,
> .mtu_set = mlx4_mtu_set,
> + .rss_hash_update = mlx4_rss_hash_update,
> .filter_ctrl = mlx4_filter_ctrl,
> .rx_queue_intr_enable = mlx4_rx_intr_enable,
> .rx_queue_intr_disable = mlx4_rx_intr_disable,
> diff --git a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h
> index 300cb4d..6842a71 100644
> --- a/drivers/net/mlx4/mlx4.h
> +++ b/drivers/net/mlx4/mlx4.h
> @@ -50,6 +50,9 @@
> /** Port parameter. */
> #define MLX4_PMD_PORT_KVARG "port"
>
> +/** Supported RSS. */
> +#define MLX4_RSS_HF_MASK (~(ETH_RSS_IP | ETH_RSS_UDP | ETH_RSS_TCP))
> +
> enum {
> PCI_VENDOR_ID_MELLANOX = 0x15b3,
> };
> @@ -144,4 +147,8 @@ void mlx4_rxq_intr_disable(struct priv *priv);
> int mlx4_rx_intr_disable(struct rte_eth_dev *dev, uint16_t idx);
> int mlx4_rx_intr_enable(struct rte_eth_dev *dev, uint16_t idx);
>
> +/* mlx4_rss.c */
> +
> +int mlx4_rss_hash_update(struct rte_eth_dev *dev,
> + struct rte_eth_rss_conf *rss_conf);
> #endif /* RTE_PMD_MLX4_H_ */
> diff --git a/drivers/net/mlx4/mlx4_rss.c b/drivers/net/mlx4/mlx4_rss.c
> new file mode 100644
> index 0000000..656a00d
> --- /dev/null
> +++ b/drivers/net/mlx4/mlx4_rss.c
> @@ -0,0 +1,59 @@
> +/* SPDX-License-Identifier: BSD-3-Clause
> + * Copyright 2015 6WIND S.A.
> + * Copyright 2015 Mellanox Technologies, Ltd
> + */
> +
> +#include <stddef.h>
> +#include <stdint.h>
> +#include <errno.h>
> +#include <string.h>
> +
> +/* Verbs headers do not support -pedantic. */
> +/* ISO C doesn't support unnamed structs/unions, disabling -pedantic. */
> +#ifdef PEDANTIC
> +#pragma GCC diagnostic ignored "-Wpedantic"
> +#endif
> +#include <infiniband/verbs.h>
> +#ifdef PEDANTIC
> +#pragma GCC diagnostic error "-Wpedantic"
> +#endif
> +
> +#include "mlx4.h"
> +#include "mlx4_flow.h"
> +#include "mlx4_utils.h"
> +
> +/**
> + * DPDK callback to update the RSS hash configuration.
> + *
> + * @param dev
> + * Pointer to Ethernet device structure.
> + * @param[in] rss_conf
> + * RSS configuration data.
> + *
> + * @return
> + * 0 on success, a negative errno value otherwise and rte_errno is set.
> + */
> +int
> +mlx4_rss_hash_update(struct rte_eth_dev *dev,
> + struct rte_eth_rss_conf *rss_conf)
> +{
> + /*
> + * limitation: MLX4 supports all of IP, UDP and TCP hash
> + * functions together and not in partial combinations
> + * Just make sure no unsupported HF is requested
> + */
> + if (rss_conf->rss_hf & MLX4_RSS_HF_MASK) {
> + rte_errno = EINVAL;
> + return -rte_errno;
> + }
> + if (rss_conf->rss_key && rss_conf->rss_key_len) {
> + /*
> + * Currently mlx4 RSS key cannot be updated
> + */
> + ERROR("port %u RSS key cannot be updated",
> + dev->data->port_id);
> + rte_errno = EINVAL;
> + return -rte_errno;
> + }
> + return 0;
> +}
> --
> 2.7.4
>
--
Adrien Mazarguil
6WIND
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [dpdk-dev] [PATCH v1] net/mlx4: add an RSS hash update callback
2018-05-21 16:08 ` Adrien Mazarguil
@ 2018-05-21 18:20 ` Ophir Munk
0 siblings, 0 replies; 3+ messages in thread
From: Ophir Munk @ 2018-05-21 18:20 UTC (permalink / raw)
To: Adrien Mazarguil; +Cc: dev, Thomas Monjalon, Olga Shern, Shahaf Shuler
For 18.05 this path can be withdrawn.
It has already been suppressed a few days ago.
Thanks,
Ophir
> -----Original Message-----
> From: Adrien Mazarguil [mailto:adrien.mazarguil@6wind.com]
> Sent: Monday, May 21, 2018 7:08 PM
> To: Ophir Munk <ophirmu@mellanox.com>
> Cc: dev@dpdk.org; Thomas Monjalon <thomas@monjalon.net>; Olga Shern
> <olgas@mellanox.com>; Shahaf Shuler <shahafs@mellanox.com>
> Subject: Re: [PATCH v1] net/mlx4: add an RSS hash update callback
>
> On Thu, May 17, 2018 at 11:04:40AM +0000, Ophir Munk wrote:
> > Add an RSS hash update callback to eth_dev_ops.
> >
> > Signed-off-by: Ophir Munk <ophirmu@mellanox.com>
>
> This patch allows applications to configure legacy RSS past initial port
> configuration, but doesn't take input parameters into account. Its purpose is
> to silence errors instead of telling users it's unsupported.
>
> For this reason, I suggest to either withdraw this patch entirely, or fully
> implement legacy RSS configuration by making rss_hash_update more than a
> no-op and by adding rss_hash_conf_get, reta_update and reta_query as part
> of the same task for completeness.
>
> > ---
> > drivers/net/mlx4/Makefile | 1 +
> > drivers/net/mlx4/mlx4.c | 1 +
> > drivers/net/mlx4/mlx4.h | 7 ++++++
> > drivers/net/mlx4/mlx4_rss.c | 59
> > +++++++++++++++++++++++++++++++++++++++++++++
> > 4 files changed, 68 insertions(+)
> > create mode 100644 drivers/net/mlx4/mlx4_rss.c
> >
> > diff --git a/drivers/net/mlx4/Makefile b/drivers/net/mlx4/Makefile
> > index 73f9d40..eb89f6b 100644
> > --- a/drivers/net/mlx4/Makefile
> > +++ b/drivers/net/mlx4/Makefile
> > @@ -23,6 +23,7 @@ SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) +=
> mlx4_rxq.c
> > SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_rxtx.c
> > SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_txq.c
> > SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_utils.c
> > +SRCS-$(CONFIG_RTE_LIBRTE_MLX4_PMD) += mlx4_rss.c
> >
> > ifeq ($(CONFIG_RTE_LIBRTE_MLX4_DLOPEN_DEPS),y)
> > INSTALL-$(CONFIG_RTE_LIBRTE_MLX4_PMD)-lib += $(LIB_GLUE) diff --git
> > a/drivers/net/mlx4/mlx4.c b/drivers/net/mlx4/mlx4.c index
> > 9f8ecd0..7000511 100644
> > --- a/drivers/net/mlx4/mlx4.c
> > +++ b/drivers/net/mlx4/mlx4.c
> > @@ -261,6 +261,7 @@ static const struct eth_dev_ops mlx4_dev_ops = {
> > .flow_ctrl_get = mlx4_flow_ctrl_get,
> > .flow_ctrl_set = mlx4_flow_ctrl_set,
> > .mtu_set = mlx4_mtu_set,
> > + .rss_hash_update = mlx4_rss_hash_update,
> > .filter_ctrl = mlx4_filter_ctrl,
> > .rx_queue_intr_enable = mlx4_rx_intr_enable,
> > .rx_queue_intr_disable = mlx4_rx_intr_disable, diff --git
> > a/drivers/net/mlx4/mlx4.h b/drivers/net/mlx4/mlx4.h index
> > 300cb4d..6842a71 100644
> > --- a/drivers/net/mlx4/mlx4.h
> > +++ b/drivers/net/mlx4/mlx4.h
> > @@ -50,6 +50,9 @@
> > /** Port parameter. */
> > #define MLX4_PMD_PORT_KVARG "port"
> >
> > +/** Supported RSS. */
> > +#define MLX4_RSS_HF_MASK (~(ETH_RSS_IP | ETH_RSS_UDP |
> ETH_RSS_TCP))
> > +
> > enum {
> > PCI_VENDOR_ID_MELLANOX = 0x15b3,
> > };
> > @@ -144,4 +147,8 @@ void mlx4_rxq_intr_disable(struct priv *priv);
> > int mlx4_rx_intr_disable(struct rte_eth_dev *dev, uint16_t idx); int
> > mlx4_rx_intr_enable(struct rte_eth_dev *dev, uint16_t idx);
> >
> > +/* mlx4_rss.c */
> > +
> > +int mlx4_rss_hash_update(struct rte_eth_dev *dev,
> > + struct rte_eth_rss_conf *rss_conf);
> > #endif /* RTE_PMD_MLX4_H_ */
> > diff --git a/drivers/net/mlx4/mlx4_rss.c b/drivers/net/mlx4/mlx4_rss.c
> > new file mode 100644 index 0000000..656a00d
> > --- /dev/null
> > +++ b/drivers/net/mlx4/mlx4_rss.c
> > @@ -0,0 +1,59 @@
> > +/* SPDX-License-Identifier: BSD-3-Clause
> > + * Copyright 2015 6WIND S.A.
> > + * Copyright 2015 Mellanox Technologies, Ltd */
> > +
> > +#include <stddef.h>
> > +#include <stdint.h>
> > +#include <errno.h>
> > +#include <string.h>
> > +
> > +/* Verbs headers do not support -pedantic. */
> > +/* ISO C doesn't support unnamed structs/unions, disabling -pedantic.
> > +*/ #ifdef PEDANTIC #pragma GCC diagnostic ignored "-Wpedantic"
> > +#endif
> > +#include <infiniband/verbs.h>
> > +#ifdef PEDANTIC
> > +#pragma GCC diagnostic error "-Wpedantic"
> > +#endif
> > +
> > +#include "mlx4.h"
> > +#include "mlx4_flow.h"
> > +#include "mlx4_utils.h"
> > +
> > +/**
> > + * DPDK callback to update the RSS hash configuration.
> > + *
> > + * @param dev
> > + * Pointer to Ethernet device structure.
> > + * @param[in] rss_conf
> > + * RSS configuration data.
> > + *
> > + * @return
> > + * 0 on success, a negative errno value otherwise and rte_errno is set.
> > + */
> > +int
> > +mlx4_rss_hash_update(struct rte_eth_dev *dev,
> > + struct rte_eth_rss_conf *rss_conf) {
> > + /*
> > + * limitation: MLX4 supports all of IP, UDP and TCP hash
> > + * functions together and not in partial combinations
> > + * Just make sure no unsupported HF is requested
> > + */
> > + if (rss_conf->rss_hf & MLX4_RSS_HF_MASK) {
> > + rte_errno = EINVAL;
> > + return -rte_errno;
> > + }
> > + if (rss_conf->rss_key && rss_conf->rss_key_len) {
> > + /*
> > + * Currently mlx4 RSS key cannot be updated
> > + */
> > + ERROR("port %u RSS key cannot be updated",
> > + dev->data->port_id);
> > + rte_errno = EINVAL;
> > + return -rte_errno;
> > + }
> > + return 0;
> > +}
> > --
> > 2.7.4
> >
>
> --
> Adrien Mazarguil
> 6WIND
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2018-05-21 18:20 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-05-17 11:04 [dpdk-dev] [PATCH v1] net/mlx4: add an RSS hash update callback Ophir Munk
2018-05-21 16:08 ` Adrien Mazarguil
2018-05-21 18:20 ` Ophir Munk
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).