* [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks
@ 2025-06-18 20:38 Jakub Kicinski
2025-06-18 20:38 ` [PATCH net-next 01/10] eth: sfc: falcon: migrate to " Jakub Kicinski
` (10 more replies)
0 siblings, 11 replies; 20+ messages in thread
From: Jakub Kicinski @ 2025-06-18 20:38 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe, Jakub Kicinski
Finish drivers conversions to callbacks added by
commit 9bb00786fc61 ("net: ethtool: add dedicated callbacks for
getting and setting rxfh fields"). Remove the conditional calling
in the core, rxnfc callbacks are no longer used for RXFH.
Jakub Kicinski (10):
eth: sfc: falcon: migrate to new RXFH callbacks
eth: sfc: siena: migrate to new RXFH callbacks
eth: sfc: migrate to new RXFH callbacks
eth: benet: migrate to new RXFH callbacks
eth: qede: migrate to new RXFH callbacks
eth: mlx5: migrate to new RXFH callbacks
eth: nfp: migrate to new RXFH callbacks
eth: hinic: migrate to new RXFH callbacks
eth: hns3: migrate to new RXFH callbacks
net: ethtool: don't mux RXFH via rxnfc callbacks
drivers/net/ethernet/hisilicon/hns3/hnae3.h | 4 +-
.../hns3/hns3_common/hclge_comm_rss.h | 4 +-
.../mellanox/mlx5/core/en/fs_ethtool.h | 14 +++
drivers/net/ethernet/sfc/ethtool_common.h | 2 +
.../net/ethernet/sfc/siena/ethtool_common.h | 2 +
.../net/ethernet/emulex/benet/be_ethtool.c | 57 +++++-----
.../hns3/hns3_common/hclge_comm_rss.c | 6 +-
.../ethernet/hisilicon/hns3/hns3_ethtool.c | 33 ++++--
.../hisilicon/hns3/hns3pf/hclge_main.c | 4 +-
.../hisilicon/hns3/hns3vf/hclgevf_main.c | 4 +-
.../net/ethernet/huawei/hinic/hinic_ethtool.c | 47 +++-----
.../ethernet/mellanox/mlx5/core/en_ethtool.c | 19 ++++
.../mellanox/mlx5/core/en_fs_ethtool.c | 25 ++---
.../mellanox/mlx5/core/ipoib/ethtool.c | 19 ++++
.../ethernet/netronome/nfp/nfp_net_ethtool.c | 17 +--
.../net/ethernet/qlogic/qede/qede_ethtool.c | 22 ++--
drivers/net/ethernet/sfc/ethtool.c | 1 +
drivers/net/ethernet/sfc/ethtool_common.c | 104 +++++++++---------
drivers/net/ethernet/sfc/falcon/ethtool.c | 51 +++++----
drivers/net/ethernet/sfc/siena/ethtool.c | 1 +
.../net/ethernet/sfc/siena/ethtool_common.c | 77 ++++++-------
net/ethtool/ioctl.c | 59 +++-------
22 files changed, 308 insertions(+), 264 deletions(-)
--
2.49.0
^ permalink raw reply [flat|nested] 20+ messages in thread
* [PATCH net-next 01/10] eth: sfc: falcon: migrate to new RXFH callbacks
2025-06-18 20:38 [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks Jakub Kicinski
@ 2025-06-18 20:38 ` Jakub Kicinski
2025-06-18 20:38 ` [PATCH net-next 02/10] eth: sfc: siena: " Jakub Kicinski
` (9 subsequent siblings)
10 siblings, 0 replies; 20+ messages in thread
From: Jakub Kicinski @ 2025-06-18 20:38 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe, Jakub Kicinski
Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
add dedicated callbacks for getting and setting rxfh fields").
This driver's RXFH config is read only / fixed so the conversion
is purely factoring out the handling into a helper.
Reviewed-by: Edward Cree <ecree.xilinx@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
drivers/net/ethernet/sfc/falcon/ethtool.c | 51 +++++++++++++----------
1 file changed, 28 insertions(+), 23 deletions(-)
diff --git a/drivers/net/ethernet/sfc/falcon/ethtool.c b/drivers/net/ethernet/sfc/falcon/ethtool.c
index 04766448a545..6685e71ab13f 100644
--- a/drivers/net/ethernet/sfc/falcon/ethtool.c
+++ b/drivers/net/ethernet/sfc/falcon/ethtool.c
@@ -943,6 +943,33 @@ static int ef4_ethtool_get_class_rule(struct ef4_nic *efx,
return rc;
}
+static int
+ef4_ethtool_get_rxfh_fields(struct net_device *net_dev,
+ struct ethtool_rxfh_fields *info)
+{
+ struct ef4_nic *efx = netdev_priv(net_dev);
+ unsigned int min_revision = 0;
+
+ info->data = 0;
+ switch (info->flow_type) {
+ case TCP_V4_FLOW:
+ info->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
+ fallthrough;
+ case UDP_V4_FLOW:
+ case SCTP_V4_FLOW:
+ case AH_ESP_V4_FLOW:
+ case IPV4_FLOW:
+ info->data |= RXH_IP_SRC | RXH_IP_DST;
+ min_revision = EF4_REV_FALCON_B0;
+ break;
+ default:
+ break;
+ }
+ if (ef4_nic_rev(efx) < min_revision)
+ info->data = 0;
+ return 0;
+}
+
static int
ef4_ethtool_get_rxnfc(struct net_device *net_dev,
struct ethtool_rxnfc *info, u32 *rule_locs)
@@ -954,29 +981,6 @@ ef4_ethtool_get_rxnfc(struct net_device *net_dev,
info->data = efx->n_rx_channels;
return 0;
- case ETHTOOL_GRXFH: {
- unsigned min_revision = 0;
-
- info->data = 0;
- switch (info->flow_type) {
- case TCP_V4_FLOW:
- info->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
- fallthrough;
- case UDP_V4_FLOW:
- case SCTP_V4_FLOW:
- case AH_ESP_V4_FLOW:
- case IPV4_FLOW:
- info->data |= RXH_IP_SRC | RXH_IP_DST;
- min_revision = EF4_REV_FALCON_B0;
- break;
- default:
- break;
- }
- if (ef4_nic_rev(efx) < min_revision)
- info->data = 0;
- return 0;
- }
-
case ETHTOOL_GRXCLSRLCNT:
info->data = ef4_filter_get_rx_id_limit(efx);
if (info->data == 0)
@@ -1343,6 +1347,7 @@ const struct ethtool_ops ef4_ethtool_ops = {
.get_rxfh_indir_size = ef4_ethtool_get_rxfh_indir_size,
.get_rxfh = ef4_ethtool_get_rxfh,
.set_rxfh = ef4_ethtool_set_rxfh,
+ .get_rxfh_fields = ef4_ethtool_get_rxfh_fields,
.get_module_info = ef4_ethtool_get_module_info,
.get_module_eeprom = ef4_ethtool_get_module_eeprom,
.get_link_ksettings = ef4_ethtool_get_link_ksettings,
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH net-next 02/10] eth: sfc: siena: migrate to new RXFH callbacks
2025-06-18 20:38 [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks Jakub Kicinski
2025-06-18 20:38 ` [PATCH net-next 01/10] eth: sfc: falcon: migrate to " Jakub Kicinski
@ 2025-06-18 20:38 ` Jakub Kicinski
2025-06-18 20:38 ` [PATCH net-next 03/10] eth: sfc: " Jakub Kicinski
` (8 subsequent siblings)
10 siblings, 0 replies; 20+ messages in thread
From: Jakub Kicinski @ 2025-06-18 20:38 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe, Jakub Kicinski
Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
add dedicated callbacks for getting and setting rxfh fields").
This driver's RXFH config is read only / fixed so the conversion
is purely factoring out the handling into a helper.
Reviewed-by: Edward Cree <ecree.xilinx@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
v2:
- fix typo in the subject
v1: https://lore.kernel.org/20250617013954.427411-3-kuba@kernel.org
---
.../net/ethernet/sfc/siena/ethtool_common.h | 2 +
drivers/net/ethernet/sfc/siena/ethtool.c | 1 +
.../net/ethernet/sfc/siena/ethtool_common.c | 77 ++++++++++---------
3 files changed, 43 insertions(+), 37 deletions(-)
diff --git a/drivers/net/ethernet/sfc/siena/ethtool_common.h b/drivers/net/ethernet/sfc/siena/ethtool_common.h
index d674bab0f65b..278d69e920d9 100644
--- a/drivers/net/ethernet/sfc/siena/ethtool_common.h
+++ b/drivers/net/ethernet/sfc/siena/ethtool_common.h
@@ -46,6 +46,8 @@ int efx_siena_ethtool_get_rxfh(struct net_device *net_dev,
int efx_siena_ethtool_set_rxfh(struct net_device *net_dev,
struct ethtool_rxfh_param *rxfh,
struct netlink_ext_ack *extack);
+int efx_siena_ethtool_get_rxfh_fields(struct net_device *net_dev,
+ struct ethtool_rxfh_fields *info);
int efx_siena_ethtool_reset(struct net_device *net_dev, u32 *flags);
int efx_siena_ethtool_get_module_eeprom(struct net_device *net_dev,
struct ethtool_eeprom *ee,
diff --git a/drivers/net/ethernet/sfc/siena/ethtool.c b/drivers/net/ethernet/sfc/siena/ethtool.c
index c5ad84db9613..994909789bfe 100644
--- a/drivers/net/ethernet/sfc/siena/ethtool.c
+++ b/drivers/net/ethernet/sfc/siena/ethtool.c
@@ -264,6 +264,7 @@ const struct ethtool_ops efx_siena_ethtool_ops = {
.get_rxfh_key_size = efx_siena_ethtool_get_rxfh_key_size,
.get_rxfh = efx_siena_ethtool_get_rxfh,
.set_rxfh = efx_siena_ethtool_set_rxfh,
+ .get_rxfh_fields = efx_siena_ethtool_get_rxfh_fields,
.get_ts_info = efx_ethtool_get_ts_info,
.get_module_info = efx_siena_ethtool_get_module_info,
.get_module_eeprom = efx_siena_ethtool_get_module_eeprom,
diff --git a/drivers/net/ethernet/sfc/siena/ethtool_common.c b/drivers/net/ethernet/sfc/siena/ethtool_common.c
index eeee676fdca7..47cd16a113cf 100644
--- a/drivers/net/ethernet/sfc/siena/ethtool_common.c
+++ b/drivers/net/ethernet/sfc/siena/ethtool_common.c
@@ -801,6 +801,46 @@ static int efx_ethtool_get_class_rule(struct efx_nic *efx,
return rc;
}
+int efx_siena_ethtool_get_rxfh_fields(struct net_device *net_dev,
+ struct ethtool_rxfh_fields *info)
+{
+ struct efx_nic *efx = netdev_priv(net_dev);
+ __u64 data;
+
+ data = 0;
+ if (!efx_rss_active(&efx->rss_context)) /* No RSS */
+ goto out_setdata;
+
+ switch (info->flow_type) {
+ case UDP_V4_FLOW:
+ case UDP_V6_FLOW:
+ if (efx->rss_context.rx_hash_udp_4tuple)
+ data = (RXH_L4_B_0_1 | RXH_L4_B_2_3 |
+ RXH_IP_SRC | RXH_IP_DST);
+ else
+ data = RXH_IP_SRC | RXH_IP_DST;
+ break;
+ case TCP_V4_FLOW:
+ case TCP_V6_FLOW:
+ data = (RXH_L4_B_0_1 | RXH_L4_B_2_3 |
+ RXH_IP_SRC | RXH_IP_DST);
+ break;
+ case SCTP_V4_FLOW:
+ case SCTP_V6_FLOW:
+ case AH_ESP_V4_FLOW:
+ case AH_ESP_V6_FLOW:
+ case IPV4_FLOW:
+ case IPV6_FLOW:
+ data = RXH_IP_SRC | RXH_IP_DST;
+ break;
+ default:
+ break;
+ }
+out_setdata:
+ info->data = data;
+ return 0;
+}
+
int efx_siena_ethtool_get_rxnfc(struct net_device *net_dev,
struct ethtool_rxnfc *info, u32 *rule_locs)
{
@@ -813,43 +853,6 @@ int efx_siena_ethtool_get_rxnfc(struct net_device *net_dev,
info->data = efx->n_rx_channels;
return 0;
- case ETHTOOL_GRXFH: {
- __u64 data;
-
- data = 0;
- if (!efx_rss_active(&efx->rss_context)) /* No RSS */
- goto out_setdata;
-
- switch (info->flow_type) {
- case UDP_V4_FLOW:
- case UDP_V6_FLOW:
- if (efx->rss_context.rx_hash_udp_4tuple)
- data = (RXH_L4_B_0_1 | RXH_L4_B_2_3 |
- RXH_IP_SRC | RXH_IP_DST);
- else
- data = RXH_IP_SRC | RXH_IP_DST;
- break;
- case TCP_V4_FLOW:
- case TCP_V6_FLOW:
- data = (RXH_L4_B_0_1 | RXH_L4_B_2_3 |
- RXH_IP_SRC | RXH_IP_DST);
- break;
- case SCTP_V4_FLOW:
- case SCTP_V6_FLOW:
- case AH_ESP_V4_FLOW:
- case AH_ESP_V6_FLOW:
- case IPV4_FLOW:
- case IPV6_FLOW:
- data = RXH_IP_SRC | RXH_IP_DST;
- break;
- default:
- break;
- }
-out_setdata:
- info->data = data;
- return rc;
- }
-
case ETHTOOL_GRXCLSRLCNT:
info->data = efx_filter_get_rx_id_limit(efx);
if (info->data == 0)
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH net-next 03/10] eth: sfc: migrate to new RXFH callbacks
2025-06-18 20:38 [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks Jakub Kicinski
2025-06-18 20:38 ` [PATCH net-next 01/10] eth: sfc: falcon: migrate to " Jakub Kicinski
2025-06-18 20:38 ` [PATCH net-next 02/10] eth: sfc: siena: " Jakub Kicinski
@ 2025-06-18 20:38 ` Jakub Kicinski
2025-06-18 20:38 ` [PATCH net-next 04/10] eth: benet: " Jakub Kicinski
` (7 subsequent siblings)
10 siblings, 0 replies; 20+ messages in thread
From: Jakub Kicinski @ 2025-06-18 20:38 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe, Jakub Kicinski
Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
add dedicated callbacks for getting and setting rxfh fields").
This driver's RXFH config is read only / fixed so the conversion
is purely factoring out the handling into a helper. One thing of
note that this is one of the two drivers which pays attention to
rss_context.
Reviewed-by: Edward Cree <ecree.xilinx@gmail.com>
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
v2:
- s/s32 rc/int rc/
v1: https://lore.kernel.org/20250617013954.427411-4-kuba@kernel.org
---
drivers/net/ethernet/sfc/ethtool_common.h | 2 +
drivers/net/ethernet/sfc/ethtool.c | 1 +
drivers/net/ethernet/sfc/ethtool_common.c | 104 ++++++++++++----------
3 files changed, 58 insertions(+), 49 deletions(-)
diff --git a/drivers/net/ethernet/sfc/ethtool_common.h b/drivers/net/ethernet/sfc/ethtool_common.h
index fc52e891637d..24db4fccbe78 100644
--- a/drivers/net/ethernet/sfc/ethtool_common.h
+++ b/drivers/net/ethernet/sfc/ethtool_common.h
@@ -49,6 +49,8 @@ int efx_ethtool_get_rxfh(struct net_device *net_dev,
int efx_ethtool_set_rxfh(struct net_device *net_dev,
struct ethtool_rxfh_param *rxfh,
struct netlink_ext_ack *extack);
+int efx_ethtool_get_rxfh_fields(struct net_device *net_dev,
+ struct ethtool_rxfh_fields *info);
int efx_ethtool_create_rxfh_context(struct net_device *net_dev,
struct ethtool_rxfh_context *ctx,
const struct ethtool_rxfh_param *rxfh,
diff --git a/drivers/net/ethernet/sfc/ethtool.c b/drivers/net/ethernet/sfc/ethtool.c
index afbedca63b29..23c6a7df78d0 100644
--- a/drivers/net/ethernet/sfc/ethtool.c
+++ b/drivers/net/ethernet/sfc/ethtool.c
@@ -268,6 +268,7 @@ const struct ethtool_ops efx_ethtool_ops = {
.rxfh_priv_size = sizeof(struct efx_rss_context_priv),
.get_rxfh = efx_ethtool_get_rxfh,
.set_rxfh = efx_ethtool_set_rxfh,
+ .get_rxfh_fields = efx_ethtool_get_rxfh_fields,
.create_rxfh_context = efx_ethtool_create_rxfh_context,
.modify_rxfh_context = efx_ethtool_modify_rxfh_context,
.remove_rxfh_context = efx_ethtool_remove_rxfh_context,
diff --git a/drivers/net/ethernet/sfc/ethtool_common.c b/drivers/net/ethernet/sfc/ethtool_common.c
index 2d734496733f..823263969f92 100644
--- a/drivers/net/ethernet/sfc/ethtool_common.c
+++ b/drivers/net/ethernet/sfc/ethtool_common.c
@@ -800,6 +800,61 @@ static int efx_ethtool_get_class_rule(struct efx_nic *efx,
return rc;
}
+int efx_ethtool_get_rxfh_fields(struct net_device *net_dev,
+ struct ethtool_rxfh_fields *info)
+{
+ struct efx_nic *efx = efx_netdev_priv(net_dev);
+ struct efx_rss_context_priv *ctx;
+ __u64 data;
+ int rc = 0;
+
+ ctx = &efx->rss_context.priv;
+
+ mutex_lock(&net_dev->ethtool->rss_lock);
+ if (info->rss_context) {
+ ctx = efx_find_rss_context_entry(efx, info->rss_context);
+ if (!ctx) {
+ rc = -ENOENT;
+ goto out_unlock;
+ }
+ }
+
+ data = 0;
+ if (!efx_rss_active(ctx)) /* No RSS */
+ goto out_setdata_unlock;
+
+ switch (info->flow_type) {
+ case UDP_V4_FLOW:
+ case UDP_V6_FLOW:
+ if (ctx->rx_hash_udp_4tuple)
+ data = (RXH_L4_B_0_1 | RXH_L4_B_2_3 |
+ RXH_IP_SRC | RXH_IP_DST);
+ else
+ data = RXH_IP_SRC | RXH_IP_DST;
+ break;
+ case TCP_V4_FLOW:
+ case TCP_V6_FLOW:
+ data = (RXH_L4_B_0_1 | RXH_L4_B_2_3 |
+ RXH_IP_SRC | RXH_IP_DST);
+ break;
+ case SCTP_V4_FLOW:
+ case SCTP_V6_FLOW:
+ case AH_ESP_V4_FLOW:
+ case AH_ESP_V6_FLOW:
+ case IPV4_FLOW:
+ case IPV6_FLOW:
+ data = RXH_IP_SRC | RXH_IP_DST;
+ break;
+ default:
+ break;
+ }
+out_setdata_unlock:
+ info->data = data;
+out_unlock:
+ mutex_unlock(&net_dev->ethtool->rss_lock);
+ return rc;
+}
+
int efx_ethtool_get_rxnfc(struct net_device *net_dev,
struct ethtool_rxnfc *info, u32 *rule_locs)
{
@@ -812,55 +867,6 @@ int efx_ethtool_get_rxnfc(struct net_device *net_dev,
info->data = efx->n_rx_channels;
return 0;
- case ETHTOOL_GRXFH: {
- struct efx_rss_context_priv *ctx = &efx->rss_context.priv;
- __u64 data;
-
- mutex_lock(&net_dev->ethtool->rss_lock);
- if (info->flow_type & FLOW_RSS && info->rss_context) {
- ctx = efx_find_rss_context_entry(efx, info->rss_context);
- if (!ctx) {
- rc = -ENOENT;
- goto out_unlock;
- }
- }
-
- data = 0;
- if (!efx_rss_active(ctx)) /* No RSS */
- goto out_setdata_unlock;
-
- switch (info->flow_type & ~FLOW_RSS) {
- case UDP_V4_FLOW:
- case UDP_V6_FLOW:
- if (ctx->rx_hash_udp_4tuple)
- data = (RXH_L4_B_0_1 | RXH_L4_B_2_3 |
- RXH_IP_SRC | RXH_IP_DST);
- else
- data = RXH_IP_SRC | RXH_IP_DST;
- break;
- case TCP_V4_FLOW:
- case TCP_V6_FLOW:
- data = (RXH_L4_B_0_1 | RXH_L4_B_2_3 |
- RXH_IP_SRC | RXH_IP_DST);
- break;
- case SCTP_V4_FLOW:
- case SCTP_V6_FLOW:
- case AH_ESP_V4_FLOW:
- case AH_ESP_V6_FLOW:
- case IPV4_FLOW:
- case IPV6_FLOW:
- data = RXH_IP_SRC | RXH_IP_DST;
- break;
- default:
- break;
- }
-out_setdata_unlock:
- info->data = data;
-out_unlock:
- mutex_unlock(&net_dev->ethtool->rss_lock);
- return rc;
- }
-
case ETHTOOL_GRXCLSRLCNT:
info->data = efx_filter_get_rx_id_limit(efx);
if (info->data == 0)
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH net-next 04/10] eth: benet: migrate to new RXFH callbacks
2025-06-18 20:38 [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks Jakub Kicinski
` (2 preceding siblings ...)
2025-06-18 20:38 ` [PATCH net-next 03/10] eth: sfc: " Jakub Kicinski
@ 2025-06-18 20:38 ` Jakub Kicinski
2025-06-20 9:48 ` Simon Horman
2025-06-18 20:38 ` [PATCH net-next 05/10] eth: qede: " Jakub Kicinski
` (6 subsequent siblings)
10 siblings, 1 reply; 20+ messages in thread
From: Jakub Kicinski @ 2025-06-18 20:38 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe, Jakub Kicinski
Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
add dedicated callbacks for getting and setting rxfh fields").
The driver has no other RXNFC functionality so the SET callback can
be now removed.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
.../net/ethernet/emulex/benet/be_ethtool.c | 57 +++++++++----------
1 file changed, 26 insertions(+), 31 deletions(-)
diff --git a/drivers/net/ethernet/emulex/benet/be_ethtool.c b/drivers/net/ethernet/emulex/benet/be_ethtool.c
index f001a649f58f..5d616b1689c3 100644
--- a/drivers/net/ethernet/emulex/benet/be_ethtool.c
+++ b/drivers/net/ethernet/emulex/benet/be_ethtool.c
@@ -1073,10 +1073,19 @@ static void be_set_msg_level(struct net_device *netdev, u32 level)
adapter->msg_enable = level;
}
-static u64 be_get_rss_hash_opts(struct be_adapter *adapter, u64 flow_type)
+static int be_get_rxfh_fields(struct net_device *netdev,
+ struct ethtool_rxfh_fields *cmd)
{
+ struct be_adapter *adapter = netdev_priv(netdev);
+ u64 flow_type = cmd->flow_type;
u64 data = 0;
+ if (!be_multi_rxq(adapter)) {
+ dev_info(&adapter->pdev->dev,
+ "ethtool::get_rxfh: RX flow hashing is disabled\n");
+ return -EINVAL;
+ }
+
switch (flow_type) {
case TCP_V4_FLOW:
if (adapter->rss_info.rss_flags & RSS_ENABLE_IPV4)
@@ -1104,7 +1113,8 @@ static u64 be_get_rss_hash_opts(struct be_adapter *adapter, u64 flow_type)
break;
}
- return data;
+ cmd->data = data;
+ return 0;
}
static int be_get_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd,
@@ -1119,9 +1129,6 @@ static int be_get_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd,
}
switch (cmd->cmd) {
- case ETHTOOL_GRXFH:
- cmd->data = be_get_rss_hash_opts(adapter, cmd->flow_type);
- break;
case ETHTOOL_GRXRINGS:
cmd->data = adapter->num_rx_qs;
break;
@@ -1132,11 +1139,20 @@ static int be_get_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd,
return 0;
}
-static int be_set_rss_hash_opts(struct be_adapter *adapter,
- struct ethtool_rxnfc *cmd)
+
+static int be_set_rxfh_fields(struct net_device *netdev,
+ const struct ethtool_rxfh_fields *cmd,
+ struct netlink_ext_ack *extack)
{
- int status;
+ struct be_adapter *adapter = netdev_priv(netdev);
u32 rss_flags = adapter->rss_info.rss_flags;
+ int status;
+
+ if (!be_multi_rxq(adapter)) {
+ dev_err(&adapter->pdev->dev,
+ "ethtool::set_rxfh: RX flow hashing is disabled\n");
+ return -EINVAL;
+ }
if (cmd->data != L3_RSS_FLAGS &&
cmd->data != (L3_RSS_FLAGS | L4_RSS_FLAGS))
@@ -1195,28 +1211,6 @@ static int be_set_rss_hash_opts(struct be_adapter *adapter,
return be_cmd_status(status);
}
-static int be_set_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd)
-{
- struct be_adapter *adapter = netdev_priv(netdev);
- int status = 0;
-
- if (!be_multi_rxq(adapter)) {
- dev_err(&adapter->pdev->dev,
- "ethtool::set_rxnfc: RX flow hashing is disabled\n");
- return -EINVAL;
- }
-
- switch (cmd->cmd) {
- case ETHTOOL_SRXFH:
- status = be_set_rss_hash_opts(adapter, cmd);
- break;
- default:
- return -EINVAL;
- }
-
- return status;
-}
-
static void be_get_channels(struct net_device *netdev,
struct ethtool_channels *ch)
{
@@ -1449,7 +1443,8 @@ const struct ethtool_ops be_ethtool_ops = {
.flash_device = be_do_flash,
.self_test = be_self_test,
.get_rxnfc = be_get_rxnfc,
- .set_rxnfc = be_set_rxnfc,
+ .get_rxfh_fields = be_get_rxfh_fields,
+ .set_rxfh_fields = be_set_rxfh_fields,
.get_rxfh_indir_size = be_get_rxfh_indir_size,
.get_rxfh_key_size = be_get_rxfh_key_size,
.get_rxfh = be_get_rxfh,
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH net-next 05/10] eth: qede: migrate to new RXFH callbacks
2025-06-18 20:38 [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks Jakub Kicinski
` (3 preceding siblings ...)
2025-06-18 20:38 ` [PATCH net-next 04/10] eth: benet: " Jakub Kicinski
@ 2025-06-18 20:38 ` Jakub Kicinski
2025-06-20 9:49 ` Simon Horman
2025-06-18 20:38 ` [PATCH net-next 06/10] eth: mlx5: " Jakub Kicinski
` (5 subsequent siblings)
10 siblings, 1 reply; 20+ messages in thread
From: Jakub Kicinski @ 2025-06-18 20:38 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe, Jakub Kicinski
Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
add dedicated callbacks for getting and setting rxfh fields").
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
.../net/ethernet/qlogic/qede/qede_ethtool.c | 22 +++++++++++--------
1 file changed, 13 insertions(+), 9 deletions(-)
diff --git a/drivers/net/ethernet/qlogic/qede/qede_ethtool.c b/drivers/net/ethernet/qlogic/qede/qede_ethtool.c
index e50e1df0a433..23982704273c 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_ethtool.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_ethtool.c
@@ -1168,8 +1168,11 @@ static int qede_set_phys_id(struct net_device *dev,
return 0;
}
-static int qede_get_rss_flags(struct qede_dev *edev, struct ethtool_rxnfc *info)
+static int qede_get_rxfh_fields(struct net_device *dev,
+ struct ethtool_rxfh_fields *info)
{
+ struct qede_dev *edev = netdev_priv(dev);
+
info->data = RXH_IP_SRC | RXH_IP_DST;
switch (info->flow_type) {
@@ -1206,9 +1209,6 @@ static int qede_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
case ETHTOOL_GRXRINGS:
info->data = QEDE_RSS_COUNT(edev);
break;
- case ETHTOOL_GRXFH:
- rc = qede_get_rss_flags(edev, info);
- break;
case ETHTOOL_GRXCLSRLCNT:
info->rule_cnt = qede_get_arfs_filter_count(edev);
info->data = QEDE_RFS_MAX_FLTR;
@@ -1227,14 +1227,17 @@ static int qede_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
return rc;
}
-static int qede_set_rss_flags(struct qede_dev *edev, struct ethtool_rxnfc *info)
+static int qede_set_rxfh_fields(struct net_device *dev,
+ const struct ethtool_rxfh_fields *info,
+ struct netlink_ext_ack *extack)
{
struct qed_update_vport_params *vport_update_params;
+ struct qede_dev *edev = netdev_priv(dev);
u8 set_caps = 0, clr_caps = 0;
int rc = 0;
DP_VERBOSE(edev, QED_MSG_DEBUG,
- "Set rss flags command parameters: flow type = %d, data = %llu\n",
+ "Set rss flags command parameters: flow type = %d, data = %u\n",
info->flow_type, info->data);
switch (info->flow_type) {
@@ -1337,9 +1340,6 @@ static int qede_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info)
int rc;
switch (info->cmd) {
- case ETHTOOL_SRXFH:
- rc = qede_set_rss_flags(edev, info);
- break;
case ETHTOOL_SRXCLSRLINS:
rc = qede_add_cls_rule(edev, info);
break;
@@ -2293,6 +2293,8 @@ static const struct ethtool_ops qede_ethtool_ops = {
.get_rxfh_key_size = qede_get_rxfh_key_size,
.get_rxfh = qede_get_rxfh,
.set_rxfh = qede_set_rxfh,
+ .get_rxfh_fields = qede_get_rxfh_fields,
+ .set_rxfh_fields = qede_set_rxfh_fields,
.get_ts_info = qede_get_ts_info,
.get_channels = qede_get_channels,
.set_channels = qede_set_channels,
@@ -2335,6 +2337,8 @@ static const struct ethtool_ops qede_vf_ethtool_ops = {
.get_rxfh_key_size = qede_get_rxfh_key_size,
.get_rxfh = qede_get_rxfh,
.set_rxfh = qede_set_rxfh,
+ .get_rxfh_fields = qede_get_rxfh_fields,
+ .set_rxfh_fields = qede_set_rxfh_fields,
.get_channels = qede_get_channels,
.set_channels = qede_set_channels,
.get_per_queue_coalesce = qede_get_per_coalesce,
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH net-next 06/10] eth: mlx5: migrate to new RXFH callbacks
2025-06-18 20:38 [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks Jakub Kicinski
` (4 preceding siblings ...)
2025-06-18 20:38 ` [PATCH net-next 05/10] eth: qede: " Jakub Kicinski
@ 2025-06-18 20:38 ` Jakub Kicinski
2025-06-19 14:02 ` Dragos Tatulea
2025-06-18 20:38 ` [PATCH net-next 07/10] eth: nfp: " Jakub Kicinski
` (4 subsequent siblings)
10 siblings, 1 reply; 20+ messages in thread
From: Jakub Kicinski @ 2025-06-18 20:38 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe, Jakub Kicinski
Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
add dedicated callbacks for getting and setting rxfh fields").
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
.../mellanox/mlx5/core/en/fs_ethtool.h | 14 +++++++++++
.../ethernet/mellanox/mlx5/core/en_ethtool.c | 19 ++++++++++++++
.../mellanox/mlx5/core/en_fs_ethtool.c | 25 +++++++------------
.../mellanox/mlx5/core/ipoib/ethtool.c | 19 ++++++++++++++
4 files changed, 61 insertions(+), 16 deletions(-)
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en/fs_ethtool.h b/drivers/net/ethernet/mellanox/mlx5/core/en/fs_ethtool.h
index 9e276fd3c0cf..c21fe36527a0 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en/fs_ethtool.h
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en/fs_ethtool.h
@@ -11,6 +11,11 @@ int mlx5e_ethtool_alloc(struct mlx5e_ethtool_steering **ethtool);
void mlx5e_ethtool_free(struct mlx5e_ethtool_steering *ethtool);
void mlx5e_ethtool_init_steering(struct mlx5e_flow_steering *fs);
void mlx5e_ethtool_cleanup_steering(struct mlx5e_flow_steering *fs);
+int mlx5e_ethtool_set_rxfh_fields(struct mlx5e_priv *priv,
+ const struct ethtool_rxfh_fields *nfc,
+ struct netlink_ext_ack *extack);
+int mlx5e_ethtool_get_rxfh_fields(struct mlx5e_priv *priv,
+ struct ethtool_rxfh_fields *nfc);
int mlx5e_ethtool_set_rxnfc(struct mlx5e_priv *priv, struct ethtool_rxnfc *cmd);
int mlx5e_ethtool_get_rxnfc(struct mlx5e_priv *priv,
struct ethtool_rxnfc *info, u32 *rule_locs);
@@ -20,6 +25,15 @@ static inline int mlx5e_ethtool_alloc(struct mlx5e_ethtool_steering **ethtool)
static inline void mlx5e_ethtool_free(struct mlx5e_ethtool_steering *ethtool) { }
static inline void mlx5e_ethtool_init_steering(struct mlx5e_flow_steering *fs) { }
static inline void mlx5e_ethtool_cleanup_steering(struct mlx5e_flow_steering *fs) { }
+static inline int
+mlx5e_ethtool_set_rxfh_fields(struct mlx5e_priv *priv,
+ const struct ethtool_rxfh_fields *nfc,
+ struct netlink_ext_ack *extack)
+{ return -EOPNOTSUPP; }
+static inline int
+mlx5e_ethtool_get_rxfh_fields(struct mlx5e_priv *priv,
+ struct ethtool_rxfh_fields *nfc)
+{ return -EOPNOTSUPP; }
static inline int mlx5e_ethtool_set_rxnfc(struct mlx5e_priv *priv, struct ethtool_rxnfc *cmd)
{ return -EOPNOTSUPP; }
static inline int mlx5e_ethtool_get_rxnfc(struct mlx5e_priv *priv,
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
index 35479cbf98d5..995eedf7a51a 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_ethtool.c
@@ -2399,6 +2399,23 @@ static u32 mlx5e_get_priv_flags(struct net_device *netdev)
return priv->channels.params.pflags;
}
+static int mlx5e_get_rxfh_fields(struct net_device *dev,
+ struct ethtool_rxfh_fields *info)
+{
+ struct mlx5e_priv *priv = netdev_priv(dev);
+
+ return mlx5e_ethtool_get_rxfh_fields(priv, info);
+}
+
+static int mlx5e_set_rxfh_fields(struct net_device *dev,
+ const struct ethtool_rxfh_fields *cmd,
+ struct netlink_ext_ack *extack)
+{
+ struct mlx5e_priv *priv = netdev_priv(dev);
+
+ return mlx5e_ethtool_set_rxfh_fields(priv, cmd, extack);
+}
+
static int mlx5e_get_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info,
u32 *rule_locs)
{
@@ -2666,6 +2683,8 @@ const struct ethtool_ops mlx5e_ethtool_ops = {
.get_rxfh_indir_size = mlx5e_get_rxfh_indir_size,
.get_rxfh = mlx5e_get_rxfh,
.set_rxfh = mlx5e_set_rxfh,
+ .get_rxfh_fields = mlx5e_get_rxfh_fields,
+ .set_rxfh_fields = mlx5e_set_rxfh_fields,
.get_rxnfc = mlx5e_get_rxnfc,
.set_rxnfc = mlx5e_set_rxnfc,
.get_tunable = mlx5e_get_tunable,
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 d68230a7b9f4..79916f1abd14 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/en_fs_ethtool.c
@@ -894,17 +894,17 @@ static int flow_type_to_traffic_type(u32 flow_type)
}
}
-static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv,
- struct ethtool_rxnfc *nfc)
+int mlx5e_ethtool_set_rxfh_fields(struct mlx5e_priv *priv,
+ const struct ethtool_rxfh_fields *nfc,
+ struct netlink_ext_ack *extack)
{
u8 rx_hash_field = 0;
u32 flow_type = 0;
- u32 rss_idx = 0;
+ u32 rss_idx;
int err;
int tt;
- if (nfc->flow_type & FLOW_RSS)
- rss_idx = nfc->rss_context;
+ rss_idx = nfc->rss_context;
flow_type = flow_type_mask(nfc->flow_type);
tt = flow_type_to_traffic_type(flow_type);
@@ -941,16 +941,15 @@ static int mlx5e_set_rss_hash_opt(struct mlx5e_priv *priv,
return err;
}
-static int mlx5e_get_rss_hash_opt(struct mlx5e_priv *priv,
- struct ethtool_rxnfc *nfc)
+int mlx5e_ethtool_get_rxfh_fields(struct mlx5e_priv *priv,
+ struct ethtool_rxfh_fields *nfc)
{
int hash_field = 0;
u32 flow_type = 0;
- u32 rss_idx = 0;
+ u32 rss_idx;
int tt;
- if (nfc->flow_type & FLOW_RSS)
- rss_idx = nfc->rss_context;
+ rss_idx = nfc->rss_context;
flow_type = flow_type_mask(nfc->flow_type);
tt = flow_type_to_traffic_type(flow_type);
@@ -986,9 +985,6 @@ int mlx5e_ethtool_set_rxnfc(struct mlx5e_priv *priv, struct ethtool_rxnfc *cmd)
case ETHTOOL_SRXCLSRLDEL:
err = mlx5e_ethtool_flow_remove(priv, cmd->fs.location);
break;
- case ETHTOOL_SRXFH:
- err = mlx5e_set_rss_hash_opt(priv, cmd);
- break;
default:
err = -EOPNOTSUPP;
break;
@@ -1013,9 +1009,6 @@ int mlx5e_ethtool_get_rxnfc(struct mlx5e_priv *priv,
case ETHTOOL_GRXCLSRLALL:
err = mlx5e_ethtool_get_all_flows(priv, info, rule_locs);
break;
- case ETHTOOL_GRXFH:
- err = mlx5e_get_rss_hash_opt(priv, info);
- break;
default:
err = -EOPNOTSUPP;
break;
diff --git a/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ethtool.c b/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ethtool.c
index 9772327d5124..4b3430ac3905 100644
--- a/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ethtool.c
+++ b/drivers/net/ethernet/mellanox/mlx5/core/ipoib/ethtool.c
@@ -238,6 +238,23 @@ static u32 mlx5i_flow_type_mask(u32 flow_type)
return flow_type & ~(FLOW_EXT | FLOW_MAC_EXT | FLOW_RSS);
}
+static int mlx5i_set_rxfh_fields(struct net_device *dev,
+ const struct ethtool_rxfh_fields *cmd,
+ struct netlink_ext_ack *extack)
+{
+ struct mlx5e_priv *priv = mlx5i_epriv(dev);
+
+ return mlx5e_ethtool_set_rxfh_fields(priv, cmd, extack);
+}
+
+static int mlx5i_get_rxfh_fields(struct net_device *dev,
+ struct ethtool_rxfh_fields *info)
+{
+ struct mlx5e_priv *priv = mlx5i_epriv(dev);
+
+ return mlx5e_ethtool_get_rxfh_fields(priv, info);
+}
+
static int mlx5i_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *cmd)
{
struct mlx5e_priv *priv = mlx5i_epriv(dev);
@@ -283,6 +300,8 @@ const struct ethtool_ops mlx5i_ethtool_ops = {
.get_coalesce = mlx5i_get_coalesce,
.set_coalesce = mlx5i_set_coalesce,
.get_ts_info = mlx5i_get_ts_info,
+ .get_rxfh_fields = mlx5i_get_rxfh_fields,
+ .set_rxfh_fields = mlx5i_set_rxfh_fields,
.get_rxnfc = mlx5i_get_rxnfc,
.set_rxnfc = mlx5i_set_rxnfc,
.get_link_ksettings = mlx5i_get_link_ksettings,
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH net-next 07/10] eth: nfp: migrate to new RXFH callbacks
2025-06-18 20:38 [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks Jakub Kicinski
` (5 preceding siblings ...)
2025-06-18 20:38 ` [PATCH net-next 06/10] eth: mlx5: " Jakub Kicinski
@ 2025-06-18 20:38 ` Jakub Kicinski
2025-06-19 8:11 ` Louis Peens
2025-06-18 20:38 ` [PATCH net-next 08/10] eth: hinic: " Jakub Kicinski
` (3 subsequent siblings)
10 siblings, 1 reply; 20+ messages in thread
From: Jakub Kicinski @ 2025-06-18 20:38 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe, Jakub Kicinski
Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
add dedicated callbacks for getting and setting rxfh fields").
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
.../ethernet/netronome/nfp/nfp_net_ethtool.c | 17 +++++++++--------
1 file changed, 9 insertions(+), 8 deletions(-)
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
index fbca8d0efd85..a36215195923 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_ethtool.c
@@ -1303,9 +1303,10 @@ static u32 ethtool_flow_to_nfp_flag(u32 flow_type)
return xlate_ethtool_to_nfp[flow_type];
}
-static int nfp_net_get_rss_hash_opts(struct nfp_net *nn,
- struct ethtool_rxnfc *cmd)
+static int nfp_net_get_rxfh_fields(struct net_device *netdev,
+ struct ethtool_rxfh_fields *cmd)
{
+ struct nfp_net *nn = netdev_priv(netdev);
u32 nfp_rss_flag;
cmd->data = 0;
@@ -1451,16 +1452,16 @@ static int nfp_net_get_rxnfc(struct net_device *netdev,
case ETHTOOL_GRXCLSRLALL:
cmd->data = NFP_FS_MAX_ENTRY;
return nfp_net_get_fs_loc(nn, rule_locs);
- case ETHTOOL_GRXFH:
- return nfp_net_get_rss_hash_opts(nn, cmd);
default:
return -EOPNOTSUPP;
}
}
-static int nfp_net_set_rss_hash_opt(struct nfp_net *nn,
- struct ethtool_rxnfc *nfc)
+static int nfp_net_set_rxfh_fields(struct net_device *netdev,
+ const struct ethtool_rxfh_fields *nfc,
+ struct netlink_ext_ack *extack)
{
+ struct nfp_net *nn = netdev_priv(netdev);
u32 new_rss_cfg = nn->rss_cfg;
u32 nfp_rss_flag;
int err;
@@ -1763,8 +1764,6 @@ static int nfp_net_set_rxnfc(struct net_device *netdev,
struct nfp_net *nn = netdev_priv(netdev);
switch (cmd->cmd) {
- case ETHTOOL_SRXFH:
- return nfp_net_set_rss_hash_opt(nn, cmd);
case ETHTOOL_SRXCLSRLINS:
return nfp_net_fs_add(nn, cmd);
case ETHTOOL_SRXCLSRLDEL:
@@ -2506,6 +2505,8 @@ static const struct ethtool_ops nfp_net_ethtool_ops = {
.get_rxfh_key_size = nfp_net_get_rxfh_key_size,
.get_rxfh = nfp_net_get_rxfh,
.set_rxfh = nfp_net_set_rxfh,
+ .get_rxfh_fields = nfp_net_get_rxfh_fields,
+ .set_rxfh_fields = nfp_net_set_rxfh_fields,
.get_regs_len = nfp_net_get_regs_len,
.get_regs = nfp_net_get_regs,
.set_dump = nfp_app_set_dump,
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH net-next 08/10] eth: hinic: migrate to new RXFH callbacks
2025-06-18 20:38 [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks Jakub Kicinski
` (6 preceding siblings ...)
2025-06-18 20:38 ` [PATCH net-next 07/10] eth: nfp: " Jakub Kicinski
@ 2025-06-18 20:38 ` Jakub Kicinski
2025-06-20 9:49 ` Simon Horman
2025-06-18 20:38 ` [PATCH net-next 09/10] eth: hns3: " Jakub Kicinski
` (2 subsequent siblings)
10 siblings, 1 reply; 20+ messages in thread
From: Jakub Kicinski @ 2025-06-18 20:38 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe, Jakub Kicinski
Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
add dedicated callbacks for getting and setting rxfh fields").
Zeroing data on SET is not necessary, the argument is not copied
back to user space. The driver has no other RXNFC functionality
so the SET callback can be now removed.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
.../net/ethernet/huawei/hinic/hinic_ethtool.c | 47 +++++++------------
1 file changed, 16 insertions(+), 31 deletions(-)
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_ethtool.c b/drivers/net/ethernet/huawei/hinic/hinic_ethtool.c
index c559dd4291d3..e9f338e9dbe7 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_ethtool.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_ethtool.c
@@ -919,9 +919,10 @@ static int hinic_set_channels(struct net_device *netdev,
return 0;
}
-static int hinic_get_rss_hash_opts(struct hinic_dev *nic_dev,
- struct ethtool_rxnfc *cmd)
+static int hinic_get_rxfh_fields(struct net_device *netdev,
+ struct ethtool_rxfh_fields *cmd)
{
+ struct hinic_dev *nic_dev = netdev_priv(netdev);
struct hinic_rss_type rss_type = { 0 };
int err;
@@ -964,7 +965,7 @@ static int hinic_get_rss_hash_opts(struct hinic_dev *nic_dev,
return 0;
}
-static int set_l4_rss_hash_ops(struct ethtool_rxnfc *cmd,
+static int set_l4_rss_hash_ops(const struct ethtool_rxfh_fields *cmd,
struct hinic_rss_type *rss_type)
{
u8 rss_l4_en = 0;
@@ -1000,16 +1001,18 @@ static int set_l4_rss_hash_ops(struct ethtool_rxnfc *cmd,
return 0;
}
-static int hinic_set_rss_hash_opts(struct hinic_dev *nic_dev,
- struct ethtool_rxnfc *cmd)
+static int hinic_set_rxfh_fields(struct net_device *dev,
+ const struct ethtool_rxfh_fields *cmd,
+ struct netlink_ext_ack *extack)
{
- struct hinic_rss_type *rss_type = &nic_dev->rss_type;
+ struct hinic_dev *nic_dev = netdev_priv(dev);
+ struct hinic_rss_type *rss_type;
int err;
- if (!(nic_dev->flags & HINIC_RSS_ENABLE)) {
- cmd->data = 0;
+ rss_type = &nic_dev->rss_type;
+
+ if (!(nic_dev->flags & HINIC_RSS_ENABLE))
return -EOPNOTSUPP;
- }
/* RSS does not support anything other than hashing
* to queues on src and dst IPs and ports
@@ -1108,26 +1111,6 @@ static int hinic_get_rxnfc(struct net_device *netdev,
case ETHTOOL_GRXRINGS:
cmd->data = nic_dev->num_qps;
break;
- case ETHTOOL_GRXFH:
- err = hinic_get_rss_hash_opts(nic_dev, cmd);
- break;
- default:
- err = -EOPNOTSUPP;
- break;
- }
-
- return err;
-}
-
-static int hinic_set_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd)
-{
- struct hinic_dev *nic_dev = netdev_priv(netdev);
- int err = 0;
-
- switch (cmd->cmd) {
- case ETHTOOL_SRXFH:
- err = hinic_set_rss_hash_opts(nic_dev, cmd);
- break;
default:
err = -EOPNOTSUPP;
break;
@@ -1797,11 +1780,12 @@ static const struct ethtool_ops hinic_ethtool_ops = {
.get_channels = hinic_get_channels,
.set_channels = hinic_set_channels,
.get_rxnfc = hinic_get_rxnfc,
- .set_rxnfc = hinic_set_rxnfc,
.get_rxfh_key_size = hinic_get_rxfh_key_size,
.get_rxfh_indir_size = hinic_get_rxfh_indir_size,
.get_rxfh = hinic_get_rxfh,
.set_rxfh = hinic_set_rxfh,
+ .get_rxfh_fields = hinic_get_rxfh_fields,
+ .set_rxfh_fields = hinic_set_rxfh_fields,
.get_sset_count = hinic_get_sset_count,
.get_ethtool_stats = hinic_get_ethtool_stats,
.get_strings = hinic_get_strings,
@@ -1829,11 +1813,12 @@ static const struct ethtool_ops hinicvf_ethtool_ops = {
.get_channels = hinic_get_channels,
.set_channels = hinic_set_channels,
.get_rxnfc = hinic_get_rxnfc,
- .set_rxnfc = hinic_set_rxnfc,
.get_rxfh_key_size = hinic_get_rxfh_key_size,
.get_rxfh_indir_size = hinic_get_rxfh_indir_size,
.get_rxfh = hinic_get_rxfh,
.set_rxfh = hinic_set_rxfh,
+ .get_rxfh_fields = hinic_get_rxfh_fields,
+ .set_rxfh_fields = hinic_set_rxfh_fields,
.get_sset_count = hinic_get_sset_count,
.get_ethtool_stats = hinic_get_ethtool_stats,
.get_strings = hinic_get_strings,
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH net-next 09/10] eth: hns3: migrate to new RXFH callbacks
2025-06-18 20:38 [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks Jakub Kicinski
` (7 preceding siblings ...)
2025-06-18 20:38 ` [PATCH net-next 08/10] eth: hinic: " Jakub Kicinski
@ 2025-06-18 20:38 ` Jakub Kicinski
2025-06-19 12:44 ` Jijie Shao
2025-06-18 20:38 ` [PATCH net-next 10/10] net: ethtool: don't mux RXFH via rxnfc callbacks Jakub Kicinski
2025-06-21 15:10 ` [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks patchwork-bot+netdevbpf
10 siblings, 1 reply; 20+ messages in thread
From: Jakub Kicinski @ 2025-06-18 20:38 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe, Jakub Kicinski
Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
add dedicated callbacks for getting and setting rxfh fields").
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
This driver wins the award for most convoluted abstraction layers :/
---
drivers/net/ethernet/hisilicon/hns3/hnae3.h | 4 +--
| 4 +--
| 6 ++--
.../ethernet/hisilicon/hns3/hns3_ethtool.c | 33 ++++++++++++++-----
.../hisilicon/hns3/hns3pf/hclge_main.c | 4 +--
.../hisilicon/hns3/hns3vf/hclgevf_main.c | 4 +--
6 files changed, 36 insertions(+), 19 deletions(-)
diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
index 4e44f28288f9..8dc7d6fae224 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h
+++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
@@ -690,9 +690,9 @@ struct hnae3_ae_ops {
int (*set_rss)(struct hnae3_handle *handle, const u32 *indir,
const u8 *key, const u8 hfunc);
int (*set_rss_tuple)(struct hnae3_handle *handle,
- struct ethtool_rxnfc *cmd);
+ const struct ethtool_rxfh_fields *cmd);
int (*get_rss_tuple)(struct hnae3_handle *handle,
- struct ethtool_rxnfc *cmd);
+ struct ethtool_rxfh_fields *cmd);
int (*get_tc_size)(struct hnae3_handle *handle);
--git a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.h b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.h
index cdafa63fe38b..cbc02b50c6e7 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.h
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.h
@@ -108,7 +108,7 @@ void hclge_comm_get_rss_indir_tbl(struct hclge_comm_rss_cfg *rss_cfg,
int hclge_comm_set_rss_algo_key(struct hclge_comm_hw *hw, const u8 hfunc,
const u8 *key);
int hclge_comm_init_rss_tuple_cmd(struct hclge_comm_rss_cfg *rss_cfg,
- struct ethtool_rxnfc *nfc,
+ const struct ethtool_rxfh_fields *nfc,
struct hnae3_ae_dev *ae_dev,
struct hclge_comm_rss_input_tuple_cmd *req);
u64 hclge_comm_convert_rss_tuple(u8 tuple_sets);
@@ -129,5 +129,5 @@ int hclge_comm_set_rss_hash_key(struct hclge_comm_rss_cfg *rss_cfg,
int hclge_comm_set_rss_tuple(struct hnae3_ae_dev *ae_dev,
struct hclge_comm_hw *hw,
struct hclge_comm_rss_cfg *rss_cfg,
- struct ethtool_rxnfc *nfc);
+ const struct ethtool_rxfh_fields *nfc);
#endif
--git a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.c b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.c
index 4e2bb6556b1c..1eca53aaf598 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.c
@@ -151,7 +151,7 @@ EXPORT_SYMBOL_GPL(hclge_comm_set_rss_hash_key);
int hclge_comm_set_rss_tuple(struct hnae3_ae_dev *ae_dev,
struct hclge_comm_hw *hw,
struct hclge_comm_rss_cfg *rss_cfg,
- struct ethtool_rxnfc *nfc)
+ const struct ethtool_rxfh_fields *nfc)
{
struct hclge_comm_rss_input_tuple_cmd *req;
struct hclge_desc desc;
@@ -422,7 +422,7 @@ int hclge_comm_set_rss_algo_key(struct hclge_comm_hw *hw, const u8 hfunc,
}
EXPORT_SYMBOL_GPL(hclge_comm_set_rss_algo_key);
-static u8 hclge_comm_get_rss_hash_bits(struct ethtool_rxnfc *nfc)
+static u8 hclge_comm_get_rss_hash_bits(const struct ethtool_rxfh_fields *nfc)
{
u8 hash_sets = nfc->data & RXH_L4_B_0_1 ? HCLGE_COMM_S_PORT_BIT : 0;
@@ -448,7 +448,7 @@ static u8 hclge_comm_get_rss_hash_bits(struct ethtool_rxnfc *nfc)
}
int hclge_comm_init_rss_tuple_cmd(struct hclge_comm_rss_cfg *rss_cfg,
- struct ethtool_rxnfc *nfc,
+ const struct ethtool_rxfh_fields *nfc,
struct hnae3_ae_dev *ae_dev,
struct hclge_comm_rss_input_tuple_cmd *req)
{
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
index 6715222aeb66..3513293abda9 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
@@ -978,6 +978,16 @@ static int hns3_set_rss(struct net_device *netdev,
rxfh->hfunc);
}
+static int hns3_get_rxfh_fields(struct net_device *netdev,
+ struct ethtool_rxfh_fields *cmd)
+{
+ struct hnae3_handle *h = hns3_get_handle(netdev);
+
+ if (h->ae_algo->ops->get_rss_tuple)
+ return h->ae_algo->ops->get_rss_tuple(h, cmd);
+ return -EOPNOTSUPP;
+}
+
static int hns3_get_rxnfc(struct net_device *netdev,
struct ethtool_rxnfc *cmd,
u32 *rule_locs)
@@ -988,10 +998,6 @@ static int hns3_get_rxnfc(struct net_device *netdev,
case ETHTOOL_GRXRINGS:
cmd->data = h->kinfo.num_tqps;
return 0;
- case ETHTOOL_GRXFH:
- if (h->ae_algo->ops->get_rss_tuple)
- return h->ae_algo->ops->get_rss_tuple(h, cmd);
- return -EOPNOTSUPP;
case ETHTOOL_GRXCLSRLCNT:
if (h->ae_algo->ops->get_fd_rule_cnt)
return h->ae_algo->ops->get_fd_rule_cnt(h, cmd);
@@ -1275,15 +1281,22 @@ static int hns3_set_ringparam(struct net_device *ndev,
return ret;
}
+static int hns3_set_rxfh_fields(struct net_device *netdev,
+ const struct ethtool_rxfh_fields *cmd,
+ struct netlink_ext_ack *extack)
+{
+ struct hnae3_handle *h = hns3_get_handle(netdev);
+
+ if (h->ae_algo->ops->set_rss_tuple)
+ return h->ae_algo->ops->set_rss_tuple(h, cmd);
+ return -EOPNOTSUPP;
+}
+
static int hns3_set_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd)
{
struct hnae3_handle *h = hns3_get_handle(netdev);
switch (cmd->cmd) {
- case ETHTOOL_SRXFH:
- if (h->ae_algo->ops->set_rss_tuple)
- return h->ae_algo->ops->set_rss_tuple(h, cmd);
- return -EOPNOTSUPP;
case ETHTOOL_SRXCLSRLINS:
if (h->ae_algo->ops->add_fd_entry)
return h->ae_algo->ops->add_fd_entry(h, cmd);
@@ -2105,6 +2118,8 @@ static const struct ethtool_ops hns3vf_ethtool_ops = {
.get_rxfh_indir_size = hns3_get_rss_indir_size,
.get_rxfh = hns3_get_rss,
.set_rxfh = hns3_set_rss,
+ .get_rxfh_fields = hns3_get_rxfh_fields,
+ .set_rxfh_fields = hns3_set_rxfh_fields,
.get_link_ksettings = hns3_get_link_ksettings,
.get_channels = hns3_get_channels,
.set_channels = hns3_set_channels,
@@ -2142,6 +2157,8 @@ static const struct ethtool_ops hns3_ethtool_ops = {
.get_rxfh_indir_size = hns3_get_rss_indir_size,
.get_rxfh = hns3_get_rss,
.set_rxfh = hns3_set_rss,
+ .get_rxfh_fields = hns3_get_rxfh_fields,
+ .set_rxfh_fields = hns3_set_rxfh_fields,
.get_link_ksettings = hns3_get_link_ksettings,
.set_link_ksettings = hns3_set_link_ksettings,
.nway_reset = hns3_nway_reset,
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
index a5b480d59fbf..5acefd57df45 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
@@ -4872,7 +4872,7 @@ static int hclge_set_rss(struct hnae3_handle *handle, const u32 *indir,
}
static int hclge_set_rss_tuple(struct hnae3_handle *handle,
- struct ethtool_rxnfc *nfc)
+ const struct ethtool_rxfh_fields *nfc)
{
struct hclge_vport *vport = hclge_get_vport(handle);
struct hclge_dev *hdev = vport->back;
@@ -4890,7 +4890,7 @@ static int hclge_set_rss_tuple(struct hnae3_handle *handle,
}
static int hclge_get_rss_tuple(struct hnae3_handle *handle,
- struct ethtool_rxnfc *nfc)
+ struct ethtool_rxfh_fields *nfc)
{
struct hclge_vport *vport = hclge_get_vport(handle);
u8 tuple_sets;
diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
index c4f35e8e2177..f1657f50cdda 100644
--- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
+++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
@@ -606,7 +606,7 @@ static int hclgevf_set_rss(struct hnae3_handle *handle, const u32 *indir,
}
static int hclgevf_set_rss_tuple(struct hnae3_handle *handle,
- struct ethtool_rxnfc *nfc)
+ const struct ethtool_rxfh_fields *nfc)
{
struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
int ret;
@@ -624,7 +624,7 @@ static int hclgevf_set_rss_tuple(struct hnae3_handle *handle,
}
static int hclgevf_get_rss_tuple(struct hnae3_handle *handle,
- struct ethtool_rxnfc *nfc)
+ struct ethtool_rxfh_fields *nfc)
{
struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
u8 tuple_sets;
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* [PATCH net-next 10/10] net: ethtool: don't mux RXFH via rxnfc callbacks
2025-06-18 20:38 [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks Jakub Kicinski
` (8 preceding siblings ...)
2025-06-18 20:38 ` [PATCH net-next 09/10] eth: hns3: " Jakub Kicinski
@ 2025-06-18 20:38 ` Jakub Kicinski
2025-06-20 9:50 ` Simon Horman
2025-06-21 15:10 ` [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks patchwork-bot+netdevbpf
10 siblings, 1 reply; 20+ messages in thread
From: Jakub Kicinski @ 2025-06-18 20:38 UTC (permalink / raw)
To: davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe, Jakub Kicinski
All drivers have been converted. Stop using the rxnfc fallbacks
for Rx Flow Hashing configuration.
Joe pointed out in earlier review that in ethtool_set_rxfh()
we need both .get_rxnfc and .get_rxfh_fields, because we need
both the ring count and flow hashing (because we call
ethtool_check_flow_types()). IOW the existing check added
for transitioning drivers was buggy.
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
---
net/ethtool/ioctl.c | 59 ++++++++++++++-------------------------------
1 file changed, 18 insertions(+), 41 deletions(-)
diff --git a/net/ethtool/ioctl.c b/net/ethtool/ioctl.c
index a14cf901c32d..82cde640aa87 100644
--- a/net/ethtool/ioctl.c
+++ b/net/ethtool/ioctl.c
@@ -1037,33 +1037,21 @@ static int ethtool_check_xfrm_rxfh(u32 input_xfrm, u64 rxfh)
static int ethtool_check_flow_types(struct net_device *dev, u32 input_xfrm)
{
const struct ethtool_ops *ops = dev->ethtool_ops;
- struct ethtool_rxnfc info = {
- .cmd = ETHTOOL_GRXFH,
- };
int err;
u32 i;
for (i = 0; i < __FLOW_TYPE_COUNT; i++) {
+ struct ethtool_rxfh_fields fields = {
+ .flow_type = i,
+ };
+
if (!flow_type_hashable(i))
continue;
- info.flow_type = i;
+ if (ops->get_rxfh_fields(dev, &fields))
+ continue;
- if (ops->get_rxfh_fields) {
- struct ethtool_rxfh_fields fields = {
- .flow_type = info.flow_type,
- };
-
- if (ops->get_rxfh_fields(dev, &fields))
- continue;
-
- info.data = fields.data;
- } else {
- if (ops->get_rxnfc(dev, &info, NULL))
- continue;
- }
-
- err = ethtool_check_xfrm_rxfh(input_xfrm, info.data);
+ err = ethtool_check_xfrm_rxfh(input_xfrm, fields.data);
if (err)
return err;
}
@@ -1080,7 +1068,7 @@ ethtool_set_rxfh_fields(struct net_device *dev, u32 cmd, void __user *useraddr)
size_t info_size = sizeof(info);
int rc;
- if (!ops->set_rxnfc && !ops->set_rxfh_fields)
+ if (!ops->set_rxfh_fields)
return -EOPNOTSUPP;
rc = ethtool_rxnfc_copy_struct(cmd, &info, &info_size, useraddr);
@@ -1103,9 +1091,6 @@ ethtool_set_rxfh_fields(struct net_device *dev, u32 cmd, void __user *useraddr)
return rc;
}
- if (!ops->set_rxfh_fields)
- return ops->set_rxnfc(dev, &info);
-
fields.data = info.data;
fields.flow_type = info.flow_type & ~FLOW_RSS;
if (info.flow_type & FLOW_RSS)
@@ -1120,9 +1105,10 @@ ethtool_get_rxfh_fields(struct net_device *dev, u32 cmd, void __user *useraddr)
struct ethtool_rxnfc info;
size_t info_size = sizeof(info);
const struct ethtool_ops *ops = dev->ethtool_ops;
+ struct ethtool_rxfh_fields fields = {};
int ret;
- if (!ops->get_rxnfc && !ops->get_rxfh_fields)
+ if (!ops->get_rxfh_fields)
return -EOPNOTSUPP;
ret = ethtool_rxnfc_copy_struct(cmd, &info, &info_size, useraddr);
@@ -1133,24 +1119,15 @@ ethtool_get_rxfh_fields(struct net_device *dev, u32 cmd, void __user *useraddr)
!ops->rxfh_per_ctx_fields)
return -EINVAL;
- if (ops->get_rxfh_fields) {
- struct ethtool_rxfh_fields fields = {
- .flow_type = info.flow_type & ~FLOW_RSS,
- };
+ fields.flow_type = info.flow_type & ~FLOW_RSS;
+ if (info.flow_type & FLOW_RSS)
+ fields.rss_context = info.rss_context;
- if (info.flow_type & FLOW_RSS)
- fields.rss_context = info.rss_context;
+ ret = ops->get_rxfh_fields(dev, &fields);
+ if (ret < 0)
+ return ret;
- ret = ops->get_rxfh_fields(dev, &fields);
- if (ret < 0)
- return ret;
-
- info.data = fields.data;
- } else {
- ret = ops->get_rxnfc(dev, &info, NULL);
- if (ret < 0)
- return ret;
- }
+ info.data = fields.data;
return ethtool_rxnfc_copy_to_user(useraddr, &info, info_size, NULL);
}
@@ -1528,7 +1505,7 @@ static noinline_for_stack int ethtool_set_rxfh(struct net_device *dev,
u8 *rss_config;
int ret;
- if ((!ops->get_rxnfc && !ops->get_rxfh_fields) || !ops->set_rxfh)
+ if (!ops->get_rxnfc || !ops->get_rxfh_fields || !ops->set_rxfh)
return -EOPNOTSUPP;
if (ops->get_rxfh_indir_size)
--
2.49.0
^ permalink raw reply related [flat|nested] 20+ messages in thread
* Re: [PATCH net-next 07/10] eth: nfp: migrate to new RXFH callbacks
2025-06-18 20:38 ` [PATCH net-next 07/10] eth: nfp: " Jakub Kicinski
@ 2025-06-19 8:11 ` Louis Peens
0 siblings, 0 replies; 20+ messages in thread
From: Louis Peens @ 2025-06-19 8:11 UTC (permalink / raw)
To: Jakub Kicinski
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms,
ajit.khaparde, sriharsha.basavapatna, somnath.kotur, shenjian15,
salil.mehta, shaojijie, cai.huoqing, saeedm, tariqt, mbloch,
manishc, ecree.xilinx, joe
On Wed, Jun 18, 2025 at 01:38:20PM -0700, Jakub Kicinski wrote:
> Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
> add dedicated callbacks for getting and setting rxfh fields").
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> ---
> .../ethernet/netronome/nfp/nfp_net_ethtool.c | 17 +++++++++--------
> 1 file changed, 9 insertions(+), 8 deletions(-)
> --
Acked-by: Louis Peens <louis.peens@corigine.com>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next 09/10] eth: hns3: migrate to new RXFH callbacks
2025-06-18 20:38 ` [PATCH net-next 09/10] eth: hns3: " Jakub Kicinski
@ 2025-06-19 12:44 ` Jijie Shao
0 siblings, 0 replies; 20+ messages in thread
From: Jijie Shao @ 2025-06-19 12:44 UTC (permalink / raw)
To: Jakub Kicinski, davem
Cc: shaojijie, netdev, edumazet, pabeni, andrew+netdev, horms,
ajit.khaparde, sriharsha.basavapatna, somnath.kotur, shenjian15,
salil.mehta, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe
on 2025/6/19 4:38, Jakub Kicinski wrote:
> Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
> add dedicated callbacks for getting and setting rxfh fields").
Thanks,
Reviewed-by: Jijie Shao<shaojijie@huawei.com>
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> ---
> This driver wins the award for most convoluted abstraction layers :/
HaHa, it is indeed a bit convoluted
But there's nothing wrong with the design.
> ---
> drivers/net/ethernet/hisilicon/hns3/hnae3.h | 4 +--
> .../hns3/hns3_common/hclge_comm_rss.h | 4 +--
> .../hns3/hns3_common/hclge_comm_rss.c | 6 ++--
> .../ethernet/hisilicon/hns3/hns3_ethtool.c | 33 ++++++++++++++-----
> .../hisilicon/hns3/hns3pf/hclge_main.c | 4 +--
> .../hisilicon/hns3/hns3vf/hclgevf_main.c | 4 +--
> 6 files changed, 36 insertions(+), 19 deletions(-)
>
> diff --git a/drivers/net/ethernet/hisilicon/hns3/hnae3.h b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
> index 4e44f28288f9..8dc7d6fae224 100644
> --- a/drivers/net/ethernet/hisilicon/hns3/hnae3.h
> +++ b/drivers/net/ethernet/hisilicon/hns3/hnae3.h
> @@ -690,9 +690,9 @@ struct hnae3_ae_ops {
> int (*set_rss)(struct hnae3_handle *handle, const u32 *indir,
> const u8 *key, const u8 hfunc);
> int (*set_rss_tuple)(struct hnae3_handle *handle,
> - struct ethtool_rxnfc *cmd);
> + const struct ethtool_rxfh_fields *cmd);
> int (*get_rss_tuple)(struct hnae3_handle *handle,
> - struct ethtool_rxnfc *cmd);
> + struct ethtool_rxfh_fields *cmd);
>
> int (*get_tc_size)(struct hnae3_handle *handle);
>
> diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.h b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.h
> index cdafa63fe38b..cbc02b50c6e7 100644
> --- a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.h
> +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.h
> @@ -108,7 +108,7 @@ void hclge_comm_get_rss_indir_tbl(struct hclge_comm_rss_cfg *rss_cfg,
> int hclge_comm_set_rss_algo_key(struct hclge_comm_hw *hw, const u8 hfunc,
> const u8 *key);
> int hclge_comm_init_rss_tuple_cmd(struct hclge_comm_rss_cfg *rss_cfg,
> - struct ethtool_rxnfc *nfc,
> + const struct ethtool_rxfh_fields *nfc,
> struct hnae3_ae_dev *ae_dev,
> struct hclge_comm_rss_input_tuple_cmd *req);
> u64 hclge_comm_convert_rss_tuple(u8 tuple_sets);
> @@ -129,5 +129,5 @@ int hclge_comm_set_rss_hash_key(struct hclge_comm_rss_cfg *rss_cfg,
> int hclge_comm_set_rss_tuple(struct hnae3_ae_dev *ae_dev,
> struct hclge_comm_hw *hw,
> struct hclge_comm_rss_cfg *rss_cfg,
> - struct ethtool_rxnfc *nfc);
> + const struct ethtool_rxfh_fields *nfc);
> #endif
> diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.c b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.c
> index 4e2bb6556b1c..1eca53aaf598 100644
> --- a/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.c
> +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_common/hclge_comm_rss.c
> @@ -151,7 +151,7 @@ EXPORT_SYMBOL_GPL(hclge_comm_set_rss_hash_key);
> int hclge_comm_set_rss_tuple(struct hnae3_ae_dev *ae_dev,
> struct hclge_comm_hw *hw,
> struct hclge_comm_rss_cfg *rss_cfg,
> - struct ethtool_rxnfc *nfc)
> + const struct ethtool_rxfh_fields *nfc)
> {
> struct hclge_comm_rss_input_tuple_cmd *req;
> struct hclge_desc desc;
> @@ -422,7 +422,7 @@ int hclge_comm_set_rss_algo_key(struct hclge_comm_hw *hw, const u8 hfunc,
> }
> EXPORT_SYMBOL_GPL(hclge_comm_set_rss_algo_key);
>
> -static u8 hclge_comm_get_rss_hash_bits(struct ethtool_rxnfc *nfc)
> +static u8 hclge_comm_get_rss_hash_bits(const struct ethtool_rxfh_fields *nfc)
> {
> u8 hash_sets = nfc->data & RXH_L4_B_0_1 ? HCLGE_COMM_S_PORT_BIT : 0;
>
> @@ -448,7 +448,7 @@ static u8 hclge_comm_get_rss_hash_bits(struct ethtool_rxnfc *nfc)
> }
>
> int hclge_comm_init_rss_tuple_cmd(struct hclge_comm_rss_cfg *rss_cfg,
> - struct ethtool_rxnfc *nfc,
> + const struct ethtool_rxfh_fields *nfc,
> struct hnae3_ae_dev *ae_dev,
> struct hclge_comm_rss_input_tuple_cmd *req)
> {
> diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
> index 6715222aeb66..3513293abda9 100644
> --- a/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
> +++ b/drivers/net/ethernet/hisilicon/hns3/hns3_ethtool.c
> @@ -978,6 +978,16 @@ static int hns3_set_rss(struct net_device *netdev,
> rxfh->hfunc);
> }
>
> +static int hns3_get_rxfh_fields(struct net_device *netdev,
> + struct ethtool_rxfh_fields *cmd)
> +{
> + struct hnae3_handle *h = hns3_get_handle(netdev);
> +
> + if (h->ae_algo->ops->get_rss_tuple)
> + return h->ae_algo->ops->get_rss_tuple(h, cmd);
> + return -EOPNOTSUPP;
> +}
> +
> static int hns3_get_rxnfc(struct net_device *netdev,
> struct ethtool_rxnfc *cmd,
> u32 *rule_locs)
> @@ -988,10 +998,6 @@ static int hns3_get_rxnfc(struct net_device *netdev,
> case ETHTOOL_GRXRINGS:
> cmd->data = h->kinfo.num_tqps;
> return 0;
> - case ETHTOOL_GRXFH:
> - if (h->ae_algo->ops->get_rss_tuple)
> - return h->ae_algo->ops->get_rss_tuple(h, cmd);
> - return -EOPNOTSUPP;
> case ETHTOOL_GRXCLSRLCNT:
> if (h->ae_algo->ops->get_fd_rule_cnt)
> return h->ae_algo->ops->get_fd_rule_cnt(h, cmd);
> @@ -1275,15 +1281,22 @@ static int hns3_set_ringparam(struct net_device *ndev,
> return ret;
> }
>
> +static int hns3_set_rxfh_fields(struct net_device *netdev,
> + const struct ethtool_rxfh_fields *cmd,
> + struct netlink_ext_ack *extack)
> +{
> + struct hnae3_handle *h = hns3_get_handle(netdev);
> +
> + if (h->ae_algo->ops->set_rss_tuple)
> + return h->ae_algo->ops->set_rss_tuple(h, cmd);
> + return -EOPNOTSUPP;
> +}
> +
> static int hns3_set_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd)
> {
> struct hnae3_handle *h = hns3_get_handle(netdev);
>
> switch (cmd->cmd) {
> - case ETHTOOL_SRXFH:
> - if (h->ae_algo->ops->set_rss_tuple)
> - return h->ae_algo->ops->set_rss_tuple(h, cmd);
> - return -EOPNOTSUPP;
> case ETHTOOL_SRXCLSRLINS:
> if (h->ae_algo->ops->add_fd_entry)
> return h->ae_algo->ops->add_fd_entry(h, cmd);
> @@ -2105,6 +2118,8 @@ static const struct ethtool_ops hns3vf_ethtool_ops = {
> .get_rxfh_indir_size = hns3_get_rss_indir_size,
> .get_rxfh = hns3_get_rss,
> .set_rxfh = hns3_set_rss,
> + .get_rxfh_fields = hns3_get_rxfh_fields,
> + .set_rxfh_fields = hns3_set_rxfh_fields,
> .get_link_ksettings = hns3_get_link_ksettings,
> .get_channels = hns3_get_channels,
> .set_channels = hns3_set_channels,
> @@ -2142,6 +2157,8 @@ static const struct ethtool_ops hns3_ethtool_ops = {
> .get_rxfh_indir_size = hns3_get_rss_indir_size,
> .get_rxfh = hns3_get_rss,
> .set_rxfh = hns3_set_rss,
> + .get_rxfh_fields = hns3_get_rxfh_fields,
> + .set_rxfh_fields = hns3_set_rxfh_fields,
> .get_link_ksettings = hns3_get_link_ksettings,
> .set_link_ksettings = hns3_set_link_ksettings,
> .nway_reset = hns3_nway_reset,
> diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
> index a5b480d59fbf..5acefd57df45 100644
> --- a/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
> +++ b/drivers/net/ethernet/hisilicon/hns3/hns3pf/hclge_main.c
> @@ -4872,7 +4872,7 @@ static int hclge_set_rss(struct hnae3_handle *handle, const u32 *indir,
> }
>
> static int hclge_set_rss_tuple(struct hnae3_handle *handle,
> - struct ethtool_rxnfc *nfc)
> + const struct ethtool_rxfh_fields *nfc)
> {
> struct hclge_vport *vport = hclge_get_vport(handle);
> struct hclge_dev *hdev = vport->back;
> @@ -4890,7 +4890,7 @@ static int hclge_set_rss_tuple(struct hnae3_handle *handle,
> }
>
> static int hclge_get_rss_tuple(struct hnae3_handle *handle,
> - struct ethtool_rxnfc *nfc)
> + struct ethtool_rxfh_fields *nfc)
> {
> struct hclge_vport *vport = hclge_get_vport(handle);
> u8 tuple_sets;
> diff --git a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
> index c4f35e8e2177..f1657f50cdda 100644
> --- a/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
> +++ b/drivers/net/ethernet/hisilicon/hns3/hns3vf/hclgevf_main.c
> @@ -606,7 +606,7 @@ static int hclgevf_set_rss(struct hnae3_handle *handle, const u32 *indir,
> }
>
> static int hclgevf_set_rss_tuple(struct hnae3_handle *handle,
> - struct ethtool_rxnfc *nfc)
> + const struct ethtool_rxfh_fields *nfc)
> {
> struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
> int ret;
> @@ -624,7 +624,7 @@ static int hclgevf_set_rss_tuple(struct hnae3_handle *handle,
> }
>
> static int hclgevf_get_rss_tuple(struct hnae3_handle *handle,
> - struct ethtool_rxnfc *nfc)
> + struct ethtool_rxfh_fields *nfc)
> {
> struct hclgevf_dev *hdev = hclgevf_ae_get_hdev(handle);
> u8 tuple_sets;
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next 06/10] eth: mlx5: migrate to new RXFH callbacks
2025-06-18 20:38 ` [PATCH net-next 06/10] eth: mlx5: " Jakub Kicinski
@ 2025-06-19 14:02 ` Dragos Tatulea
0 siblings, 0 replies; 20+ messages in thread
From: Dragos Tatulea @ 2025-06-19 14:02 UTC (permalink / raw)
To: Jakub Kicinski, davem
Cc: netdev, edumazet, pabeni, andrew+netdev, horms, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe
On Wed, Jun 18, 2025 at 01:38:19PM -0700, Jakub Kicinski wrote:
> Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
> add dedicated callbacks for getting and setting rxfh fields").
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
> ---
> .../mellanox/mlx5/core/en/fs_ethtool.h | 14 +++++++++++
> .../ethernet/mellanox/mlx5/core/en_ethtool.c | 19 ++++++++++++++
> .../mellanox/mlx5/core/en_fs_ethtool.c | 25 +++++++------------
> .../mellanox/mlx5/core/ipoib/ethtool.c | 19 ++++++++++++++
> 4 files changed, 61 insertions(+), 16 deletions(-)
>
> --
Reviewed-by: Dragos Tatulea <dtatulea@nvidia.com>
Thanks,
Dragos
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next 04/10] eth: benet: migrate to new RXFH callbacks
2025-06-18 20:38 ` [PATCH net-next 04/10] eth: benet: " Jakub Kicinski
@ 2025-06-20 9:48 ` Simon Horman
2025-06-21 14:55 ` Jakub Kicinski
0 siblings, 1 reply; 20+ messages in thread
From: Simon Horman @ 2025-06-20 9:48 UTC (permalink / raw)
To: Jakub Kicinski
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe
On Wed, Jun 18, 2025 at 01:38:17PM -0700, Jakub Kicinski wrote:
> Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
> add dedicated callbacks for getting and setting rxfh fields").
>
> The driver has no other RXNFC functionality so the SET callback can
> be now removed.
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Simon Horman <horms@kernel.org>
...
> @@ -1132,11 +1139,20 @@ static int be_get_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *cmd,
> return 0;
> }
>
> -static int be_set_rss_hash_opts(struct be_adapter *adapter,
> - struct ethtool_rxnfc *cmd)
> +
super nit: there are two consecutive blank lines are here now
> +static int be_set_rxfh_fields(struct net_device *netdev,
> + const struct ethtool_rxfh_fields *cmd,
> + struct netlink_ext_ack *extack)
> {
> - int status;
> + struct be_adapter *adapter = netdev_priv(netdev);
> u32 rss_flags = adapter->rss_info.rss_flags;
> + int status;
> +
> + if (!be_multi_rxq(adapter)) {
> + dev_err(&adapter->pdev->dev,
> + "ethtool::set_rxfh: RX flow hashing is disabled\n");
> + return -EINVAL;
> + }
>
> if (cmd->data != L3_RSS_FLAGS &&
> cmd->data != (L3_RSS_FLAGS | L4_RSS_FLAGS))
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next 05/10] eth: qede: migrate to new RXFH callbacks
2025-06-18 20:38 ` [PATCH net-next 05/10] eth: qede: " Jakub Kicinski
@ 2025-06-20 9:49 ` Simon Horman
0 siblings, 0 replies; 20+ messages in thread
From: Simon Horman @ 2025-06-20 9:49 UTC (permalink / raw)
To: Jakub Kicinski
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe
On Wed, Jun 18, 2025 at 01:38:18PM -0700, Jakub Kicinski wrote:
> Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
> add dedicated callbacks for getting and setting rxfh fields").
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next 08/10] eth: hinic: migrate to new RXFH callbacks
2025-06-18 20:38 ` [PATCH net-next 08/10] eth: hinic: " Jakub Kicinski
@ 2025-06-20 9:49 ` Simon Horman
0 siblings, 0 replies; 20+ messages in thread
From: Simon Horman @ 2025-06-20 9:49 UTC (permalink / raw)
To: Jakub Kicinski
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe
On Wed, Jun 18, 2025 at 01:38:21PM -0700, Jakub Kicinski wrote:
> Migrate to new callbacks added by commit 9bb00786fc61 ("net: ethtool:
> add dedicated callbacks for getting and setting rxfh fields").
>
> Zeroing data on SET is not necessary, the argument is not copied
> back to user space. The driver has no other RXNFC functionality
> so the SET callback can be now removed.
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next 10/10] net: ethtool: don't mux RXFH via rxnfc callbacks
2025-06-18 20:38 ` [PATCH net-next 10/10] net: ethtool: don't mux RXFH via rxnfc callbacks Jakub Kicinski
@ 2025-06-20 9:50 ` Simon Horman
0 siblings, 0 replies; 20+ messages in thread
From: Simon Horman @ 2025-06-20 9:50 UTC (permalink / raw)
To: Jakub Kicinski
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe
On Wed, Jun 18, 2025 at 01:38:23PM -0700, Jakub Kicinski wrote:
> All drivers have been converted. Stop using the rxnfc fallbacks
> for Rx Flow Hashing configuration.
>
> Joe pointed out in earlier review that in ethtool_set_rxfh()
> we need both .get_rxnfc and .get_rxfh_fields, because we need
> both the ring count and flow hashing (because we call
> ethtool_check_flow_types()). IOW the existing check added
> for transitioning drivers was buggy.
>
> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
Reviewed-by: Simon Horman <horms@kernel.org>
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next 04/10] eth: benet: migrate to new RXFH callbacks
2025-06-20 9:48 ` Simon Horman
@ 2025-06-21 14:55 ` Jakub Kicinski
0 siblings, 0 replies; 20+ messages in thread
From: Jakub Kicinski @ 2025-06-21 14:55 UTC (permalink / raw)
To: Simon Horman
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, ajit.khaparde,
sriharsha.basavapatna, somnath.kotur, shenjian15, salil.mehta,
shaojijie, cai.huoqing, saeedm, tariqt, louis.peens, mbloch,
manishc, ecree.xilinx, joe
On Fri, 20 Jun 2025 10:48:52 +0100 Simon Horman wrote:
> > -static int be_set_rss_hash_opts(struct be_adapter *adapter,
> > - struct ethtool_rxnfc *cmd)
> > +
>
> super nit: there are two consecutive blank lines are here now
Fixed when applying, thanks for catching!
^ permalink raw reply [flat|nested] 20+ messages in thread
* Re: [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks
2025-06-18 20:38 [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks Jakub Kicinski
` (9 preceding siblings ...)
2025-06-18 20:38 ` [PATCH net-next 10/10] net: ethtool: don't mux RXFH via rxnfc callbacks Jakub Kicinski
@ 2025-06-21 15:10 ` patchwork-bot+netdevbpf
10 siblings, 0 replies; 20+ messages in thread
From: patchwork-bot+netdevbpf @ 2025-06-21 15:10 UTC (permalink / raw)
To: Jakub Kicinski
Cc: davem, netdev, edumazet, pabeni, andrew+netdev, horms,
ajit.khaparde, sriharsha.basavapatna, somnath.kotur, shenjian15,
salil.mehta, shaojijie, cai.huoqing, saeedm, tariqt, louis.peens,
mbloch, manishc, ecree.xilinx, joe
Hello:
This series was applied to netdev/net-next.git (main)
by Jakub Kicinski <kuba@kernel.org>:
On Wed, 18 Jun 2025 13:38:13 -0700 you wrote:
> Finish drivers conversions to callbacks added by
> commit 9bb00786fc61 ("net: ethtool: add dedicated callbacks for
> getting and setting rxfh fields"). Remove the conditional calling
> in the core, rxnfc callbacks are no longer used for RXFH.
>
> Jakub Kicinski (10):
> eth: sfc: falcon: migrate to new RXFH callbacks
> eth: sfc: siena: migrate to new RXFH callbacks
> eth: sfc: migrate to new RXFH callbacks
> eth: benet: migrate to new RXFH callbacks
> eth: qede: migrate to new RXFH callbacks
> eth: mlx5: migrate to new RXFH callbacks
> eth: nfp: migrate to new RXFH callbacks
> eth: hinic: migrate to new RXFH callbacks
> eth: hns3: migrate to new RXFH callbacks
> net: ethtool: don't mux RXFH via rxnfc callbacks
>
> [...]
Here is the summary with links:
- [net-next,01/10] eth: sfc: falcon: migrate to new RXFH callbacks
https://git.kernel.org/netdev/net-next/c/80ec96cb245b
- [net-next,02/10] eth: sfc: siena: migrate to new RXFH callbacks
https://git.kernel.org/netdev/net-next/c/c58b9d1829d4
- [net-next,03/10] eth: sfc: migrate to new RXFH callbacks
https://git.kernel.org/netdev/net-next/c/861b948ac18c
- [net-next,04/10] eth: benet: migrate to new RXFH callbacks
https://git.kernel.org/netdev/net-next/c/92a95652650f
- [net-next,05/10] eth: qede: migrate to new RXFH callbacks
https://git.kernel.org/netdev/net-next/c/06bb89e00f22
- [net-next,06/10] eth: mlx5: migrate to new RXFH callbacks
https://git.kernel.org/netdev/net-next/c/18f4e3898ac3
- [net-next,07/10] eth: nfp: migrate to new RXFH callbacks
https://git.kernel.org/netdev/net-next/c/6bfd8cf33859
- [net-next,08/10] eth: hinic: migrate to new RXFH callbacks
https://git.kernel.org/netdev/net-next/c/943c0ce30884
- [net-next,09/10] eth: hns3: migrate to new RXFH callbacks
https://git.kernel.org/netdev/net-next/c/188793f082a5
- [net-next,10/10] net: ethtool: don't mux RXFH via rxnfc callbacks
https://git.kernel.org/netdev/net-next/c/72792461c8e8
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] 20+ messages in thread
end of thread, other threads:[~2025-06-21 15:09 UTC | newest]
Thread overview: 20+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-06-18 20:38 [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks Jakub Kicinski
2025-06-18 20:38 ` [PATCH net-next 01/10] eth: sfc: falcon: migrate to " Jakub Kicinski
2025-06-18 20:38 ` [PATCH net-next 02/10] eth: sfc: siena: " Jakub Kicinski
2025-06-18 20:38 ` [PATCH net-next 03/10] eth: sfc: " Jakub Kicinski
2025-06-18 20:38 ` [PATCH net-next 04/10] eth: benet: " Jakub Kicinski
2025-06-20 9:48 ` Simon Horman
2025-06-21 14:55 ` Jakub Kicinski
2025-06-18 20:38 ` [PATCH net-next 05/10] eth: qede: " Jakub Kicinski
2025-06-20 9:49 ` Simon Horman
2025-06-18 20:38 ` [PATCH net-next 06/10] eth: mlx5: " Jakub Kicinski
2025-06-19 14:02 ` Dragos Tatulea
2025-06-18 20:38 ` [PATCH net-next 07/10] eth: nfp: " Jakub Kicinski
2025-06-19 8:11 ` Louis Peens
2025-06-18 20:38 ` [PATCH net-next 08/10] eth: hinic: " Jakub Kicinski
2025-06-20 9:49 ` Simon Horman
2025-06-18 20:38 ` [PATCH net-next 09/10] eth: hns3: " Jakub Kicinski
2025-06-19 12:44 ` Jijie Shao
2025-06-18 20:38 ` [PATCH net-next 10/10] net: ethtool: don't mux RXFH via rxnfc callbacks Jakub Kicinski
2025-06-20 9:50 ` Simon Horman
2025-06-21 15:10 ` [PATCH net-next 00/10] eth: finish migration to the new RXFH callbacks patchwork-bot+netdevbpf
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).