Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'eth-migrate-some-drivers-to-new-rxfh-callbacks'

Jakub Kicinski says:

====================
eth: migrate some drivers to new RXFH callbacks

Migrate a batch of drivers to the recently added dedicated
.get_rxfh_fields and .set_rxfh_fields ethtool callbacks.
====================

Link: https://patch.msgid.link/20250617014555.434790-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

+70 -94
+11 -28
drivers/net/ethernet/amazon/ena/ena_ethtool.c
··· 721 721 return data; 722 722 } 723 723 724 - static int ena_get_rss_hash(struct ena_com_dev *ena_dev, 725 - struct ethtool_rxnfc *cmd) 724 + static int ena_get_rxfh_fields(struct net_device *netdev, 725 + struct ethtool_rxfh_fields *cmd) 726 726 { 727 + struct ena_adapter *adapter = netdev_priv(netdev); 728 + struct ena_com_dev *ena_dev = adapter->ena_dev; 727 729 enum ena_admin_flow_hash_proto proto; 728 730 u16 hash_fields; 729 731 int rc; ··· 774 772 return 0; 775 773 } 776 774 777 - static int ena_set_rss_hash(struct ena_com_dev *ena_dev, 778 - struct ethtool_rxnfc *cmd) 775 + static int ena_set_rxfh_fields(struct net_device *netdev, 776 + const struct ethtool_rxfh_fields *cmd, 777 + struct netlink_ext_ack *extack) 779 778 { 779 + struct ena_adapter *adapter = netdev_priv(netdev); 780 + struct ena_com_dev *ena_dev = adapter->ena_dev; 780 781 enum ena_admin_flow_hash_proto proto; 781 782 u16 hash_fields; 782 783 ··· 821 816 return ena_com_fill_hash_ctrl(ena_dev, proto, hash_fields); 822 817 } 823 818 824 - static int ena_set_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *info) 825 - { 826 - struct ena_adapter *adapter = netdev_priv(netdev); 827 - int rc = 0; 828 - 829 - switch (info->cmd) { 830 - case ETHTOOL_SRXFH: 831 - rc = ena_set_rss_hash(adapter->ena_dev, info); 832 - break; 833 - case ETHTOOL_SRXCLSRLDEL: 834 - case ETHTOOL_SRXCLSRLINS: 835 - default: 836 - netif_err(adapter, drv, netdev, 837 - "Command parameter %d is not supported\n", info->cmd); 838 - rc = -EOPNOTSUPP; 839 - } 840 - 841 - return rc; 842 - } 843 - 844 819 static int ena_get_rxnfc(struct net_device *netdev, struct ethtool_rxnfc *info, 845 820 u32 *rules) 846 821 { ··· 831 846 case ETHTOOL_GRXRINGS: 832 847 info->data = adapter->num_io_queues; 833 848 rc = 0; 834 - break; 835 - case ETHTOOL_GRXFH: 836 - rc = ena_get_rss_hash(adapter->ena_dev, info); 837 849 break; 838 850 case ETHTOOL_GRXCLSRLCNT: 839 851 case ETHTOOL_GRXCLSRULE: ··· 1080 1098 .get_strings = ena_get_ethtool_strings, 1081 1099 .get_ethtool_stats = ena_get_ethtool_stats, 1082 1100 .get_rxnfc = ena_get_rxnfc, 1083 - .set_rxnfc = ena_set_rxnfc, 1084 1101 .get_rxfh_indir_size = ena_get_rxfh_indir_size, 1085 1102 .get_rxfh_key_size = ena_get_rxfh_key_size, 1086 1103 .get_rxfh = ena_get_rxfh, 1087 1104 .set_rxfh = ena_set_rxfh, 1105 + .get_rxfh_fields = ena_get_rxfh_fields, 1106 + .set_rxfh_fields = ena_set_rxfh_fields, 1088 1107 .get_channels = ena_get_channels, 1089 1108 .set_channels = ena_set_channels, 1090 1109 .get_tunable = ena_get_tunable,
+13 -20
drivers/net/ethernet/broadcom/bnx2x/bnx2x_ethtool.c
··· 3318 3318 return 0; 3319 3319 } 3320 3320 3321 - static int bnx2x_get_rss_flags(struct bnx2x *bp, struct ethtool_rxnfc *info) 3321 + static int bnx2x_get_rxfh_fields(struct net_device *dev, 3322 + struct ethtool_rxfh_fields *info) 3322 3323 { 3324 + struct bnx2x *bp = netdev_priv(dev); 3325 + 3323 3326 switch (info->flow_type) { 3324 3327 case TCP_V4_FLOW: 3325 3328 case TCP_V6_FLOW: ··· 3364 3361 case ETHTOOL_GRXRINGS: 3365 3362 info->data = BNX2X_NUM_ETH_QUEUES(bp); 3366 3363 return 0; 3367 - case ETHTOOL_GRXFH: 3368 - return bnx2x_get_rss_flags(bp, info); 3369 3364 default: 3370 3365 DP(BNX2X_MSG_ETHTOOL, "Command parameters not supported\n"); 3371 3366 return -EOPNOTSUPP; 3372 3367 } 3373 3368 } 3374 3369 3375 - static int bnx2x_set_rss_flags(struct bnx2x *bp, struct ethtool_rxnfc *info) 3370 + static int bnx2x_set_rxfh_fields(struct net_device *dev, 3371 + const struct ethtool_rxfh_fields *info, 3372 + struct netlink_ext_ack *extack) 3376 3373 { 3374 + struct bnx2x *bp = netdev_priv(dev); 3377 3375 int udp_rss_requested; 3378 3376 3379 3377 DP(BNX2X_MSG_ETHTOOL, 3380 - "Set rss flags command parameters: flow type = %d, data = %llu\n", 3378 + "Set rss flags command parameters: flow type = %d, data = %u\n", 3381 3379 info->flow_type, info->data); 3382 3380 3383 3381 switch (info->flow_type) { ··· 3461 3457 3462 3458 default: 3463 3459 return -EINVAL; 3464 - } 3465 - } 3466 - 3467 - static int bnx2x_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info) 3468 - { 3469 - struct bnx2x *bp = netdev_priv(dev); 3470 - 3471 - switch (info->cmd) { 3472 - case ETHTOOL_SRXFH: 3473 - return bnx2x_set_rss_flags(bp, info); 3474 - default: 3475 - DP(BNX2X_MSG_ETHTOOL, "Command parameters not supported\n"); 3476 - return -EOPNOTSUPP; 3477 3460 } 3478 3461 } 3479 3462 ··· 3675 3684 .set_phys_id = bnx2x_set_phys_id, 3676 3685 .get_ethtool_stats = bnx2x_get_ethtool_stats, 3677 3686 .get_rxnfc = bnx2x_get_rxnfc, 3678 - .set_rxnfc = bnx2x_set_rxnfc, 3679 3687 .get_rxfh_indir_size = bnx2x_get_rxfh_indir_size, 3680 3688 .get_rxfh = bnx2x_get_rxfh, 3681 3689 .set_rxfh = bnx2x_set_rxfh, 3690 + .get_rxfh_fields = bnx2x_get_rxfh_fields, 3691 + .set_rxfh_fields = bnx2x_set_rxfh_fields, 3682 3692 .get_channels = bnx2x_get_channels, 3683 3693 .set_channels = bnx2x_set_channels, 3684 3694 .get_module_info = bnx2x_get_module_info, ··· 3703 3711 .get_strings = bnx2x_get_strings, 3704 3712 .get_ethtool_stats = bnx2x_get_ethtool_stats, 3705 3713 .get_rxnfc = bnx2x_get_rxnfc, 3706 - .set_rxnfc = bnx2x_set_rxnfc, 3707 3714 .get_rxfh_indir_size = bnx2x_get_rxfh_indir_size, 3708 3715 .get_rxfh = bnx2x_get_rxfh, 3709 3716 .set_rxfh = bnx2x_set_rxfh, 3717 + .get_rxfh_fields = bnx2x_get_rxfh_fields, 3718 + .set_rxfh_fields = bnx2x_set_rxfh_fields, 3710 3719 .get_channels = bnx2x_get_channels, 3711 3720 .set_channels = bnx2x_set_channels, 3712 3721 .get_link_ksettings = bnx2x_get_vf_link_ksettings,
+13 -11
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c
··· 1587 1587 return 0; 1588 1588 } 1589 1589 1590 - static int bnxt_grxfh(struct bnxt *bp, struct ethtool_rxnfc *cmd) 1590 + static int bnxt_get_rxfh_fields(struct net_device *dev, 1591 + struct ethtool_rxfh_fields *cmd) 1591 1592 { 1593 + struct bnxt *bp = netdev_priv(dev); 1594 + 1592 1595 cmd->data = 0; 1593 1596 switch (cmd->flow_type) { 1594 1597 case TCP_V4_FLOW: ··· 1650 1647 #define RXH_4TUPLE (RXH_IP_SRC | RXH_IP_DST | RXH_L4_B_0_1 | RXH_L4_B_2_3) 1651 1648 #define RXH_2TUPLE (RXH_IP_SRC | RXH_IP_DST) 1652 1649 1653 - static int bnxt_srxfh(struct bnxt *bp, struct ethtool_rxnfc *cmd) 1650 + static int bnxt_set_rxfh_fields(struct net_device *dev, 1651 + const struct ethtool_rxfh_fields *cmd, 1652 + struct netlink_ext_ack *extack) 1654 1653 { 1655 - u32 rss_hash_cfg = bp->rss_hash_cfg; 1654 + struct bnxt *bp = netdev_priv(dev); 1656 1655 int tuple, rc = 0; 1656 + u32 rss_hash_cfg; 1657 + 1658 + rss_hash_cfg = bp->rss_hash_cfg; 1657 1659 1658 1660 if (cmd->data == RXH_4TUPLE) 1659 1661 tuple = 4; ··· 1776 1768 rc = bnxt_grxclsrule(bp, cmd); 1777 1769 break; 1778 1770 1779 - case ETHTOOL_GRXFH: 1780 - rc = bnxt_grxfh(bp, cmd); 1781 - break; 1782 - 1783 1771 default: 1784 1772 rc = -EOPNOTSUPP; 1785 1773 break; ··· 1790 1786 int rc; 1791 1787 1792 1788 switch (cmd->cmd) { 1793 - case ETHTOOL_SRXFH: 1794 - rc = bnxt_srxfh(bp, cmd); 1795 - break; 1796 - 1797 1789 case ETHTOOL_SRXCLSRLINS: 1798 1790 rc = bnxt_srxclsrlins(bp, cmd); 1799 1791 break; ··· 5521 5521 .get_rxfh_key_size = bnxt_get_rxfh_key_size, 5522 5522 .get_rxfh = bnxt_get_rxfh, 5523 5523 .set_rxfh = bnxt_set_rxfh, 5524 + .get_rxfh_fields = bnxt_get_rxfh_fields, 5525 + .set_rxfh_fields = bnxt_set_rxfh_fields, 5524 5526 .create_rxfh_context = bnxt_create_rxfh_context, 5525 5527 .modify_rxfh_context = bnxt_modify_rxfh_context, 5526 5528 .remove_rxfh_context = bnxt_remove_rxfh_context,
+14 -23
drivers/net/ethernet/cavium/thunder/nicvf_ethtool.c
··· 516 516 return 0; 517 517 } 518 518 519 - static int nicvf_get_rss_hash_opts(struct nicvf *nic, 520 - struct ethtool_rxnfc *info) 519 + static int nicvf_get_rxfh_fields(struct net_device *dev, 520 + struct ethtool_rxfh_fields *info) 521 521 { 522 522 info->data = 0; 523 523 ··· 552 552 info->data = nic->rx_queues; 553 553 ret = 0; 554 554 break; 555 - case ETHTOOL_GRXFH: 556 - return nicvf_get_rss_hash_opts(nic, info); 557 555 default: 558 556 break; 559 557 } 560 558 return ret; 561 559 } 562 560 563 - static int nicvf_set_rss_hash_opts(struct nicvf *nic, 564 - struct ethtool_rxnfc *info) 561 + static int nicvf_set_rxfh_fields(struct net_device *dev, 562 + const struct ethtool_rxfh_fields *info, 563 + struct netlink_ext_ack *extack) 565 564 { 566 - struct nicvf_rss_info *rss = &nic->rss_info; 567 - u64 rss_cfg = nicvf_reg_read(nic, NIC_VNIC_RSS_CFG); 565 + struct nicvf *nic = netdev_priv(dev); 566 + struct nicvf_rss_info *rss; 567 + u64 rss_cfg; 568 + 569 + rss = &nic->rss_info; 570 + rss_cfg = nicvf_reg_read(nic, NIC_VNIC_RSS_CFG); 568 571 569 572 if (!rss->enable) 570 573 netdev_err(nic->netdev, 571 574 "RSS is disabled, hash cannot be set\n"); 572 575 573 - netdev_info(nic->netdev, "Set RSS flow type = %d, data = %lld\n", 576 + netdev_info(nic->netdev, "Set RSS flow type = %d, data = %u\n", 574 577 info->flow_type, info->data); 575 578 576 579 if (!(info->data & RXH_IP_SRC) || !(info->data & RXH_IP_DST)) ··· 629 626 630 627 nicvf_reg_write(nic, NIC_VNIC_RSS_CFG, rss_cfg); 631 628 return 0; 632 - } 633 - 634 - static int nicvf_set_rxnfc(struct net_device *dev, struct ethtool_rxnfc *info) 635 - { 636 - struct nicvf *nic = netdev_priv(dev); 637 - 638 - switch (info->cmd) { 639 - case ETHTOOL_SRXFH: 640 - return nicvf_set_rss_hash_opts(nic, info); 641 - default: 642 - break; 643 - } 644 - return -EOPNOTSUPP; 645 629 } 646 630 647 631 static u32 nicvf_get_rxfh_key_size(struct net_device *netdev) ··· 862 872 .get_ringparam = nicvf_get_ringparam, 863 873 .set_ringparam = nicvf_set_ringparam, 864 874 .get_rxnfc = nicvf_get_rxnfc, 865 - .set_rxnfc = nicvf_set_rxnfc, 866 875 .get_rxfh_key_size = nicvf_get_rxfh_key_size, 867 876 .get_rxfh_indir_size = nicvf_get_rxfh_indir_size, 868 877 .get_rxfh = nicvf_get_rxfh, 869 878 .set_rxfh = nicvf_set_rxfh, 879 + .get_rxfh_fields = nicvf_get_rxfh_fields, 880 + .set_rxfh_fields = nicvf_set_rxfh_fields, 870 881 .get_channels = nicvf_get_channels, 871 882 .set_channels = nicvf_set_channels, 872 883 .get_pauseparam = nicvf_get_pauseparam,
+19 -12
drivers/net/ethernet/marvell/octeontx2/nic/otx2_ethtool.c
··· 559 559 return 0; 560 560 } 561 561 562 - static int otx2_get_rss_hash_opts(struct otx2_nic *pfvf, 563 - struct ethtool_rxnfc *nfc) 562 + static int otx2_get_rss_hash_opts(struct net_device *dev, 563 + struct ethtool_rxfh_fields *nfc) 564 564 { 565 - struct otx2_rss_info *rss = &pfvf->hw.rss_info; 565 + struct otx2_nic *pfvf = netdev_priv(dev); 566 + struct otx2_rss_info *rss; 567 + 568 + rss = &pfvf->hw.rss_info; 566 569 567 570 if (!(rss->flowkey_cfg & 568 571 (NIX_FLOW_KEY_TYPE_IPV4 | NIX_FLOW_KEY_TYPE_IPV6))) ··· 612 609 return 0; 613 610 } 614 611 615 - static int otx2_set_rss_hash_opts(struct otx2_nic *pfvf, 616 - struct ethtool_rxnfc *nfc) 612 + static int otx2_set_rss_hash_opts(struct net_device *dev, 613 + const struct ethtool_rxfh_fields *nfc, 614 + struct netlink_ext_ack *extack) 617 615 { 618 - struct otx2_rss_info *rss = &pfvf->hw.rss_info; 616 + struct otx2_nic *pfvf = netdev_priv(dev); 619 617 u32 rxh_l4 = RXH_L4_B_0_1 | RXH_L4_B_2_3; 620 - u32 rss_cfg = rss->flowkey_cfg; 618 + struct otx2_rss_info *rss; 619 + u32 rss_cfg; 620 + 621 + rss = &pfvf->hw.rss_info; 622 + rss_cfg = rss->flowkey_cfg; 621 623 622 624 if (!rss->enable) { 623 625 netdev_err(pfvf->netdev, ··· 751 743 if (netif_running(dev) && ntuple) 752 744 ret = otx2_get_all_flows(pfvf, nfc, rules); 753 745 break; 754 - case ETHTOOL_GRXFH: 755 - return otx2_get_rss_hash_opts(pfvf, nfc); 756 746 default: 757 747 break; 758 748 } ··· 765 759 766 760 pfvf->flow_cfg->ntuple = ntuple; 767 761 switch (nfc->cmd) { 768 - case ETHTOOL_SRXFH: 769 - ret = otx2_set_rss_hash_opts(pfvf, nfc); 770 - break; 771 762 case ETHTOOL_SRXCLSRLINS: 772 763 if (netif_running(dev) && ntuple) 773 764 ret = otx2_add_flow(pfvf, nfc); ··· 1332 1329 .get_rxfh_indir_size = otx2_get_rxfh_indir_size, 1333 1330 .get_rxfh = otx2_get_rxfh, 1334 1331 .set_rxfh = otx2_set_rxfh, 1332 + .get_rxfh_fields = otx2_get_rss_hash_opts, 1333 + .set_rxfh_fields = otx2_set_rss_hash_opts, 1335 1334 .get_msglevel = otx2_get_msglevel, 1336 1335 .set_msglevel = otx2_set_msglevel, 1337 1336 .get_pauseparam = otx2_get_pauseparam, ··· 1447 1442 .get_rxfh_indir_size = otx2_get_rxfh_indir_size, 1448 1443 .get_rxfh = otx2_get_rxfh, 1449 1444 .set_rxfh = otx2_set_rxfh, 1445 + .get_rxfh_fields = otx2_get_rss_hash_opts, 1446 + .set_rxfh_fields = otx2_set_rss_hash_opts, 1450 1447 .get_ringparam = otx2_get_ringparam, 1451 1448 .set_ringparam = otx2_set_ringparam, 1452 1449 .get_coalesce = otx2_get_coalesce,