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

idpf: convert vport state to bitmap

Convert vport state to a bitmap and remove the DOWN state which is
redundant in the existing logic. There are no functional changes aside
from the use of bitwise operations when setting and checking the states.
Removed the double underscore to be consistent with the naming of other
bitmaps in the header and renamed current_state to vport_is_up to match
the meaning of the new variable.

Reviewed-by: Przemek Kitszel <przemyslaw.kitszel@intel.com>
Reviewed-by: Aleksandr Loktionov <aleksandr.loktionov@intel.com>
Reviewed-by: Chittim Madhu <madhu.chittim@intel.com>
Signed-off-by: Emil Tantilov <emil.s.tantilov@intel.com>
Tested-by: Samuel Salin <Samuel.salin@intel.com>
Signed-off-by: Tony Nguyen <anthony.l.nguyen@intel.com>
Link: https://patch.msgid.link/20251125223632.1857532-6-anthony.l.nguyen@intel.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>

authored by

Emil Tantilov and committed by
Jakub Kicinski
8dd72ebc 1645759a

+28 -30
+5 -7
drivers/net/ethernet/intel/idpf/idpf.h
··· 131 131 132 132 /** 133 133 * enum idpf_vport_state - Current vport state 134 - * @__IDPF_VPORT_DOWN: Vport is down 135 - * @__IDPF_VPORT_UP: Vport is up 136 - * @__IDPF_VPORT_STATE_LAST: Must be last, number of states 134 + * @IDPF_VPORT_UP: Vport is up 135 + * @IDPF_VPORT_STATE_NBITS: Must be last, number of states 137 136 */ 138 137 enum idpf_vport_state { 139 - __IDPF_VPORT_DOWN, 140 - __IDPF_VPORT_UP, 141 - __IDPF_VPORT_STATE_LAST, 138 + IDPF_VPORT_UP, 139 + IDPF_VPORT_STATE_NBITS 142 140 }; 143 141 144 142 /** ··· 160 162 u16 vport_idx; 161 163 u16 max_tx_hdr_size; 162 164 u16 tx_max_bufs; 163 - enum idpf_vport_state state; 165 + DECLARE_BITMAP(state, IDPF_VPORT_STATE_NBITS); 164 166 struct rtnl_link_stats64 netstats; 165 167 spinlock_t stats_lock; 166 168 };
+6 -6
drivers/net/ethernet/intel/idpf/idpf_ethtool.c
··· 402 402 } 403 403 404 404 rss_data = &adapter->vport_config[np->vport_idx]->user_config.rss_data; 405 - if (np->state != __IDPF_VPORT_UP) 405 + if (!test_bit(IDPF_VPORT_UP, np->state)) 406 406 goto unlock_mutex; 407 407 408 408 rxfh->hfunc = ETH_RSS_HASH_TOP; ··· 452 452 } 453 453 454 454 rss_data = &adapter->vport_config[vport->idx]->user_config.rss_data; 455 - if (np->state != __IDPF_VPORT_UP) 455 + if (!test_bit(IDPF_VPORT_UP, np->state)) 456 456 goto unlock_mutex; 457 457 458 458 if (rxfh->hfunc != ETH_RSS_HASH_NO_CHANGE && ··· 1183 1183 idpf_vport_ctrl_lock(netdev); 1184 1184 vport = idpf_netdev_to_vport(netdev); 1185 1185 1186 - if (np->state != __IDPF_VPORT_UP) { 1186 + if (!test_bit(IDPF_VPORT_UP, np->state)) { 1187 1187 idpf_vport_ctrl_unlock(netdev); 1188 1188 1189 1189 return; ··· 1335 1335 idpf_vport_ctrl_lock(netdev); 1336 1336 vport = idpf_netdev_to_vport(netdev); 1337 1337 1338 - if (np->state != __IDPF_VPORT_UP) 1338 + if (!test_bit(IDPF_VPORT_UP, np->state)) 1339 1339 goto unlock_mutex; 1340 1340 1341 1341 if (q_num >= vport->num_rxq && q_num >= vport->num_txq) { ··· 1523 1523 idpf_vport_ctrl_lock(netdev); 1524 1524 vport = idpf_netdev_to_vport(netdev); 1525 1525 1526 - if (np->state != __IDPF_VPORT_UP) 1526 + if (!test_bit(IDPF_VPORT_UP, np->state)) 1527 1527 goto unlock_mutex; 1528 1528 1529 1529 for (i = 0; i < vport->num_txq; i++) { ··· 1726 1726 ts_stats->err = u64_stats_read(&vport->tstamp_stats.discarded); 1727 1727 } while (u64_stats_fetch_retry(&vport->tstamp_stats.stats_sync, start)); 1728 1728 1729 - if (np->state != __IDPF_VPORT_UP) 1729 + if (!test_bit(IDPF_VPORT_UP, np->state)) 1730 1730 goto exit; 1731 1731 1732 1732 for (u16 i = 0; i < vport->num_txq_grp; i++) {
+12 -12
drivers/net/ethernet/intel/idpf/idpf_lib.c
··· 519 519 } 520 520 spin_unlock_bh(&vport_config->mac_filter_list_lock); 521 521 522 - if (np->state == __IDPF_VPORT_UP) { 522 + if (test_bit(IDPF_VPORT_UP, np->state)) { 523 523 int err; 524 524 525 525 err = idpf_add_del_mac_filters(vport, np, false, async); ··· 590 590 if (err) 591 591 return err; 592 592 593 - if (np->state == __IDPF_VPORT_UP) 593 + if (test_bit(IDPF_VPORT_UP, np->state)) 594 594 err = idpf_add_del_mac_filters(vport, np, true, async); 595 595 596 596 return err; ··· 894 894 { 895 895 struct idpf_netdev_priv *np = netdev_priv(vport->netdev); 896 896 897 - if (np->state <= __IDPF_VPORT_DOWN) 897 + if (!test_bit(IDPF_VPORT_UP, np->state)) 898 898 return; 899 899 900 900 if (rtnl) ··· 921 921 idpf_xdp_rxq_info_deinit_all(vport); 922 922 idpf_vport_queues_rel(vport); 923 923 idpf_vport_intr_rel(vport); 924 - np->state = __IDPF_VPORT_DOWN; 924 + clear_bit(IDPF_VPORT_UP, np->state); 925 925 926 926 if (rtnl) 927 927 rtnl_unlock(); ··· 1345 1345 netif_tx_start_all_queues(vport->netdev); 1346 1346 } 1347 1347 1348 - np->state = __IDPF_VPORT_UP; 1348 + set_bit(IDPF_VPORT_UP, np->state); 1349 1349 1350 1350 return 0; 1351 1351 } ··· 1391 1391 struct idpf_vport_config *vport_config; 1392 1392 int err; 1393 1393 1394 - if (np->state != __IDPF_VPORT_DOWN) 1394 + if (test_bit(IDPF_VPORT_UP, np->state)) 1395 1395 return -EBUSY; 1396 1396 1397 1397 if (rtnl) ··· 1602 1602 1603 1603 /* Once state is put into DOWN, driver is ready for dev_open */ 1604 1604 np = netdev_priv(vport->netdev); 1605 - np->state = __IDPF_VPORT_DOWN; 1605 + clear_bit(IDPF_VPORT_UP, np->state); 1606 1606 if (test_and_clear_bit(IDPF_VPORT_UP_REQUESTED, vport_config->flags)) 1607 1607 idpf_vport_open(vport, true); 1608 1608 ··· 1801 1801 continue; 1802 1802 1803 1803 np = netdev_priv(adapter->netdevs[i]); 1804 - if (np->state == __IDPF_VPORT_UP) 1804 + if (test_bit(IDPF_VPORT_UP, np->state)) 1805 1805 set_bit(IDPF_VPORT_UP_REQUESTED, 1806 1806 adapter->vport_config[i]->flags); 1807 1807 } ··· 1939 1939 enum idpf_vport_reset_cause reset_cause) 1940 1940 { 1941 1941 struct idpf_netdev_priv *np = netdev_priv(vport->netdev); 1942 - enum idpf_vport_state current_state = np->state; 1942 + bool vport_is_up = test_bit(IDPF_VPORT_UP, np->state); 1943 1943 struct idpf_adapter *adapter = vport->adapter; 1944 1944 struct idpf_vport *new_vport; 1945 1945 int err; ··· 1990 1990 goto free_vport; 1991 1991 } 1992 1992 1993 - if (current_state <= __IDPF_VPORT_DOWN) { 1993 + if (!vport_is_up) { 1994 1994 idpf_send_delete_queues_msg(vport); 1995 1995 } else { 1996 1996 set_bit(IDPF_VPORT_DEL_QUEUES, vport->flags); ··· 2023 2023 if (err) 2024 2024 goto err_open; 2025 2025 2026 - if (current_state == __IDPF_VPORT_UP) 2026 + if (vport_is_up) 2027 2027 err = idpf_vport_open(vport, false); 2028 2028 2029 2029 goto free_vport; ··· 2033 2033 vport->num_rxq, vport->num_bufq); 2034 2034 2035 2035 err_open: 2036 - if (current_state == __IDPF_VPORT_UP) 2036 + if (vport_is_up) 2037 2037 idpf_vport_open(vport, false); 2038 2038 2039 2039 free_vport:
+1 -1
drivers/net/ethernet/intel/idpf/idpf_singleq_txrx.c
··· 570 570 np = netdev_priv(tx_q->netdev); 571 571 nq = netdev_get_tx_queue(tx_q->netdev, tx_q->idx); 572 572 573 - dont_wake = np->state != __IDPF_VPORT_UP || 573 + dont_wake = !test_bit(IDPF_VPORT_UP, np->state) || 574 574 !netif_carrier_ok(tx_q->netdev); 575 575 __netif_txq_completed_wake(nq, ss.packets, ss.bytes, 576 576 IDPF_DESC_UNUSED(tx_q), IDPF_TX_WAKE_THRESH,
+1 -1
drivers/net/ethernet/intel/idpf/idpf_txrx.c
··· 2275 2275 /* Update BQL */ 2276 2276 nq = netdev_get_tx_queue(tx_q->netdev, tx_q->idx); 2277 2277 2278 - dont_wake = !complq_ok || np->state != __IDPF_VPORT_UP || 2278 + dont_wake = !complq_ok || !test_bit(IDPF_VPORT_UP, np->state) || 2279 2279 !netif_carrier_ok(tx_q->netdev); 2280 2280 /* Check if the TXQ needs to and can be restarted */ 2281 2281 __netif_txq_completed_wake(nq, tx_q->cleaned_pkts, tx_q->cleaned_bytes,
+2 -2
drivers/net/ethernet/intel/idpf/idpf_virtchnl.c
··· 68 68 69 69 vport->link_up = v2e->link_status; 70 70 71 - if (np->state != __IDPF_VPORT_UP) 71 + if (!test_bit(IDPF_VPORT_UP, np->state)) 72 72 return; 73 73 74 74 if (vport->link_up) { ··· 2755 2755 2756 2756 2757 2757 /* Don't send get_stats message if the link is down */ 2758 - if (np->state <= __IDPF_VPORT_DOWN) 2758 + if (!test_bit(IDPF_VPORT_UP, np->state)) 2759 2759 return 0; 2760 2760 2761 2761 stats_msg.vport_id = cpu_to_le32(vport->vport_id);
+1 -1
drivers/net/ethernet/intel/idpf/xdp.c
··· 418 418 if (test_bit(IDPF_REMOVE_IN_PROG, vport->adapter->flags) || 419 419 !test_bit(IDPF_VPORT_REG_NETDEV, cfg->flags) || 420 420 !!vport->xdp_prog == !!prog) { 421 - if (np->state == __IDPF_VPORT_UP) 421 + if (test_bit(IDPF_VPORT_UP, np->state)) 422 422 idpf_xdp_copy_prog_to_rqs(vport, prog); 423 423 424 424 old = xchg(&vport->xdp_prog, prog);