]> www.infradead.org Git - users/jedix/linux-maple.git/commitdiff
sfc: siena: rip out rss-context dead code
authorEdward Cree <ecree.xilinx@gmail.com>
Wed, 4 Sep 2024 18:11:56 +0000 (19:11 +0100)
committerJakub Kicinski <kuba@kernel.org>
Sat, 7 Sep 2024 01:22:17 +0000 (18:22 -0700)
Siena hardware does not support custom RSS contexts, but when the
 driver was forked from sfc.ko, some of the plumbing for them was
 copied across from the common code.  Actually trying to use them
 would lead to EOPNOTSUPP as the relevant efx_nic_type methods were
 not populated.
Remove this dead code from the Siena driver.

Signed-off-by: Edward Cree <ecree.xilinx@gmail.com>
Reviewed-by: Simon Horman <horms@kernel.org>
Link: https://patch.msgid.link/20240904181156.1993666-1-edward.cree@amd.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/sfc/siena/efx_common.c
drivers/net/ethernet/sfc/siena/ethtool.c
drivers/net/ethernet/sfc/siena/ethtool_common.c
drivers/net/ethernet/sfc/siena/net_driver.h
drivers/net/ethernet/sfc/siena/rx_common.c
drivers/net/ethernet/sfc/siena/rx_common.h

index cf195162e27087422cef9670b9e206e1d7a513be..a0966f8796645238feeab27da6f569b11d7a468b 100644 (file)
@@ -725,7 +725,6 @@ void efx_siena_reset_down(struct efx_nic *efx, enum reset_type method)
 
        mutex_lock(&efx->mac_lock);
        down_write(&efx->filter_sem);
-       mutex_lock(&efx->rss_lock);
        efx->type->fini(efx);
 }
 
@@ -786,9 +785,6 @@ int efx_siena_reset_up(struct efx_nic *efx, enum reset_type method, bool ok)
                           " VFs may not function\n", rc);
 #endif
 
-       if (efx->type->rx_restore_rss_contexts)
-               efx->type->rx_restore_rss_contexts(efx);
-       mutex_unlock(&efx->rss_lock);
        efx->type->filter_table_restore(efx);
        up_write(&efx->filter_sem);
        if (efx->type->sriov_reset)
@@ -806,7 +802,6 @@ int efx_siena_reset_up(struct efx_nic *efx, enum reset_type method, bool ok)
 fail:
        efx->port_initialized = false;
 
-       mutex_unlock(&efx->rss_lock);
        up_write(&efx->filter_sem);
        mutex_unlock(&efx->mac_lock);
 
