summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFlorian Westphal <fw@strlen.de>2019-04-01 10:42:14 -0400
committerDavid S. Miller <davem@davemloft.net>2019-04-01 21:35:02 -0400
commit6b16f9ee89b8d5709f24bc3ac89ae8b5452c0d7c (patch)
tree530d8b0729ab4d0222bdb17195927c9a47a1a4d6
parent97cdcf37b57e3f204be3000b9eab9686f38b4356 (diff)
net: move skb->xmit_more hint to softnet data
There are two reasons for this. First, the xmit_more flag conceptually doesn't fit into the skb, as xmit_more is not a property related to the skb. Its only a hint to the driver that the stack is about to transmit another packet immediately. Second, it was only done this way to not have to pass another argument to ndo_start_xmit(). We can place xmit_more in the softnet data, next to the device recursion. The recursion counter is already written to on each transmit. The "more" indicator is placed right next to it. Drivers can use the netdev_xmit_more() helper instead of skb->xmit_more to check the "more packets coming" hint. skb->xmit_more is retained (but always 0) to not cause build breakage. This change takes care of the simple s/skb->xmit_more/netdev_xmit_more()/ conversions. Remaining drivers are converted in the next patches. Suggested-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Florian Westphal <fw@strlen.de> Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r--drivers/net/ethernet/amazon/ena/ena_netdev.c2
-rw-r--r--drivers/net/ethernet/amd/xgbe/xgbe-dev.c2
-rw-r--r--drivers/net/ethernet/broadcom/bnxt/bnxt.c4
-rw-r--r--drivers/net/ethernet/broadcom/genet/bcmgenet.c2
-rw-r--r--drivers/net/ethernet/broadcom/tg3.c2
-rw-r--r--drivers/net/ethernet/cavium/liquidio/lio_main.c2
-rw-r--r--drivers/net/ethernet/cavium/liquidio/lio_vf_main.c2
-rw-r--r--drivers/net/ethernet/cisco/enic/enic_main.c2
-rw-r--r--drivers/net/ethernet/emulex/benet/be_main.c2
-rw-r--r--drivers/net/ethernet/huawei/hinic/hinic_tx.c2
-rw-r--r--drivers/net/ethernet/intel/e1000/e1000_main.c2
-rw-r--r--drivers/net/ethernet/intel/e1000e/netdev.c2
-rw-r--r--drivers/net/ethernet/intel/fm10k/fm10k_main.c2
-rw-r--r--drivers/net/ethernet/intel/i40e/i40e_txrx.c2
-rw-r--r--drivers/net/ethernet/intel/iavf/iavf_txrx.c2
-rw-r--r--drivers/net/ethernet/intel/ice/ice_txrx.c2
-rw-r--r--drivers/net/ethernet/intel/igb/igb_main.c2
-rw-r--r--drivers/net/ethernet/intel/igc/igc_main.c2
-rw-r--r--drivers/net/ethernet/intel/ixgbe/ixgbe_main.c2
-rw-r--r--drivers/net/ethernet/marvell/mvneta.c2
-rw-r--r--drivers/net/ethernet/mediatek/mtk_eth_soc.c3
-rw-r--r--drivers/net/ethernet/netronome/nfp/nfp_net_common.c2
-rw-r--r--drivers/net/ethernet/qlogic/qede/qede_fp.c4
-rw-r--r--drivers/net/ethernet/rdc/r6040.c2
-rw-r--r--drivers/net/ethernet/synopsys/dwc-xlgmac-hw.c2
-rw-r--r--drivers/net/hyperv/netvsc.c2
-rw-r--r--drivers/net/virtio_net.c2
-rw-r--r--drivers/staging/mt7621-eth/mtk_eth_soc.c6
-rw-r--r--include/linux/netdevice.h2
29 files changed, 35 insertions, 32 deletions
diff --git a/drivers/net/ethernet/amazon/ena/ena_netdev.c b/drivers/net/ethernet/amazon/ena/ena_netdev.c
index 71c8cac6e44e..7e40d14682f7 100644
--- a/drivers/net/ethernet/amazon/ena/ena_netdev.c
+++ b/drivers/net/ethernet/amazon/ena/ena_netdev.c
@@ -2236,7 +2236,7 @@ static netdev_tx_t ena_start_xmit(struct sk_buff *skb, struct net_device *dev)
2236 } 2236 }
2237 } 2237 }
2238 2238
2239 if (netif_xmit_stopped(txq) || !skb->xmit_more) { 2239 if (netif_xmit_stopped(txq) || !netdev_xmit_more()) {
2240 /* trigger the dma engine. ena_com_write_sq_doorbell() 2240 /* trigger the dma engine. ena_com_write_sq_doorbell()
2241 * has a mb 2241 * has a mb
2242 */ 2242 */
diff --git a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
index 4666084eda16..d5fd49dd25f3 100644
--- a/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
+++ b/drivers/net/ethernet/amd/xgbe/xgbe-dev.c
@@ -1887,7 +1887,7 @@ static void xgbe_dev_xmit(struct xgbe_channel *channel)
1887 smp_wmb(); 1887 smp_wmb();
1888 1888
1889 ring->cur = cur_index + 1; 1889 ring->cur = cur_index + 1;
1890 if (!packet->skb->xmit_more || 1890 if (!netdev_xmit_more() ||
1891 netif_xmit_stopped(netdev_get_tx_queue(pdata->netdev, 1891 netif_xmit_stopped(netdev_get_tx_queue(pdata->netdev,
1892 channel->queue_index))) 1892 channel->queue_index)))
1893 xgbe_tx_start_xmit(channel, ring); 1893 xgbe_tx_start_xmit(channel, ring);
diff --git a/drivers/net/ethernet/broadcom/bnxt/bnxt.c b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
index 35e34e23ba33..d22691403d28 100644
--- a/drivers/net/ethernet/broadcom/bnxt/bnxt.c
+++ b/drivers/net/ethernet/broadcom/bnxt/bnxt.c
@@ -551,7 +551,7 @@ normal_tx:
551 prod = NEXT_TX(prod); 551 prod = NEXT_TX(prod);
552 txr->tx_prod = prod; 552 txr->tx_prod = prod;
553 553
554 if (!skb->xmit_more || netif_xmit_stopped(txq)) 554 if (!netdev_xmit_more() || netif_xmit_stopped(txq))
555 bnxt_db_write(bp, &txr->tx_db, prod); 555 bnxt_db_write(bp, &txr->tx_db, prod);
556 556
557tx_done: 557tx_done:
@@ -559,7 +559,7 @@ tx_done:
559 mmiowb(); 559 mmiowb();
560 560
561 if (unlikely(bnxt_tx_avail(bp, txr) <= MAX_SKB_FRAGS + 1)) { 561 if (unlikely(bnxt_tx_avail(bp, txr) <= MAX_SKB_FRAGS + 1)) {
562 if (skb->xmit_more && !tx_buf->is_push) 562 if (netdev_xmit_more() && !tx_buf->is_push)
563 bnxt_db_write(bp, &txr->tx_db, prod); 563 bnxt_db_write(bp, &txr->tx_db, prod);
564 564
565 netif_tx_stop_queue(txq); 565 netif_tx_stop_queue(txq);
diff --git a/drivers/net/ethernet/broadcom/genet/bcmgenet.c b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
index 983245c0867c..4fd973571e4c 100644
--- a/drivers/net/ethernet/broadcom/genet/bcmgenet.c
+++ b/drivers/net/ethernet/broadcom/genet/bcmgenet.c
@@ -1665,7 +1665,7 @@ static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev)
1665 if (ring->free_bds <= (MAX_SKB_FRAGS + 1)) 1665 if (ring->free_bds <= (MAX_SKB_FRAGS + 1))
1666 netif_tx_stop_queue(txq); 1666 netif_tx_stop_queue(txq);
1667 1667
1668 if (!skb->xmit_more || netif_xmit_stopped(txq)) 1668 if (!netdev_xmit_more() || netif_xmit_stopped(txq))
1669 /* Packets are ready, update producer index */ 1669 /* Packets are ready, update producer index */
1670 bcmgenet_tdma_ring_writel(priv, ring->index, 1670 bcmgenet_tdma_ring_writel(priv, ring->index,
1671 ring->prod_index, TDMA_PROD_INDEX); 1671 ring->prod_index, TDMA_PROD_INDEX);
diff --git a/drivers/net/ethernet/broadcom/tg3.c b/drivers/net/ethernet/broadcom/tg3.c
index 328373e0578f..45ccadee02af 100644
--- a/drivers/net/ethernet/broadcom/tg3.c
+++ b/drivers/net/ethernet/broadcom/tg3.c
@@ -8156,7 +8156,7 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
8156 netif_tx_wake_queue(txq); 8156 netif_tx_wake_queue(txq);
8157 } 8157 }
8158 8158
8159 if (!skb->xmit_more || netif_xmit_stopped(txq)) { 8159 if (!netdev_xmit_more() || netif_xmit_stopped(txq)) {
8160 /* Packets are ready, update Tx producer idx on card. */ 8160 /* Packets are ready, update Tx producer idx on card. */
8161 tw32_tx_mbox(tnapi->prodmbox, entry); 8161 tw32_tx_mbox(tnapi->prodmbox, entry);
8162 mmiowb(); 8162 mmiowb();
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_main.c b/drivers/net/ethernet/cavium/liquidio/lio_main.c
index fb6f813cff65..eab805579f96 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_main.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_main.c
@@ -2522,7 +2522,7 @@ static netdev_tx_t liquidio_xmit(struct sk_buff *skb, struct net_device *netdev)
2522 irh->vlan = skb_vlan_tag_get(skb) & 0xfff; 2522 irh->vlan = skb_vlan_tag_get(skb) & 0xfff;
2523 } 2523 }
2524 2524
2525 xmit_more = skb->xmit_more; 2525 xmit_more = netdev_xmit_more();
2526 2526
2527 if (unlikely(cmdsetup.s.timestamp)) 2527 if (unlikely(cmdsetup.s.timestamp))
2528 status = send_nic_timestamp_pkt(oct, &ndata, finfo, xmit_more); 2528 status = send_nic_timestamp_pkt(oct, &ndata, finfo, xmit_more);
diff --git a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
index 54b245797d2e..db0b90555acb 100644
--- a/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
+++ b/drivers/net/ethernet/cavium/liquidio/lio_vf_main.c
@@ -1585,7 +1585,7 @@ static netdev_tx_t liquidio_xmit(struct sk_buff *skb, struct net_device *netdev)
1585 irh->vlan = skb_vlan_tag_get(skb) & VLAN_VID_MASK; 1585 irh->vlan = skb_vlan_tag_get(skb) & VLAN_VID_MASK;
1586 } 1586 }
1587 1587
1588 xmit_more = skb->xmit_more; 1588 xmit_more = netdev_xmit_more();
1589 1589
1590 if (unlikely(cmdsetup.s.timestamp)) 1590 if (unlikely(cmdsetup.s.timestamp))
1591 status = send_nic_timestamp_pkt(oct, &ndata, finfo, xmit_more); 1591 status = send_nic_timestamp_pkt(oct, &ndata, finfo, xmit_more);
diff --git a/drivers/net/ethernet/cisco/enic/enic_main.c b/drivers/net/ethernet/cisco/enic/enic_main.c
index 733d9172425b..acb2856936d2 100644
--- a/drivers/net/ethernet/cisco/enic/enic_main.c
+++ b/drivers/net/ethernet/cisco/enic/enic_main.c
@@ -897,7 +897,7 @@ static netdev_tx_t enic_hard_start_xmit(struct sk_buff *skb,
897 if (vnic_wq_desc_avail(wq) < MAX_SKB_FRAGS + ENIC_DESC_MAX_SPLITS) 897 if (vnic_wq_desc_avail(wq) < MAX_SKB_FRAGS + ENIC_DESC_MAX_SPLITS)
898 netif_tx_stop_queue(txq); 898 netif_tx_stop_queue(txq);
899 skb_tx_timestamp(skb); 899 skb_tx_timestamp(skb);
900 if (!skb->xmit_more || netif_xmit_stopped(txq)) 900 if (!netdev_xmit_more() || netif_xmit_stopped(txq))
901 vnic_wq_doorbell(wq); 901 vnic_wq_doorbell(wq);
902 902
903 spin_unlock(&enic->wq_lock[txq_map]); 903 spin_unlock(&enic->wq_lock[txq_map]);
diff --git a/drivers/net/ethernet/emulex/benet/be_main.c b/drivers/net/ethernet/emulex/benet/be_main.c
index 3c7c04406a2b..e2f9fbced174 100644
--- a/drivers/net/ethernet/emulex/benet/be_main.c
+++ b/drivers/net/ethernet/emulex/benet/be_main.c
@@ -1376,7 +1376,7 @@ static netdev_tx_t be_xmit(struct sk_buff *skb, struct net_device *netdev)
1376 u16 q_idx = skb_get_queue_mapping(skb); 1376 u16 q_idx = skb_get_queue_mapping(skb);
1377 struct be_tx_obj *txo = &adapter->tx_obj[q_idx]; 1377 struct be_tx_obj *txo = &adapter->tx_obj[q_idx];
1378 struct be_wrb_params wrb_params = { 0 }; 1378 struct be_wrb_params wrb_params = { 0 };
1379 bool flush = !skb->xmit_more; 1379 bool flush = !netdev_xmit_more();
1380 u16 wrb_cnt; 1380 u16 wrb_cnt;
1381 1381
1382 skb = be_xmit_workarounds(adapter, skb, &wrb_params); 1382 skb = be_xmit_workarounds(adapter, skb, &wrb_params);
diff --git a/drivers/net/ethernet/huawei/hinic/hinic_tx.c b/drivers/net/ethernet/huawei/hinic/hinic_tx.c
index e17bf33eba0c..0fbe8046824b 100644
--- a/drivers/net/ethernet/huawei/hinic/hinic_tx.c
+++ b/drivers/net/ethernet/huawei/hinic/hinic_tx.c
@@ -518,7 +518,7 @@ process_sq_wqe:
518 518
519flush_skbs: 519flush_skbs:
520 netdev_txq = netdev_get_tx_queue(netdev, q_id); 520 netdev_txq = netdev_get_tx_queue(netdev, q_id);
521 if ((!skb->xmit_more) || (netif_xmit_stopped(netdev_txq))) 521 if ((!netdev_xmit_more()) || (netif_xmit_stopped(netdev_txq)))
522 hinic_sq_write_db(txq->sq, prod_idx, wqe_size, 0); 522 hinic_sq_write_db(txq->sq, prod_idx, wqe_size, 0);
523 523
524 return err; 524 return err;
diff --git a/drivers/net/ethernet/intel/e1000/e1000_main.c b/drivers/net/ethernet/intel/e1000/e1000_main.c
index a7c76732849f..6f72ab139fd9 100644
--- a/drivers/net/ethernet/intel/e1000/e1000_main.c
+++ b/drivers/net/ethernet/intel/e1000/e1000_main.c
@@ -3267,7 +3267,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
3267 /* Make sure there is space in the ring for the next send. */ 3267 /* Make sure there is space in the ring for the next send. */
3268 e1000_maybe_stop_tx(netdev, tx_ring, desc_needed); 3268 e1000_maybe_stop_tx(netdev, tx_ring, desc_needed);
3269 3269
3270 if (!skb->xmit_more || 3270 if (!netdev_xmit_more() ||
3271 netif_xmit_stopped(netdev_get_tx_queue(netdev, 0))) { 3271 netif_xmit_stopped(netdev_get_tx_queue(netdev, 0))) {
3272 writel(tx_ring->next_to_use, hw->hw_addr + tx_ring->tdt); 3272 writel(tx_ring->next_to_use, hw->hw_addr + tx_ring->tdt);
3273 /* we need this if more than one processor can write to 3273 /* we need this if more than one processor can write to
diff --git a/drivers/net/ethernet/intel/e1000e/netdev.c b/drivers/net/ethernet/intel/e1000e/netdev.c
index 745c1242a2d9..a8fa4a1628f5 100644
--- a/drivers/net/ethernet/intel/e1000e/netdev.c
+++ b/drivers/net/ethernet/intel/e1000e/netdev.c
@@ -5897,7 +5897,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
5897 DIV_ROUND_UP(PAGE_SIZE, 5897 DIV_ROUND_UP(PAGE_SIZE,
5898 adapter->tx_fifo_limit) + 2)); 5898 adapter->tx_fifo_limit) + 2));
5899 5899
5900 if (!skb->xmit_more || 5900 if (!netdev_xmit_more() ||
5901 netif_xmit_stopped(netdev_get_tx_queue(netdev, 0))) { 5901 netif_xmit_stopped(netdev_get_tx_queue(netdev, 0))) {
5902 if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA) 5902 if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA)
5903 e1000e_update_tdt_wa(tx_ring, 5903 e1000e_update_tdt_wa(tx_ring,
diff --git a/drivers/net/ethernet/intel/fm10k/fm10k_main.c b/drivers/net/ethernet/intel/fm10k/fm10k_main.c
index 5a0419421511..e2fa112bed9a 100644
--- a/drivers/net/ethernet/intel/fm10k/fm10k_main.c
+++ b/drivers/net/ethernet/intel/fm10k/fm10k_main.c
@@ -1035,7 +1035,7 @@ static void fm10k_tx_map(struct fm10k_ring *tx_ring,
1035 fm10k_maybe_stop_tx(tx_ring, DESC_NEEDED); 1035 fm10k_maybe_stop_tx(tx_ring, DESC_NEEDED);
1036 1036
1037 /* notify HW of packet */ 1037 /* notify HW of packet */
1038 if (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) { 1038 if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
1039 writel(i, tx_ring->tail); 1039 writel(i, tx_ring->tail);
1040 1040
1041 /* we need this if more than one processor can write to our tail 1041 /* we need this if more than one processor can write to our tail
diff --git a/drivers/net/ethernet/intel/i40e/i40e_txrx.c b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
index 6c97667d20ef..1a95223c9f99 100644
--- a/drivers/net/ethernet/intel/i40e/i40e_txrx.c
+++ b/drivers/net/ethernet/intel/i40e/i40e_txrx.c
@@ -3469,7 +3469,7 @@ static inline int i40e_tx_map(struct i40e_ring *tx_ring, struct sk_buff *skb,
3469 first->next_to_watch = tx_desc; 3469 first->next_to_watch = tx_desc;
3470 3470
3471 /* notify HW of packet */ 3471 /* notify HW of packet */
3472 if (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) { 3472 if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
3473 writel(i, tx_ring->tail); 3473 writel(i, tx_ring->tail);
3474 3474
3475 /* we need this if more than one processor can write to our tail 3475 /* we need this if more than one processor can write to our tail
diff --git a/drivers/net/ethernet/intel/iavf/iavf_txrx.c b/drivers/net/ethernet/intel/iavf/iavf_txrx.c
index 9b4d7cec2e18..b64187753ad6 100644
--- a/drivers/net/ethernet/intel/iavf/iavf_txrx.c
+++ b/drivers/net/ethernet/intel/iavf/iavf_txrx.c
@@ -2358,7 +2358,7 @@ static inline void iavf_tx_map(struct iavf_ring *tx_ring, struct sk_buff *skb,
2358 first->next_to_watch = tx_desc; 2358 first->next_to_watch = tx_desc;
2359 2359
2360 /* notify HW of packet */ 2360 /* notify HW of packet */
2361 if (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) { 2361 if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
2362 writel(i, tx_ring->tail); 2362 writel(i, tx_ring->tail);
2363 2363
2364 /* we need this if more than one processor can write to our tail 2364 /* we need this if more than one processor can write to our tail
diff --git a/drivers/net/ethernet/intel/ice/ice_txrx.c b/drivers/net/ethernet/intel/ice/ice_txrx.c
index f2462799154a..a6f7b7feaf3c 100644
--- a/drivers/net/ethernet/intel/ice/ice_txrx.c
+++ b/drivers/net/ethernet/intel/ice/ice_txrx.c
@@ -1646,7 +1646,7 @@ ice_tx_map(struct ice_ring *tx_ring, struct ice_tx_buf *first,
1646 ice_maybe_stop_tx(tx_ring, DESC_NEEDED); 1646 ice_maybe_stop_tx(tx_ring, DESC_NEEDED);
1647 1647
1648 /* notify HW of packet */ 1648 /* notify HW of packet */
1649 if (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) { 1649 if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
1650 writel(i, tx_ring->tail); 1650 writel(i, tx_ring->tail);
1651 1651
1652 /* we need this if more than one processor can write to our tail 1652 /* we need this if more than one processor can write to our tail
diff --git a/drivers/net/ethernet/intel/igb/igb_main.c b/drivers/net/ethernet/intel/igb/igb_main.c
index bea7175d171b..32d61d5a2706 100644
--- a/drivers/net/ethernet/intel/igb/igb_main.c
+++ b/drivers/net/ethernet/intel/igb/igb_main.c
@@ -6029,7 +6029,7 @@ static int igb_tx_map(struct igb_ring *tx_ring,
6029 /* Make sure there is space in the ring for the next send. */ 6029 /* Make sure there is space in the ring for the next send. */
6030 igb_maybe_stop_tx(tx_ring, DESC_NEEDED); 6030 igb_maybe_stop_tx(tx_ring, DESC_NEEDED);
6031 6031
6032 if (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) { 6032 if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
6033 writel(i, tx_ring->tail); 6033 writel(i, tx_ring->tail);
6034 6034
6035 /* we need this if more than one processor can write to our tail 6035 /* we need this if more than one processor can write to our tail
diff --git a/drivers/net/ethernet/intel/igc/igc_main.c b/drivers/net/ethernet/intel/igc/igc_main.c
index a883b3f357e7..f79728381e8a 100644
--- a/drivers/net/ethernet/intel/igc/igc_main.c
+++ b/drivers/net/ethernet/intel/igc/igc_main.c
@@ -939,7 +939,7 @@ static int igc_tx_map(struct igc_ring *tx_ring,
939 /* Make sure there is space in the ring for the next send. */ 939 /* Make sure there is space in the ring for the next send. */
940 igc_maybe_stop_tx(tx_ring, DESC_NEEDED); 940 igc_maybe_stop_tx(tx_ring, DESC_NEEDED);
941 941
942 if (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) { 942 if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
943 writel(i, tx_ring->tail); 943 writel(i, tx_ring->tail);
944 944
945 /* we need this if more than one processor can write to our tail 945 /* we need this if more than one processor can write to our tail
diff --git a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
index 16c728984164..60cec3540dd7 100644
--- a/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
+++ b/drivers/net/ethernet/intel/ixgbe/ixgbe_main.c
@@ -8297,7 +8297,7 @@ static int ixgbe_tx_map(struct ixgbe_ring *tx_ring,
8297 8297
8298 ixgbe_maybe_stop_tx(tx_ring, DESC_NEEDED); 8298 ixgbe_maybe_stop_tx(tx_ring, DESC_NEEDED);
8299 8299
8300 if (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) { 8300 if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
8301 writel(i, tx_ring->tail); 8301 writel(i, tx_ring->tail);
8302 8302
8303 /* we need this if more than one processor can write to our tail 8303 /* we need this if more than one processor can write to our tail
diff --git a/drivers/net/ethernet/marvell/mvneta.c b/drivers/net/ethernet/marvell/mvneta.c
index a944be3c57b1..bb68737dce56 100644
--- a/drivers/net/ethernet/marvell/mvneta.c
+++ b/drivers/net/ethernet/marvell/mvneta.c
@@ -2467,7 +2467,7 @@ out:
2467 if (txq->count >= txq->tx_stop_threshold) 2467 if (txq->count >= txq->tx_stop_threshold)
2468 netif_tx_stop_queue(nq); 2468 netif_tx_stop_queue(nq);
2469 2469
2470 if (!skb->xmit_more || netif_xmit_stopped(nq) || 2470 if (!netdev_xmit_more() || netif_xmit_stopped(nq) ||
2471 txq->pending + frags > MVNETA_TXQ_DEC_SENT_MASK) 2471 txq->pending + frags > MVNETA_TXQ_DEC_SENT_MASK)
2472 mvneta_txq_pend_desc_add(pp, txq, frags); 2472 mvneta_txq_pend_desc_add(pp, txq, frags);
2473 else 2473 else
diff --git a/drivers/net/ethernet/mediatek/mtk_eth_soc.c b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
index 549d36497b8c..53abe925ecb1 100644
--- a/drivers/net/ethernet/mediatek/mtk_eth_soc.c
+++ b/drivers/net/ethernet/mediatek/mtk_eth_soc.c
@@ -767,7 +767,8 @@ static int mtk_tx_map(struct sk_buff *skb, struct net_device *dev,
767 */ 767 */
768 wmb(); 768 wmb();
769 769
770 if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) || !skb->xmit_more) 770 if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) ||
771 !netdev_xmit_more())
771 mtk_w32(eth, txd->txd2, MTK_QTX_CTX_PTR); 772 mtk_w32(eth, txd->txd2, MTK_QTX_CTX_PTR);
772 773
773 return 0; 774 return 0;
diff --git a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
index 99200b5dac76..961cd5e7bf2b 100644
--- a/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
+++ b/drivers/net/ethernet/netronome/nfp/nfp_net_common.c
@@ -909,7 +909,7 @@ static int nfp_net_tx(struct sk_buff *skb, struct net_device *netdev)
909 nfp_net_tx_ring_stop(nd_q, tx_ring); 909 nfp_net_tx_ring_stop(nd_q, tx_ring);
910 910
911 tx_ring->wr_ptr_add += nr_frags + 1; 911 tx_ring->wr_ptr_add += nr_frags + 1;
912 if (__netdev_tx_sent_queue(nd_q, txbuf->real_len, skb->xmit_more)) 912 if (__netdev_tx_sent_queue(nd_q, txbuf->real_len, netdev_xmit_more()))
913 nfp_net_tx_xmit_more_flush(tx_ring); 913 nfp_net_tx_xmit_more_flush(tx_ring);
914 914
915 return NETDEV_TX_OK; 915 return NETDEV_TX_OK;
diff --git a/drivers/net/ethernet/qlogic/qede/qede_fp.c b/drivers/net/ethernet/qlogic/qede/qede_fp.c
index c342b07e3a93..954015d2011a 100644
--- a/drivers/net/ethernet/qlogic/qede/qede_fp.c
+++ b/drivers/net/ethernet/qlogic/qede/qede_fp.c
@@ -1665,12 +1665,12 @@ netdev_tx_t qede_start_xmit(struct sk_buff *skb, struct net_device *ndev)
1665 txq->tx_db.data.bd_prod = 1665 txq->tx_db.data.bd_prod =
1666 cpu_to_le16(qed_chain_get_prod_idx(&txq->tx_pbl)); 1666 cpu_to_le16(qed_chain_get_prod_idx(&txq->tx_pbl));
1667 1667
1668 if (!skb->xmit_more || netif_xmit_stopped(netdev_txq)) 1668 if (!netdev_xmit_more() || netif_xmit_stopped(netdev_txq))
1669 qede_update_tx_producer(txq); 1669 qede_update_tx_producer(txq);
1670 1670
1671 if (unlikely(qed_chain_get_elem_left(&txq->tx_pbl) 1671 if (unlikely(qed_chain_get_elem_left(&txq->tx_pbl)
1672 < (MAX_SKB_FRAGS + 1))) { 1672 < (MAX_SKB_FRAGS + 1))) {
1673 if (skb->xmit_more) 1673 if (netdev_xmit_more())
1674 qede_update_tx_producer(txq); 1674 qede_update_tx_producer(txq);
1675 1675
1676 netif_tx_stop_queue(netdev_txq); 1676 netif_tx_stop_queue(netdev_txq);
diff --git a/drivers/net/ethernet/rdc/r6040.c b/drivers/net/ethernet/rdc/r6040.c
index 04aa592f35c3..ad335bca3273 100644
--- a/drivers/net/ethernet/rdc/r6040.c
+++ b/drivers/net/ethernet/rdc/r6040.c
@@ -840,7 +840,7 @@ static netdev_tx_t r6040_start_xmit(struct sk_buff *skb,
840 skb_tx_timestamp(skb); 840 skb_tx_timestamp(skb);
841 841
842 /* Trigger the MAC to check the TX descriptor */ 842 /* Trigger the MAC to check the TX descriptor */
843 if (!skb->xmit_more || netif_queue_stopped(dev)) 843 if (!netdev_xmit_more() || netif_queue_stopped(dev))
844 iowrite16(TM2TX, ioaddr + MTPR); 844 iowrite16(TM2TX, ioaddr + MTPR);
845 lp->tx_insert_ptr = descptr->vndescp; 845 lp->tx_insert_ptr = descptr->vndescp;
846 846
diff --git a/drivers/net/ethernet/synopsys/dwc-xlgmac-hw.c b/drivers/net/ethernet/synopsys/dwc-xlgmac-hw.c
index 99d86e39ff54..bf6c1c6779ff 100644
--- a/drivers/net/ethernet/synopsys/dwc-xlgmac-hw.c
+++ b/drivers/net/ethernet/synopsys/dwc-xlgmac-hw.c
@@ -995,7 +995,7 @@ static void xlgmac_dev_xmit(struct xlgmac_channel *channel)
995 smp_wmb(); 995 smp_wmb();
996 996
997 ring->cur = cur_index + 1; 997 ring->cur = cur_index + 1;
998 if (!pkt_info->skb->xmit_more || 998 if (!netdev_xmit_more() ||
999 netif_xmit_stopped(netdev_get_tx_queue(pdata->netdev, 999 netif_xmit_stopped(netdev_get_tx_queue(pdata->netdev,
1000 channel->queue_index))) 1000 channel->queue_index)))
1001 xlgmac_tx_start_xmit(channel, ring); 1001 xlgmac_tx_start_xmit(channel, ring);
diff --git a/drivers/net/hyperv/netvsc.c b/drivers/net/hyperv/netvsc.c
index 813d195bbd57..9a022539d305 100644
--- a/drivers/net/hyperv/netvsc.c
+++ b/drivers/net/hyperv/netvsc.c
@@ -964,7 +964,7 @@ int netvsc_send(struct net_device *ndev,
964 /* Keep aggregating only if stack says more data is coming 964 /* Keep aggregating only if stack says more data is coming
965 * and not doing mixed modes send and not flow blocked 965 * and not doing mixed modes send and not flow blocked
966 */ 966 */
967 xmit_more = skb->xmit_more && 967 xmit_more = netdev_xmit_more() &&
968 !packet->cp_partial && 968 !packet->cp_partial &&
969 !netif_xmit_stopped(netdev_get_tx_queue(ndev, packet->q_idx)); 969 !netif_xmit_stopped(netdev_get_tx_queue(ndev, packet->q_idx));
970 970
diff --git a/drivers/net/virtio_net.c b/drivers/net/virtio_net.c
index 1b03c4b6ebff..ba246fc475ae 100644
--- a/drivers/net/virtio_net.c
+++ b/drivers/net/virtio_net.c
@@ -1568,7 +1568,7 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev)
1568 struct send_queue *sq = &vi->sq[qnum]; 1568 struct send_queue *sq = &vi->sq[qnum];
1569 int err; 1569 int err;
1570 struct netdev_queue *txq = netdev_get_tx_queue(dev, qnum); 1570 struct netdev_queue *txq = netdev_get_tx_queue(dev, qnum);
1571 bool kick = !skb->xmit_more; 1571 bool kick = !netdev_xmit_more();
1572 bool use_napi = sq->napi.weight; 1572 bool use_napi = sq->napi.weight;
1573 1573
1574 /* Free up any pending old buffers before queueing new ones. */ 1574 /* Free up any pending old buffers before queueing new ones. */
diff --git a/drivers/staging/mt7621-eth/mtk_eth_soc.c b/drivers/staging/mt7621-eth/mtk_eth_soc.c
index 6027b19f7bc2..02a8584b3d1d 100644
--- a/drivers/staging/mt7621-eth/mtk_eth_soc.c
+++ b/drivers/staging/mt7621-eth/mtk_eth_soc.c
@@ -741,7 +741,8 @@ static int mtk_pdma_tx_map(struct sk_buff *skb, struct net_device *dev,
741 wmb(); 741 wmb();
742 atomic_set(&ring->tx_free_count, mtk_pdma_empty_txd(ring)); 742 atomic_set(&ring->tx_free_count, mtk_pdma_empty_txd(ring));
743 743
744 if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) || !skb->xmit_more) 744 if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) ||
745 !netdev_xmit_more())
745 mtk_reg_w32(eth, ring->tx_next_idx, MTK_REG_TX_CTX_IDX0); 746 mtk_reg_w32(eth, ring->tx_next_idx, MTK_REG_TX_CTX_IDX0);
746 747
747 return 0; 748 return 0;
@@ -935,7 +936,8 @@ static int mtk_qdma_tx_map(struct sk_buff *skb, struct net_device *dev,
935 */ 936 */
936 wmb(); 937 wmb();
937 938
938 if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) || !skb->xmit_more) 939 if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) ||
940 !netdev_xmit_more())
939 mtk_w32(eth, txd->txd2, MTK_QTX_CTX_PTR); 941 mtk_w32(eth, txd->txd2, MTK_QTX_CTX_PTR);
940 942
941 return 0; 943 return 0;
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 2b25824642fa..eb9f05e0863d 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -4424,7 +4424,7 @@ static inline netdev_tx_t __netdev_start_xmit(const struct net_device_ops *ops,
4424 struct sk_buff *skb, struct net_device *dev, 4424 struct sk_buff *skb, struct net_device *dev,
4425 bool more) 4425 bool more)
4426{ 4426{
4427 skb->xmit_more = more ? 1 : 0; 4427 __this_cpu_write(softnet_data.xmit.more, more);
4428 return ops->ndo_start_xmit(skb, dev); 4428 return ops->ndo_start_xmit(skb, dev);
4429} 4429}
4430 4430