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

Adrien Mazarguil adrien.mazarguil at 6wind.com
Mon May 21 18:08:25 CEST 2018


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