@@ -1016,9 +1011,7 @@ int efx_siena_init_struct(struct efx_nic *efx,
                efx->type->rx_hash_offset - efx->type->rx_prefix_size;
        efx->rx_packet_ts_offset =
                efx->type->rx_ts_offset - efx->type->rx_prefix_size;
-       INIT_LIST_HEAD(&efx->rss_context.list);
        efx->rss_context.context_id = EFX_MCDI_RSS_CONTEXT_INVALID;
-       mutex_init(&efx->rss_lock);
        efx->vport_id = EVB_PORT_ID_ASSIGNED;
        spin_lock_init(&efx->stats_lock);
        efx->vi_stride = EFX_DEFAULT_VI_STRIDE;
index 4c182d4edfc29d5d8637e81241657536cdb45081..88ddc226b01245465c6a22ea1d04b2a388b965ed 100644 (file)
@@ -240,7 +240,6 @@ static int efx_ethtool_get_ts_info(struct net_device *net_dev,
 }
 
 const struct ethtool_ops efx_siena_ethtool_ops = {
-       .cap_rss_ctx_supported  = true,
        .supported_coalesce_params = ETHTOOL_COALESCE_USECS |
                                     ETHTOOL_COALESCE_USECS_IRQ |
                                     ETHTOOL_COALESCE_USE_ADAPTIVE_RX,
index 5f0a8127e967f7e1780412f2d0813eb39eeaef2a..075fef64de680ca25ac7d222ea33dad02b3bc51a 100644 (file)
@@ -820,27 +820,16 @@ int efx_siena_ethtool_get_rxnfc(struct net_device *net_dev,
                return 0;
 
        case ETHTOOL_GRXFH: {
-               struct efx_rss_context *ctx = &efx->rss_context;
                __u64 data;
 
-               mutex_lock(&efx->rss_lock);
-               if (info->flow_type & FLOW_RSS && info->rss_context) {
-                       ctx = efx_siena_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;
+               if (!efx_rss_active(&efx->rss_context)) /* No RSS */
+                       goto out_setdata;
 
-               switch (info->flow_type & ~FLOW_RSS) {
+               switch (info->flow_type) {
                case UDP_V4_FLOW:
                case UDP_V6_FLOW:
-                       if (ctx->rx_hash_udp_4tuple)
+                       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
@@ -862,10 +851,8 @@ int efx_siena_ethtool_get_rxnfc(struct net_device *net_dev,
                default:
                        break;
                }
-out_setdata_unlock:
+out_setdata:
                info->data = data;
-out_unlock:
-               mutex_unlock(&efx->rss_lock);
                return rc;
        }
 
@@ -1164,47 +1151,12 @@ u32 efx_siena_ethtool_get_rxfh_key_size(struct net_device *net_dev)
        return efx->type->rx_hash_key_size;
 }
 
-static int efx_siena_ethtool_get_rxfh_context(struct net_device *net_dev,
-                                             struct ethtool_rxfh_param *rxfh)
-{
-       struct efx_nic *efx = netdev_priv(net_dev);
-       struct efx_rss_context *ctx;
-       int rc = 0;
-
-       if (!efx->type->rx_pull_rss_context_config)
-               return -EOPNOTSUPP;
-
-       mutex_lock(&efx->rss_lock);
-       ctx = efx_siena_find_rss_context_entry(efx, rxfh->rss_context);
-       if (!ctx) {
-               rc = -ENOENT;
-               goto out_unlock;
-       }
-       rc = efx->type->rx_pull_rss_context_config(efx, ctx);
-       if (rc)
-               goto out_unlock;
-
-       rxfh->hfunc = ETH_RSS_HASH_TOP;
-       if (rxfh->indir)
-               memcpy(rxfh->indir, ctx->rx_indir_table,
-                      sizeof(ctx->rx_indir_table));
-       if (rxfh->key)
-               memcpy(rxfh->key, ctx->rx_hash_key,
-                      efx->type->rx_hash_key_size);
-out_unlock:
-       mutex_unlock(&efx->rss_lock);
-       return rc;
-}
-
 int efx_siena_ethtool_get_rxfh(struct net_device *net_dev,
                               struct ethtool_rxfh_param *rxfh)
 {
        struct efx_nic *efx = netdev_priv(net_dev);
        int rc;
 
-       if (rxfh->rss_context)
-               return efx_siena_ethtool_get_rxfh_context(net_dev, rxfh);
-
        rc = efx->type->rx_pull_rss_config(efx);
        if (rc)
                return rc;
@@ -1219,70 +1171,6 @@ int efx_siena_ethtool_get_rxfh(struct net_device *net_dev,
        return 0;
 }
 
-static int efx_siena_ethtool_set_rxfh_context(struct net_device *net_dev,
-                                             struct ethtool_rxfh_param *rxfh,
-                                             struct netlink_ext_ack *extack)
-{
-       struct efx_nic *efx = netdev_priv(net_dev);
-       u32 *rss_context = &rxfh->rss_context;
-       struct efx_rss_context *ctx;
-       u32 *indir = rxfh->indir;
-       bool allocated = false;
-       u8 *key = rxfh->key;
-       int rc;
-
-       if (!efx->type->rx_push_rss_context_config)
-               return -EOPNOTSUPP;
-
-       mutex_lock(&efx->rss_lock);
-
-       if (*rss_context == ETH_RXFH_CONTEXT_ALLOC) {
-               if (rxfh->rss_delete) {
-                       /* alloc + delete == Nothing to do */
-                       rc = -EINVAL;
-                       goto out_unlock;
-               }
-               ctx = efx_siena_alloc_rss_context_entry(efx);
-               if (!ctx) {
-                       rc = -ENOMEM;
-                       goto out_unlock;
-               }
-               ctx->context_id = EFX_MCDI_RSS_CONTEXT_INVALID;
-               /* Initialise indir table and key to defaults */
-               efx_siena_set_default_rx_indir_table(efx, ctx);
-               netdev_rss_key_fill(ctx->rx_hash_key, sizeof(ctx->rx_hash_key));
-               allocated = true;
-       } else {
-               ctx = efx_siena_find_rss_context_entry(efx, *rss_context);
-               if (!ctx) {
-                       rc = -ENOENT;
-                       goto out_unlock;
-               }
-       }
-
-       if (rxfh->rss_delete) {
-               /* delete this context */
-               rc = efx->type->rx_push_rss_context_config(efx, ctx, NULL, NULL);
-               if (!rc)
-                       efx_siena_free_rss_context_entry(ctx);
-               goto out_unlock;
-       }
-
-       if (!key)
-               key = ctx->rx_hash_key;
-       if (!indir)
-               indir = ctx->rx_indir_table;
-
-       rc = efx->type->rx_push_rss_context_config(efx, ctx, indir, key);
-       if (rc && allocated)
-               efx_siena_free_rss_context_entry(ctx);
-       else
-               *rss_context = ctx->user_id;
-out_unlock:
-       mutex_unlock(&efx->rss_lock);
-       return rc;
-}
-
 int efx_siena_ethtool_set_rxfh(struct net_device *net_dev,
                               struct ethtool_rxfh_param *rxfh,
                               struct netlink_ext_ack *extack)
@@ -1296,9 +1184,6 @@ int efx_siena_ethtool_set_rxfh(struct net_device *net_dev,
            rxfh->hfunc != ETH_RSS_HASH_TOP)
                return -EOPNOTSUPP;
 
-       if (rxfh->rss_context)
-               efx_siena_ethtool_set_rxfh_context(net_dev, rxfh, extack);
-
        if (!indir && !key)
                return 0;
 
index 94152f595acd3f4420d6109b0cb6d1dd0f6b52f8..3fa7c652ae9b7cabd42d377abe62fd3c5bdb5b1f 100644 (file)
@@ -707,20 +707,14 @@ struct vfdi_status;
 /* The reserved RSS context value */
 #define EFX_MCDI_RSS_CONTEXT_INVALID   0xffffffff
 /**
- * struct efx_rss_context - A user-defined RSS context for filtering
- * @list: node of linked list on which this struct is stored
- * @context_id: the RSS_CONTEXT_ID returned by MC firmware, or
- *     %EFX_MCDI_RSS_CONTEXT_INVALID if this context is not present on the NIC.
- *     For Siena, 0 if RSS is active, else %EFX_MCDI_RSS_CONTEXT_INVALID.
- * @user_id: the rss_context ID exposed to userspace over ethtool.
+ * struct efx_rss_context - An RSS context for filtering
+ * @context_id: 0 if RSS is active, else %EFX_MCDI_RSS_CONTEXT_INVALID.
  * @rx_hash_udp_4tuple: UDP 4-tuple hashing enabled
  * @rx_hash_key: Toeplitz hash key for this RSS context
  * @indir_table: Indirection table for this RSS context
  */
 struct efx_rss_context {
-       struct list_head list;
        u32 context_id;
-       u32 user_id;
        bool rx_hash_udp_4tuple;
        u8 rx_hash_key[40];
        u32 rx_indir_table[128];
@@ -851,9 +845,7 @@ enum efx_xdp_tx_queues_mode {
  * @rx_packet_ts_offset: Offset of timestamp from start of packet data
  *     (valid only if channel->sync_timestamps_enabled; always negative)
  * @rx_scatter: Scatter mode enabled for receives
- * @rss_context: Main RSS context.  Its @list member is the head of the list of
- *     RSS contexts created by user requests
- * @rss_lock: Protects custom RSS context software state in @rss_context.list
+ * @rss_context: Main RSS context
  * @vport_id: The function's vport ID, only relevant for PFs
  * @int_error_count: Number of internal errors seen recently
  * @int_error_expire: Time at which error count will be expired
@@ -1018,7 +1010,6 @@ struct efx_nic {
        int rx_packet_ts_offset;
        bool rx_scatter;
        struct efx_rss_context rss_context;
-       struct mutex rss_lock;
        u32 vport_id;
 
        unsigned int_error_count;
@@ -1220,10 +1211,6 @@ struct efx_udp_tunnel {
  * @tx_enqueue: Add an SKB to TX queue
  * @rx_push_rss_config: Write RSS hash key and indirection table to the NIC
  * @rx_pull_rss_config: Read RSS hash key and indirection table back from the NIC
- * @rx_push_rss_context_config: Write RSS hash key and indirection table for
- *     user RSS context to the NIC
- * @rx_pull_rss_context_config: Read RSS hash key and indirection table for user
- *     RSS context back from the NIC
  * @rx_probe: Allocate resources for RX queue
  * @rx_init: Initialise RX queue on the NIC
  * @rx_remove: Free resources for RX queue
@@ -1366,13 +1353,6 @@ struct efx_nic_type {
        int (*rx_push_rss_config)(struct efx_nic *efx, bool user,
                                  const u32 *rx_indir_table, const u8 *key);
        int (*rx_pull_rss_config)(struct efx_nic *efx);
-       int (*rx_push_rss_context_config)(struct efx_nic *efx,
-                                         struct efx_rss_context *ctx,
-                                         const u32 *rx_indir_table,
-                                         const u8 *key);
-       int (*rx_pull_rss_context_config)(struct efx_nic *efx,
-                                         struct efx_rss_context *ctx);
-       void (*rx_restore_rss_contexts)(struct efx_nic *efx);
        int (*rx_probe)(struct efx_rx_queue *rx_queue);
        void (*rx_init)(struct efx_rx_queue *rx_queue);
        void (*rx_remove)(struct efx_rx_queue *rx_queue);
index 219fb358a646d399dbd3c66cc34039f70bbd7341..082e35c6caaaed0a0f78db03ddd055c0764e197d 100644 (file)
@@ -558,62 +558,6 @@ efx_siena_rx_packet_gro(struct efx_channel *channel,
        napi_gro_frags(napi);
 }
 
-/* RSS contexts.  We're using linked lists and crappy O(n) algorithms, because
- * (a) this is an infrequent control-plane operation and (b) n is small (max 64)
- */
-struct efx_rss_context *efx_siena_alloc_rss_context_entry(struct efx_nic *efx)
-{
-       struct list_head *head = &efx->rss_context.list;
-       struct efx_rss_context *ctx, *new;
-       u32 id = 1; /* Don't use zero, that refers to the master RSS context */
-
-       WARN_ON(!mutex_is_locked(&efx->rss_lock));
-
-       /* Search for first gap in the numbering */
-       list_for_each_entry(ctx, head, list) {
-               if (ctx->user_id != id)
-                       break;
-               id++;
-               /* Check for wrap.  If this happens, we have nearly 2^32
-                * allocated RSS contexts, which seems unlikely.
-                */
-               if (WARN_ON_ONCE(!id))
-                       return NULL;
-       }
-
-       /* Create the new entry */
-       new = kmalloc(sizeof(*new), GFP_KERNEL);
-       if (!new)
-               return NULL;
-       new->context_id = EFX_MCDI_RSS_CONTEXT_INVALID;
-       new->rx_hash_udp_4tuple = false;
-
-       /* Insert the new entry into the gap */
-       new->user_id = id;
-       list_add_tail(&new->list, &ctx->list);
-       return new;
-}
-
-struct efx_rss_context *efx_siena_find_rss_context_entry(struct efx_nic *efx,
-                                                        u32 id)
-{
-       struct list_head *head = &efx->rss_context.list;
-       struct efx_rss_context *ctx;
-
-       WARN_ON(!mutex_is_locked(&efx->rss_lock));
-
-       list_for_each_entry(ctx, head, list)
-               if (ctx->user_id == id)
-                       return ctx;
-       return NULL;
-}
-
-void efx_siena_free_rss_context_entry(struct efx_rss_context *ctx)
-{
-       list_del(&ctx->list);
-       kfree(ctx);
-}
-
 void efx_siena_set_default_rx_indir_table(struct efx_nic *efx,
                                          struct efx_rss_context *ctx)
 {
index 6b37f83ecb30b8f4e951ff81bacd9c691bb4b066..f90a8320d3969afef336da620e63272004b66539 100644 (file)
@@ -78,10 +78,6 @@ efx_siena_rx_packet_gro(struct efx_channel *channel,
                        struct efx_rx_buffer *rx_buf,
                        unsigned int n_frags, u8 *eh, __wsum csum);
 
-struct efx_rss_context *efx_siena_alloc_rss_context_entry(struct efx_nic *efx);
-struct efx_rss_context *efx_siena_find_rss_context_entry(struct efx_nic *efx,
-                                                        u32 id);
-void efx_siena_free_rss_context_entry(struct efx_rss_context *ctx);
 void efx_siena_set_default_rx_indir_table(struct efx_nic *efx,
                                          struct efx_rss_context *ctx);