sfc: ethtool: Refactor to remove fallthrough comments in case blocks
authorJoe Perches <joe@perches.com>
Wed, 11 Mar 2020 02:41:41 +0000 (19:41 -0700)
committerDavid S. Miller <davem@davemloft.net>
Thu, 12 Mar 2020 18:29:28 +0000 (11:29 -0700)
Converting fallthrough comments to fallthrough; creates warnings
in this code when compiled with gcc.

This code is overly complicated and reads rather better with a
little refactoring and no fallthrough uses at all.

Remove the fallthrough comments and simplify the written source
code while reducing the object code size.

Consolidate duplicated switch/case blocks for IPV4 and IPV6.

defconfig x86-64 with sfc:

$ size drivers/net/ethernet/sfc/ethtool.o*
   text    data     bss     dec     hex filename
  10055      12       0   10067    2753 drivers/net/ethernet/sfc/ethtool.o.new
  10135      12       0   10147    27a3 drivers/net/ethernet/sfc/ethtool.o.old

Signed-off-by: Joe Perches <joe@perches.com>
Acked-by: Martin Habets <mhabets@solarflare.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/sfc/ethtool.c

index 993b576..9a637cd 100644 (file)
@@ -582,6 +582,7 @@ efx_ethtool_get_rxnfc(struct net_device *net_dev,
 
        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) {
@@ -591,35 +592,38 @@ efx_ethtool_get_rxnfc(struct net_device *net_dev,
                                goto out_unlock;
                        }
                }
-               info->data = 0;
+
+               data = 0;
                if (!efx_rss_active(ctx)) /* No RSS */
-                       goto out_unlock;
+                       goto out_setdata_unlock;
+
                switch (info->flow_type & ~FLOW_RSS) {
                case UDP_V4_FLOW:
-                       if (ctx->rx_hash_udp_4tuple)
-                               /* fall through */
-               case TCP_V4_FLOW:
-                               info->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
-                       /* fall through */
-               case SCTP_V4_FLOW:
-               case AH_ESP_V4_FLOW:
-               case IPV4_FLOW:
-                       info->data |= RXH_IP_SRC | RXH_IP_DST;
-                       break;
                case UDP_V6_FLOW:
                        if (ctx->rx_hash_udp_4tuple)
-                               /* fall through */
+                               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:
-                               info->data |= RXH_L4_B_0_1 | RXH_L4_B_2_3;
-                       /* fall through */
+                       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:
-                       info->data |= RXH_IP_SRC | RXH_IP_DST;
+                       data = RXH_IP_SRC | RXH_IP_DST;
                        break;
                default:
                        break;
                }
+out_setdata_unlock:
+               info->data = data;
 out_unlock:
                mutex_unlock(&efx->rss_lock);
                return rc;