[dpdk-dev] [PATCH v1] net/mlx4: add an RSS hash update callback

Ophir Munk ophirmu at mellanox.com
Mon May 21 20:20:18 CEST 2018


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 at 6wind.com]
> Sent: Monday, May 21, 2018 7:08 PM
> To: Ophir Munk <ophirmu at mellanox.com>
> Cc: dev at dpdk.org; Thomas Monjalon <thomas at monjalon.net>; Olga Shern
> <olgas at mellanox.com>; Shahaf Shuler <shahafs at 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 at 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


More information about the dev mailing list