]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
bnxt_en: Refactor bnxt_set_rxfh()
authorMichael Chan <michael.chan@broadcom.com>
Mon, 25 Mar 2024 22:28:59 +0000 (15:28 -0700)
committerJakub Kicinski <kuba@kernel.org>
Fri, 29 Mar 2024 05:34:41 +0000 (22:34 -0700)
Add a new bnxt_modify_rss() function to modify the RSS key and RSS
indirection table.  The new function can modify the parameters for
the default context or additional contexts.

Signed-off-by: Michael Chan <michael.chan@broadcom.com>
Link: https://lore.kernel.org/r/20240325222902.220712-10-michael.chan@broadcom.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/broadcom/bnxt/bnxt_ethtool.c

index 771833b1900dcd3c311be3947abd8329b6011303..7f57198f5834cf65445d4e8f70e3cf8838f25d51 100644 (file)
@@ -1778,6 +1778,32 @@ static int bnxt_get_rxfh(struct net_device *dev,
        return 0;
 }
 
+static void bnxt_modify_rss(struct bnxt *bp, struct bnxt_rss_ctx *rss_ctx,
+                           struct ethtool_rxfh_param *rxfh)
+{
+       if (rxfh->key) {
+               if (rss_ctx) {
+                       memcpy(rss_ctx->vnic.rss_hash_key, rxfh->key,
+                              HW_HASH_KEY_SIZE);
+               } else {
+                       memcpy(bp->rss_hash_key, rxfh->key, HW_HASH_KEY_SIZE);
+                       bp->rss_hash_key_updated = true;
+               }
+       }
+       if (rxfh->indir) {
+               u32 i, pad, tbl_size = bnxt_get_rxfh_indir_size(bp->dev);
+               u16 *indir_tbl = bp->rss_indir_tbl;
+
+               if (rss_ctx)
+                       indir_tbl = rss_ctx->rss_indir_tbl;
+               for (i = 0; i < tbl_size; i++)
+                       indir_tbl[i] = rxfh->indir[i];
+               pad = bp->rss_indir_tbl_entries - tbl_size;
+               if (pad)
+                       memset(&bp->rss_indir_tbl[i], 0, pad * sizeof(u16));
+       }
+}
+
 static int bnxt_set_rxfh(struct net_device *dev,
                         struct ethtool_rxfh_param *rxfh,
                         struct netlink_ext_ack *extack)
@@ -1788,20 +1814,8 @@ static int bnxt_set_rxfh(struct net_device *dev,
        if (rxfh->hfunc && rxfh->hfunc != ETH_RSS_HASH_TOP)
                return -EOPNOTSUPP;
 
-       if (rxfh->key) {
-               memcpy(bp->rss_hash_key, rxfh->key, HW_HASH_KEY_SIZE);
-               bp->rss_hash_key_updated = true;
-       }
-
-       if (rxfh->indir) {
-               u32 i, pad, tbl_size = bnxt_get_rxfh_indir_size(dev);
+       bnxt_modify_rss(bp, NULL, rxfh);
 
-               for (i = 0; i < tbl_size; i++)
-                       bp->rss_indir_tbl[i] = rxfh->indir[i];
-               pad = bp->rss_indir_tbl_entries - tbl_size;
-               if (pad)
-                       memset(&bp->rss_indir_tbl[i], 0, pad * sizeof(u16));
-       }
        bnxt_clear_usr_fltrs(bp, false);
        if (netif_running(bp->dev)) {
                bnxt_close_nic(bp, false, false);