* [net-next v2 1/2] net: ethtool: Unify ETHTOOL_{G,S}RXFH rxnfc copy
2023-07-25 20:56 [net-next v2 0/2] rxfh with custom RSS fixes Joe Damato
@ 2023-07-25 20:56 ` Joe Damato
2023-07-25 20:56 ` [net-next v2 2/2] net/mlx5: Fix flowhash key set/get for custom RSS Joe Damato
2023-07-28 9:00 ` [net-next v2 0/2] rxfh with custom RSS fixes patchwork-bot+netdevbpf
2 siblings, 0 replies; 5+ messages in thread
From: Joe Damato @ 2023-07-25 20:56 UTC (permalink / raw)
To: netdev, saeedm, tariqt, ecree, andrew, kuba, davem, leon, pabeni, arnd
Cc: linux-kernel, Joe Damato, Edward Cree
ETHTOOL_GRXFH correctly copies in the full struct ethtool_rxnfc when
FLOW_RSS is set; ETHTOOL_SRXFH needs a similar code path to handle the
FLOW_RSS case so that ethtool can set the flow hash for custom RSS
contexts (if supported by the driver).
The copy code from ETHTOOL_GRXFH has been pulled out in to a helper so
that it can be called in both ETHTOOL_{G,S}RXFH code paths.
Acked-by: Edward Cree <ecree.xilinx@gmail.com>
Signed-off-by: Joe Damato <jdamato@fastly.com>
---
net/ethtool/ioctl.c | 75 +++++++++++++++++++++++----------------------
1 file changed, 38 insertions(+), 37 deletions(-)
diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c
index 4a51e0ec295c..7d40e7913e76 100644
--- a/net/ethtool/ioctl.c
+++ b/net/ethtool/ioctl.c
@@ -907,6 +907,38 @@ static int ethtool_rxnfc_copy_to_compat(void __user *useraddr,
return 0;
}
+static int ethtool_rxnfc_copy_struct(u32 cmd, struct ethtool_rxnfc *info,
+ size_t *info_size, void __user *useraddr)
+{
+ /* struct ethtool_rxnfc was originally defined for
+ * ETHTOOL_{G,S}RXFH with only the cmd, flow_type and data
+ * members. User-space might still be using that
+ * definition.
+ */
+ if (cmd == ETHTOOL_GRXFH || cmd == ETHTOOL_SRXFH)
+ *info_size = (offsetof(struct ethtool_rxnfc, data) +
+ sizeof(info->data));
+
+ if (ethtool_rxnfc_copy_from_user(info, useraddr, *info_size))
+ return -EFAULT;
+
+ if ((cmd == ETHTOOL_GRXFH || cmd == ETHTOOL_SRXFH) && info->flow_type & FLOW_RSS) {
+ *info_size = sizeof(*info);
+ if (ethtool_rxnfc_copy_from_user(info, useraddr, *info_size))
+ return -EFAULT;
+ /* Since malicious users may modify the original data,
+ * we need to check whether FLOW_RSS is still requested.
+ */
+ if (!(info->flow_type & FLOW_RSS))
+ return -EINVAL;
+ }
+
+ if (info->cmd != cmd)
+ return -EINVAL;
+
+ return 0;
+}
+
static int ethtool_rxnfc_copy_to_user(void __user *useraddr,
const struct ethtool_rxnfc *rxnfc,
size_t size, const u32 *rule_buf)
@@ -944,16 +976,9 @@ static noinline_for_stack int ethtool_set_rxnfc(struct net_device *dev,
if (!dev->ethtool_ops->set_rxnfc)
return -EOPNOTSUPP;
- /* struct ethtool_rxnfc was originally defined for
- * ETHTOOL_{G,S}RXFH with only the cmd, flow_type and data
- * members. User-space might still be using that
- * definition. */
- if (cmd == ETHTOOL_SRXFH)
- info_size = (offsetof(struct ethtool_rxnfc, data) +
- sizeof(info.data));
-
- if (ethtool_rxnfc_copy_from_user(&info, useraddr, info_size))
- return -EFAULT;
+ rc = ethtool_rxnfc_copy_struct(cmd, &info, &info_size, useraddr);
+ if (rc)
+ return rc;
rc = dev->ethtool_ops->set_rxnfc(dev, &info);
if (rc)
@@ -978,33 +1003,9 @@ static noinline_for_stack int ethtool_get_rxnfc(struct net_device *dev,
if (!ops->get_rxnfc)
return -EOPNOTSUPP;
- /* struct ethtool_rxnfc was originally defined for
- * ETHTOOL_{G,S}RXFH with only the cmd, flow_type and data
- * members. User-space might still be using that
- * definition. */
- if (cmd == ETHTOOL_GRXFH)
- info_size = (offsetof(struct ethtool_rxnfc, data) +
- sizeof(info.data));
-
- if (ethtool_rxnfc_copy_from_user(&info, useraddr, info_size))
- return -EFAULT;
-
- /* If FLOW_RSS was requested then user-space must be using the
- * new definition, as FLOW_RSS is newer.
- */
- if (cmd == ETHTOOL_GRXFH && info.flow_type & FLOW_RSS) {
- info_size = sizeof(info);
- if (ethtool_rxnfc_copy_from_user(&info, useraddr, info_size))
- return -EFAULT;
- /* Since malicious users may modify the original data,
- * we need to check whether FLOW_RSS is still requested.
- */
- if (!(info.flow_type & FLOW_RSS))
- return -EINVAL;
- }
-
- if (info.cmd != cmd)
- return -EINVAL;
+ ret = ethtool_rxnfc_copy_struct(cmd, &info, &info_size, useraddr);
+ if (ret)
+ return ret;
if (info.cmd == ETHTOOL_GRXCLSRLALL) {
if (info.rule_cnt > 0) {
--
2.25.1
^ permalink raw reply [flat|nested] 5+ messages in thread* [net-next v2 2/2] net/mlx5: Fix flowhash key set/get for custom RSS
2023-07-25 20:56 [net-next v2 0/2] rxfh with custom RSS fixes Joe Damato
2023-07-25 20:56 ` [net-next v2 1/2] net: ethtool: Unify ETHTOOL_{G,S}RXFH rxnfc copy Joe Damato
@ 2023-07-25 20:56 ` Joe Damato
2023-07-26 8:36 ` Tariq Toukan
2023-07-28 9:00 ` [net-next v2 0/2] rxfh with custom RSS fixes patchwork-bot+netdevbpf
2 siblings, 1 reply; 5+ messages in thread
From: Joe Damato @ 2023-07-25 20:56 UTC (permalink / raw)
To: netdev, saeedm, tariqt, ecree, andrew, kuba, davem, leon, pabeni, arnd
Cc: linux-kernel, Joe Damato
mlx5 flow hash field retrieval and set only worked on the default
RSS context as of commit f01cc58c18d6 ("net/mlx5e: Support multiple RSS
contexts"), not custom RSS contexts.
For example, before this patch attempting to retrieve the flow hash fields
for RSS context 1 fails:
$ sudo ethtool -u eth1 rx-flow-hash tcp4 context 1
Cannot get RX network flow hashing options: Invalid argument
This patch fixes getting and setting the flow hash fields for contexts
other than the default context.
Getting the flow hash fields for RSS context 1:
$ sudo ethtool -u eth1 rx-flow-hash tcp4 context 1
For RSS context 1:
TCP over IPV4 flows use these fields for computing Hash flow key:
IP DA
Now, setting the flash hash fields to a custom value:
$ sudo ethtool -U eth1 rx-flow-hash tcp4 sdfn context 1
And retrieving them again:
$ sudo ethtool -u eth1 rx-flow-hash tcp4 context 1
For RSS context 1:
TCP over IPV4 flows use these fields for computing Hash flow key:
IP SA
IP DA
L4 bytes 0 & 1 [TCP/UDP src port]
L4 bytes 2 & 3 [TCP/UDP dst port]
Signed-off-by: Joe Damato <jdamato@fastly.com>
---
.../ethernet/mellanox/mlx5/core/en/rx_res.c | 25 +++++++++++---
.../ethernet/mellanox/mlx5/core/en/rx_res.h | 7 ++--
.../mellanox/mlx5/core/en_fs_ethtool.c | 33 ++++++++++++++-----
3 files changed, 48 insertions(+), 17 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c
index e1095bc36543..56e6b8c7501f 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c
@@ -218,17 +218,32 @@ int mlx5e_rx_res_rss_set_rxfh(struct mlx5e_rx_res *res, u32 rss_idx,
return mlx5e_rss_set_rxfh(rss, indir, key, hfunc, res->rss_rqns, res->rss_nch);
}
-u8 mlx5e_rx_res_rss_get_hash_fields(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt)
+int mlx5e_rx_res_rss_get_hash_fields(struct mlx5e_rx_res *res, u32 rss_idx,
+ enum mlx5_traffic_types tt)
{
- struct mlx5e_rss *rss = res->rss[0];
+ struct mlx5e_rss *rss;
+
+ if (rss_idx >= MLX5E_MAX_NUM_RSS)
+ return -EINVAL;
+
+ rss = res->rss[rss_idx];
+ if (!rss)
+ return -ENOENT;
return mlx5e_rss_get_hash_fields(rss, tt);
}
-int mlx5e_rx_res_rss_set_hash_fields(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt,
- u8 rx_hash_fields)
+int mlx5e_rx_res_rss_set_hash_fields(struct mlx5e_rx_res *res, u32 rss_idx,
+ enum mlx5_traffic_types tt, u8 rx_hash_fields)
{
- struct mlx5e_rss *rss = res->rss[0];
+ struct mlx5e_rss *rss;
+
+ if (rss_idx >= MLX5E_MAX_NUM_RSS)
+ return -EINVAL;
+
+ rss = res->rss[rss_idx];
+ if (!rss)
+ return -ENOENT;
return mlx5e_rss_set_hash_fields(rss, tt, rx_hash_fields);
}
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h
index 5d5f64fab60f..580fe8bc3cd2 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h
@@ -48,9 +48,10 @@ int mlx5e_rx_res_rss_get_rxfh(struct mlx5e_rx_res *res, u32 rss_idx,
int mlx5e_rx_res_rss_set_rxfh(struct mlx5e_rx_res *res, u32 rss_idx,
const u32 *indir, const u8 *key, const u8 *hfunc);
-u8 mlx5e_rx_res_rss_get_hash_fields(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt);
-int mlx5e_rx_res_rss_set_hash_fields(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt,
- u8 rx_hash_fields);
+int mlx5e_rx_res_rss_get_hash_fields(struct mlx5e_rx_res *res, u32 rss_idx,
+ enum mlx5_traffic_types tt);
+int mlx5e_rx_res_rss_set_hash_fields(struct mlx5e_rx_res *res, u32 rss_idx,
+ enum mlx5_traffic_types tt, u8 rx_hash_fields);
int mlx5e_rx_res_packet_merge_set_param(struct mlx5e_rx_res *res,
struct mlx5e_packet_merge_param *pkt_merge_param);
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c
index aac32e505c14..aed599db9d84 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c
@@ -900,10 +900,16 @@ static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv,
struct ethtool_rxnfc *nfc)
{
u8 rx_hash_field = 0;
+ u32 flow_type = 0;
+ u32 rss_idx = 0;
int err;
int tt;
- tt = flow_type_to_traffic_type(nfc->flow_type);
+ if (nfc->flow_type & FLOW_RSS)
+ rss_idx = nfc->rss_context;
+
+ flow_type = flow_type_mask(nfc->flow_type);
+ tt = flow_type_to_traffic_type(flow_type);
if (tt < 0)
return tt;
@@ -911,10 +917,10 @@ static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv,
* on src IP, dest IP, TCP/UDP src port and TCP/UDP dest
* port.
*/
- if (nfc->flow_type != TCP_V4_FLOW &&
- nfc->flow_type != TCP_V6_FLOW &&
- nfc->flow_type != UDP_V4_FLOW &&
- nfc->flow_type != UDP_V6_FLOW)
+ if (flow_type != TCP_V4_FLOW &&
+ flow_type != TCP_V6_FLOW &&
+ flow_type != UDP_V4_FLOW &&
+ flow_type != UDP_V6_FLOW)
return -EOPNOTSUPP;
if (nfc->data & ~(RXH_IP_SRC | RXH_IP_DST |
@@ -931,7 +937,7 @@ static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv,
rx_hash_field |= MLX5_HASH_FIELD_SEL_L4_DPORT;
mutex_lock(&priv->state_lock);
- err = mlx5e_rx_res_rss_set_hash_fields(priv->rx_res, tt, rx_hash_field);
+ err = mlx5e_rx_res_rss_set_hash_fields(priv->rx_res, rss_idx, tt, rx_hash_field);
mutex_unlock(&priv->state_lock);
return err;
@@ -940,14 +946,23 @@ static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv,
static int mlx5e_get_rss_hash_opt(struct mlx5e_priv *priv,
struct ethtool_rxnfc *nfc)
{
- u32 hash_field = 0;
+ int hash_field = 0;
+ u32 flow_type = 0;
+ u32 rss_idx = 0;
int tt;
- tt = flow_type_to_traffic_type(nfc->flow_type);
+ if (nfc->flow_type & FLOW_RSS)
+ rss_idx = nfc->rss_context;
+
+ flow_type = flow_type_mask(nfc->flow_type);
+ tt = flow_type_to_traffic_type(flow_type);
if (tt < 0)
return tt;
- hash_field = mlx5e_rx_res_rss_get_hash_fields(priv->rx_res, tt);
+ hash_field = mlx5e_rx_res_rss_get_hash_fields(priv->rx_res, rss_idx, tt);
+ if (hash_field < 0)
+ return hash_field;
+
nfc->data = 0;
if (hash_field & MLX5_HASH_FIELD_SEL_SRC_IP)
--
2.25.1
^ permalink raw reply [flat|nested] 5+ messages in thread* Re: [net-next v2 2/2] net/mlx5: Fix flowhash key set/get for custom RSS
2023-07-25 20:56 ` [net-next v2 2/2] net/mlx5: Fix flowhash key set/get for custom RSS Joe Damato
@ 2023-07-26 8:36 ` Tariq Toukan
0 siblings, 0 replies; 5+ messages in thread
From: Tariq Toukan @ 2023-07-26 8:36 UTC (permalink / raw)
To: Joe Damato, netdev, saeedm, ecree, andrew, kuba, davem, leon,
pabeni, arnd
Cc: linux-kernel, Tariq Toukan
On 25/07/2023 23:56, Joe Damato wrote:
> mlx5 flow hash field retrieval and set only worked on the default
> RSS context as of commit f01cc58c18d6 ("net/mlx5e: Support multiple RSS
> contexts"), not custom RSS contexts.
>
> For example, before this patch attempting to retrieve the flow hash fields
> for RSS context 1 fails:
>
> $ sudo ethtool -u eth1 rx-flow-hash tcp4 context 1
> Cannot get RX network flow hashing options: Invalid argument
>
> This patch fixes getting and setting the flow hash fields for contexts
> other than the default context.
>
> Getting the flow hash fields for RSS context 1:
>
> $ sudo ethtool -u eth1 rx-flow-hash tcp4 context 1
> For RSS context 1:
> TCP over IPV4 flows use these fields for computing Hash flow key:
> IP DA
>
> Now, setting the flash hash fields to a custom value:
>
> $ sudo ethtool -U eth1 rx-flow-hash tcp4 sdfn context 1
>
> And retrieving them again:
>
> $ sudo ethtool -u eth1 rx-flow-hash tcp4 context 1
> For RSS context 1:
> TCP over IPV4 flows use these fields for computing Hash flow key:
> IP SA
> IP DA
> L4 bytes 0 & 1 [TCP/UDP src port]
> L4 bytes 2 & 3 [TCP/UDP dst port]
>
> Signed-off-by: Joe Damato <jdamato@fastly.com>
Reviewed-by: Tariq Toukan <tariqt@nvidia.com>
Thanks for your patch.
> ---
> .../ethernet/mellanox/mlx5/core/en/rx_res.c | 25 +++++++++++---
> .../ethernet/mellanox/mlx5/core/en/rx_res.h | 7 ++--
> .../mellanox/mlx5/core/en_fs_ethtool.c | 33 ++++++++++++++-----
> 3 files changed, 48 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c
> index e1095bc36543..56e6b8c7501f 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.c
> @@ -218,17 +218,32 @@ int mlx5e_rx_res_rss_set_rxfh(struct mlx5e_rx_res *res, u32 rss_idx,
> return mlx5e_rss_set_rxfh(rss, indir, key, hfunc, res->rss_rqns, res->rss_nch);
> }
>
> -u8 mlx5e_rx_res_rss_get_hash_fields(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt)
> +int mlx5e_rx_res_rss_get_hash_fields(struct mlx5e_rx_res *res, u32 rss_idx,
> + enum mlx5_traffic_types tt)
> {
> - struct mlx5e_rss *rss = res->rss[0];
> + struct mlx5e_rss *rss;
> +
> + if (rss_idx >= MLX5E_MAX_NUM_RSS)
> + return -EINVAL;
> +
> + rss = res->rss[rss_idx];
> + if (!rss)
> + return -ENOENT;
>
> return mlx5e_rss_get_hash_fields(rss, tt);
> }
>
> -int mlx5e_rx_res_rss_set_hash_fields(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt,
> - u8 rx_hash_fields)
> +int mlx5e_rx_res_rss_set_hash_fields(struct mlx5e_rx_res *res, u32 rss_idx,
> + enum mlx5_traffic_types tt, u8 rx_hash_fields)
> {
> - struct mlx5e_rss *rss = res->rss[0];
> + struct mlx5e_rss *rss;
> +
> + if (rss_idx >= MLX5E_MAX_NUM_RSS)
> + return -EINVAL;
> +
> + rss = res->rss[rss_idx];
> + if (!rss)
> + return -ENOENT;
>
> return mlx5e_rss_set_hash_fields(rss, tt, rx_hash_fields);
> }
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h
> index 5d5f64fab60f..580fe8bc3cd2 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en/rx_res.h
> @@ -48,9 +48,10 @@ int mlx5e_rx_res_rss_get_rxfh(struct mlx5e_rx_res *res, u32 rss_idx,
> int mlx5e_rx_res_rss_set_rxfh(struct mlx5e_rx_res *res, u32 rss_idx,
> const u32 *indir, const u8 *key, const u8 *hfunc);
>
> -u8 mlx5e_rx_res_rss_get_hash_fields(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt);
> -int mlx5e_rx_res_rss_set_hash_fields(struct mlx5e_rx_res *res, enum mlx5_traffic_types tt,
> - u8 rx_hash_fields);
> +int mlx5e_rx_res_rss_get_hash_fields(struct mlx5e_rx_res *res, u32 rss_idx,
> + enum mlx5_traffic_types tt);
> +int mlx5e_rx_res_rss_set_hash_fields(struct mlx5e_rx_res *res, u32 rss_idx,
> + enum mlx5_traffic_types tt, u8 rx_hash_fields);
> int mlx5e_rx_res_packet_merge_set_param(struct mlx5e_rx_res *res,
> struct mlx5e_packet_merge_param *pkt_merge_param);
>
> diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c
> index aac32e505c14..aed599db9d84 100644
> --- a/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c
> +++ b/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c
> @@ -900,10 +900,16 @@ static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv,
> struct ethtool_rxnfc *nfc)
> {
> u8 rx_hash_field = 0;
> + u32 flow_type = 0;
> + u32 rss_idx = 0;
> int err;
> int tt;
>
> - tt = flow_type_to_traffic_type(nfc->flow_type);
> + if (nfc->flow_type & FLOW_RSS)
> + rss_idx = nfc->rss_context;
> +
> + flow_type = flow_type_mask(nfc->flow_type);
> + tt = flow_type_to_traffic_type(flow_type);
> if (tt < 0)
> return tt;
>
> @@ -911,10 +917,10 @@ static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv,
> * on src IP, dest IP, TCP/UDP src port and TCP/UDP dest
> * port.
> */
> - if (nfc->flow_type != TCP_V4_FLOW &&
> - nfc->flow_type != TCP_V6_FLOW &&
> - nfc->flow_type != UDP_V4_FLOW &&
> - nfc->flow_type != UDP_V6_FLOW)
> + if (flow_type != TCP_V4_FLOW &&
> + flow_type != TCP_V6_FLOW &&
> + flow_type != UDP_V4_FLOW &&
> + flow_type != UDP_V6_FLOW)
> return -EOPNOTSUPP;
>
> if (nfc->data & ~(RXH_IP_SRC | RXH_IP_DST |
> @@ -931,7 +937,7 @@ static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv,
> rx_hash_field |= MLX5_HASH_FIELD_SEL_L4_DPORT;
>
> mutex_lock(&priv->state_lock);
> - err = mlx5e_rx_res_rss_set_hash_fields(priv->rx_res, tt, rx_hash_field);
> + err = mlx5e_rx_res_rss_set_hash_fields(priv->rx_res, rss_idx, tt, rx_hash_field);
> mutex_unlock(&priv->state_lock);
>
> return err;
> @@ -940,14 +946,23 @@ static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv,
> static int mlx5e_get_rss_hash_opt(struct mlx5e_priv *priv,
> struct ethtool_rxnfc *nfc)
> {
> - u32 hash_field = 0;
> + int hash_field = 0;
> + u32 flow_type = 0;
> + u32 rss_idx = 0;
> int tt;
>
> - tt = flow_type_to_traffic_type(nfc->flow_type);
> + if (nfc->flow_type & FLOW_RSS)
> + rss_idx = nfc->rss_context;
> +
> + flow_type = flow_type_mask(nfc->flow_type);
> + tt = flow_type_to_traffic_type(flow_type);
> if (tt < 0)
> return tt;
>
> - hash_field = mlx5e_rx_res_rss_get_hash_fields(priv->rx_res, tt);
> + hash_field = mlx5e_rx_res_rss_get_hash_fields(priv->rx_res, rss_idx, tt);
> + if (hash_field < 0)
> + return hash_field;
> +
> nfc->data = 0;
>
> if (hash_field & MLX5_HASH_FIELD_SEL_SRC_IP)
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [net-next v2 0/2] rxfh with custom RSS fixes
2023-07-25 20:56 [net-next v2 0/2] rxfh with custom RSS fixes Joe Damato
2023-07-25 20:56 ` [net-next v2 1/2] net: ethtool: Unify ETHTOOL_{G,S}RXFH rxnfc copy Joe Damato
2023-07-25 20:56 ` [net-next v2 2/2] net/mlx5: Fix flowhash key set/get for custom RSS Joe Damato
@ 2023-07-28 9:00 ` patchwork-bot+netdevbpf
2 siblings, 0 replies; 5+ messages in thread
From: patchwork-bot+netdevbpf @ 2023-07-28 9:00 UTC (permalink / raw)
To: Joe Damato
Cc: netdev, saeedm, tariqt, ecree, andrew, kuba, davem, leon, pabeni,
arnd, linux-kernel
Hello:
This series was applied to netdev/net-next.git (main)
by David S. Miller <davem@davemloft.net>:
On Tue, 25 Jul 2023 20:56:53 +0000 you wrote:
> Greetings:
>
> Welcome to v2, now via net-next. No functional changes; only style
> changes (see the summary below).
>
> While attempting to get the RX flow hash key for a custom RSS context on
> my mlx5 NIC, I got an error:
>
> [...]
Here is the summary with links:
- [net-next,v2,1/2] net: ethtool: Unify ETHTOOL_{G,S}RXFH rxnfc copy
https://git.kernel.org/netdev/net-next/c/801b27e88046
- [net-next,v2,2/2] net/mlx5: Fix flowhash key set/get for custom RSS
https://git.kernel.org/netdev/net-next/c/0212e5d915a2
You are awesome, thank you!
--
Deet-doot-dot, I am a bot.
https://korg.docs.kernel.org/patchwork/pwbot.html
^ permalink raw reply [flat|nested] 5+ messages in thread