hc
2024-05-10 37f49e37ab4cb5d0bc4c60eb5c6d4dd57db767bb
kernel/drivers/net/ethernet/sfc/efx.c
....@@ -105,14 +105,6 @@
105105 static int efx_xdp_xmit(struct net_device *dev, int n, struct xdp_frame **xdpfs,
106106 u32 flags);
107107
108
-#define EFX_ASSERT_RESET_SERIALISED(efx) \
109
- do { \
110
- if ((efx->state == STATE_READY) || \
111
- (efx->state == STATE_RECOVERY) || \
112
- (efx->state == STATE_DISABLED)) \
113
- ASSERT_RTNL(); \
114
- } while (0)
115
-
116108 /**************************************************************************
117109 *
118110 * Port handling
....@@ -377,6 +369,8 @@
377369 if (rc)
378370 goto fail5;
379371
372
+ efx->state = STATE_NET_DOWN;
373
+
380374 return 0;
381375
382376 fail5:
....@@ -543,7 +537,9 @@
543537 efx_start_all(efx);
544538 if (efx->state == STATE_DISABLED || efx->reset_pending)
545539 netif_device_detach(efx->net_dev);
546
- efx_selftest_async_start(efx);
540
+ else
541
+ efx->state = STATE_NET_UP;
542
+
547543 return 0;
548544 }
549545
....@@ -721,8 +717,6 @@
721717 * already requested. If so, the NIC is probably hosed so we
722718 * abort.
723719 */
724
- efx->state = STATE_READY;
725
- smp_mb(); /* ensure we change state before checking reset_pending */
726720 if (efx->reset_pending) {
727721 netif_err(efx, probe, efx->net_dev,
728722 "aborting probe due to scheduled reset\n");
....@@ -749,6 +743,8 @@
749743 }
750744
751745 efx_associate(efx);
746
+
747
+ efx->state = STATE_NET_DOWN;
752748
753749 rtnl_unlock();
754750
....@@ -851,7 +847,7 @@
851847 /* Flush reset_work. It can no longer be scheduled since we
852848 * are not READY.
853849 */
854
- BUG_ON(efx->state == STATE_READY);
850
+ WARN_ON(efx_net_active(efx->state));
855851 efx_flush_reset_workqueue(efx);
856852
857853 efx_disable_interrupts(efx);
....@@ -1045,18 +1041,18 @@
10451041 }
10461042
10471043 /* Determine netdevice features */
1048
- net_dev->features |= (efx->type->offload_features | NETIF_F_SG |
1049
- NETIF_F_TSO | NETIF_F_RXCSUM | NETIF_F_RXALL);
1050
- if (efx->type->offload_features & (NETIF_F_IPV6_CSUM | NETIF_F_HW_CSUM))
1051
- net_dev->features |= NETIF_F_TSO6;
1052
- /* Check whether device supports TSO */
1053
- if (!efx->type->tso_versions || !efx->type->tso_versions(efx))
1054
- net_dev->features &= ~NETIF_F_ALL_TSO;
1044
+ net_dev->features |= efx->type->offload_features;
1045
+
1046
+ /* Add TSO features */
1047
+ if (efx->type->tso_versions && efx->type->tso_versions(efx))
1048
+ net_dev->features |= NETIF_F_TSO | NETIF_F_TSO6;
1049
+
10551050 /* Mask for features that also apply to VLAN devices */
10561051 net_dev->vlan_features |= (NETIF_F_HW_CSUM | NETIF_F_SG |
10571052 NETIF_F_HIGHDMA | NETIF_F_ALL_TSO |
10581053 NETIF_F_RXCSUM);
10591054
1055
+ /* Determine user configurable features */
10601056 net_dev->hw_features |= net_dev->features & ~efx->fixed_features;
10611057
10621058 /* Disable receiving frames with bad FCS, by default. */
....@@ -1196,13 +1192,13 @@
11961192
11971193 rtnl_lock();
11981194
1199
- if (efx->state != STATE_DISABLED) {
1200
- efx->state = STATE_UNINIT;
1201
-
1195
+ if (efx_net_active(efx->state)) {
12021196 efx_device_detach_sync(efx);
12031197
12041198 efx_stop_all(efx);
12051199 efx_disable_interrupts(efx);
1200
+
1201
+ efx->state = efx_freeze(efx->state);
12061202 }
12071203
12081204 rtnl_unlock();
....@@ -1217,7 +1213,7 @@
12171213
12181214 rtnl_lock();
12191215
1220
- if (efx->state != STATE_DISABLED) {
1216
+ if (efx_frozen(efx->state)) {
12211217 rc = efx_enable_interrupts(efx);
12221218 if (rc)
12231219 goto fail;
....@@ -1230,7 +1226,7 @@
12301226
12311227 efx_device_attach_if_not_resetting(efx);
12321228
1233
- efx->state = STATE_READY;
1229
+ efx->state = efx_thaw(efx->state);
12341230
12351231 efx->type->resume_wol(efx);
12361232 }