mirror of
https://github.com/torvalds/linux.git
synced 2024-11-26 14:12:06 +00:00
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>
This commit is contained in:
parent
97cdcf37b5
commit
6b16f9ee89
@ -2236,7 +2236,7 @@ static netdev_tx_t ena_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
}
|
||||
}
|
||||
|
||||
if (netif_xmit_stopped(txq) || !skb->xmit_more) {
|
||||
if (netif_xmit_stopped(txq) || !netdev_xmit_more()) {
|
||||
/* trigger the dma engine. ena_com_write_sq_doorbell()
|
||||
* has a mb
|
||||
*/
|
||||
|
@ -1887,7 +1887,7 @@ static void xgbe_dev_xmit(struct xgbe_channel *channel)
|
||||
smp_wmb();
|
||||
|
||||
ring->cur = cur_index + 1;
|
||||
if (!packet->skb->xmit_more ||
|
||||
if (!netdev_xmit_more() ||
|
||||
netif_xmit_stopped(netdev_get_tx_queue(pdata->netdev,
|
||||
channel->queue_index)))
|
||||
xgbe_tx_start_xmit(channel, ring);
|
||||
|
@ -551,7 +551,7 @@ normal_tx:
|
||||
prod = NEXT_TX(prod);
|
||||
txr->tx_prod = prod;
|
||||
|
||||
if (!skb->xmit_more || netif_xmit_stopped(txq))
|
||||
if (!netdev_xmit_more() || netif_xmit_stopped(txq))
|
||||
bnxt_db_write(bp, &txr->tx_db, prod);
|
||||
|
||||
tx_done:
|
||||
@ -559,7 +559,7 @@ tx_done:
|
||||
mmiowb();
|
||||
|
||||
if (unlikely(bnxt_tx_avail(bp, txr) <= MAX_SKB_FRAGS + 1)) {
|
||||
if (skb->xmit_more && !tx_buf->is_push)
|
||||
if (netdev_xmit_more() && !tx_buf->is_push)
|
||||
bnxt_db_write(bp, &txr->tx_db, prod);
|
||||
|
||||
netif_tx_stop_queue(txq);
|
||||
|
@ -1665,7 +1665,7 @@ static netdev_tx_t bcmgenet_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
if (ring->free_bds <= (MAX_SKB_FRAGS + 1))
|
||||
netif_tx_stop_queue(txq);
|
||||
|
||||
if (!skb->xmit_more || netif_xmit_stopped(txq))
|
||||
if (!netdev_xmit_more() || netif_xmit_stopped(txq))
|
||||
/* Packets are ready, update producer index */
|
||||
bcmgenet_tdma_ring_writel(priv, ring->index,
|
||||
ring->prod_index, TDMA_PROD_INDEX);
|
||||
|
@ -8156,7 +8156,7 @@ static netdev_tx_t tg3_start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
netif_tx_wake_queue(txq);
|
||||
}
|
||||
|
||||
if (!skb->xmit_more || netif_xmit_stopped(txq)) {
|
||||
if (!netdev_xmit_more() || netif_xmit_stopped(txq)) {
|
||||
/* Packets are ready, update Tx producer idx on card. */
|
||||
tw32_tx_mbox(tnapi->prodmbox, entry);
|
||||
mmiowb();
|
||||
|
@ -2522,7 +2522,7 @@ static netdev_tx_t liquidio_xmit(struct sk_buff *skb, struct net_device *netdev)
|
||||
irh->vlan = skb_vlan_tag_get(skb) & 0xfff;
|
||||
}
|
||||
|
||||
xmit_more = skb->xmit_more;
|
||||
xmit_more = netdev_xmit_more();
|
||||
|
||||
if (unlikely(cmdsetup.s.timestamp))
|
||||
status = send_nic_timestamp_pkt(oct, &ndata, finfo, xmit_more);
|
||||
|
@ -1585,7 +1585,7 @@ static netdev_tx_t liquidio_xmit(struct sk_buff *skb, struct net_device *netdev)
|
||||
irh->vlan = skb_vlan_tag_get(skb) & VLAN_VID_MASK;
|
||||
}
|
||||
|
||||
xmit_more = skb->xmit_more;
|
||||
xmit_more = netdev_xmit_more();
|
||||
|
||||
if (unlikely(cmdsetup.s.timestamp))
|
||||
status = send_nic_timestamp_pkt(oct, &ndata, finfo, xmit_more);
|
||||
|
@ -897,7 +897,7 @@ static netdev_tx_t enic_hard_start_xmit(struct sk_buff *skb,
|
||||
if (vnic_wq_desc_avail(wq) < MAX_SKB_FRAGS + ENIC_DESC_MAX_SPLITS)
|
||||
netif_tx_stop_queue(txq);
|
||||
skb_tx_timestamp(skb);
|
||||
if (!skb->xmit_more || netif_xmit_stopped(txq))
|
||||
if (!netdev_xmit_more() || netif_xmit_stopped(txq))
|
||||
vnic_wq_doorbell(wq);
|
||||
|
||||
spin_unlock(&enic->wq_lock[txq_map]);
|
||||
|
@ -1376,7 +1376,7 @@ static netdev_tx_t be_xmit(struct sk_buff *skb, struct net_device *netdev)
|
||||
u16 q_idx = skb_get_queue_mapping(skb);
|
||||
struct be_tx_obj *txo = &adapter->tx_obj[q_idx];
|
||||
struct be_wrb_params wrb_params = { 0 };
|
||||
bool flush = !skb->xmit_more;
|
||||
bool flush = !netdev_xmit_more();
|
||||
u16 wrb_cnt;
|
||||
|
||||
skb = be_xmit_workarounds(adapter, skb, &wrb_params);
|
||||
|
@ -518,7 +518,7 @@ process_sq_wqe:
|
||||
|
||||
flush_skbs:
|
||||
netdev_txq = netdev_get_tx_queue(netdev, q_id);
|
||||
if ((!skb->xmit_more) || (netif_xmit_stopped(netdev_txq)))
|
||||
if ((!netdev_xmit_more()) || (netif_xmit_stopped(netdev_txq)))
|
||||
hinic_sq_write_db(txq->sq, prod_idx, wqe_size, 0);
|
||||
|
||||
return err;
|
||||
|
@ -3267,7 +3267,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
|
||||
/* Make sure there is space in the ring for the next send. */
|
||||
e1000_maybe_stop_tx(netdev, tx_ring, desc_needed);
|
||||
|
||||
if (!skb->xmit_more ||
|
||||
if (!netdev_xmit_more() ||
|
||||
netif_xmit_stopped(netdev_get_tx_queue(netdev, 0))) {
|
||||
writel(tx_ring->next_to_use, hw->hw_addr + tx_ring->tdt);
|
||||
/* we need this if more than one processor can write to
|
||||
|
@ -5897,7 +5897,7 @@ static netdev_tx_t e1000_xmit_frame(struct sk_buff *skb,
|
||||
DIV_ROUND_UP(PAGE_SIZE,
|
||||
adapter->tx_fifo_limit) + 2));
|
||||
|
||||
if (!skb->xmit_more ||
|
||||
if (!netdev_xmit_more() ||
|
||||
netif_xmit_stopped(netdev_get_tx_queue(netdev, 0))) {
|
||||
if (adapter->flags2 & FLAG2_PCIM2PCI_ARBITER_WA)
|
||||
e1000e_update_tdt_wa(tx_ring,
|
||||
|
@ -1035,7 +1035,7 @@ static void fm10k_tx_map(struct fm10k_ring *tx_ring,
|
||||
fm10k_maybe_stop_tx(tx_ring, DESC_NEEDED);
|
||||
|
||||
/* notify HW of packet */
|
||||
if (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) {
|
||||
if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
|
||||
writel(i, tx_ring->tail);
|
||||
|
||||
/* we need this if more than one processor can write to our tail
|
||||
|
@ -3469,7 +3469,7 @@ static inline int i40e_tx_map(struct i40e_ring *tx_ring, struct sk_buff *skb,
|
||||
first->next_to_watch = tx_desc;
|
||||
|
||||
/* notify HW of packet */
|
||||
if (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) {
|
||||
if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
|
||||
writel(i, tx_ring->tail);
|
||||
|
||||
/* we need this if more than one processor can write to our tail
|
||||
|
@ -2358,7 +2358,7 @@ static inline void iavf_tx_map(struct iavf_ring *tx_ring, struct sk_buff *skb,
|
||||
first->next_to_watch = tx_desc;
|
||||
|
||||
/* notify HW of packet */
|
||||
if (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) {
|
||||
if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
|
||||
writel(i, tx_ring->tail);
|
||||
|
||||
/* we need this if more than one processor can write to our tail
|
||||
|
@ -1646,7 +1646,7 @@ ice_tx_map(struct ice_ring *tx_ring, struct ice_tx_buf *first,
|
||||
ice_maybe_stop_tx(tx_ring, DESC_NEEDED);
|
||||
|
||||
/* notify HW of packet */
|
||||
if (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) {
|
||||
if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
|
||||
writel(i, tx_ring->tail);
|
||||
|
||||
/* we need this if more than one processor can write to our tail
|
||||
|
@ -6029,7 +6029,7 @@ static int igb_tx_map(struct igb_ring *tx_ring,
|
||||
/* Make sure there is space in the ring for the next send. */
|
||||
igb_maybe_stop_tx(tx_ring, DESC_NEEDED);
|
||||
|
||||
if (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) {
|
||||
if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
|
||||
writel(i, tx_ring->tail);
|
||||
|
||||
/* we need this if more than one processor can write to our tail
|
||||
|
@ -939,7 +939,7 @@ static int igc_tx_map(struct igc_ring *tx_ring,
|
||||
/* Make sure there is space in the ring for the next send. */
|
||||
igc_maybe_stop_tx(tx_ring, DESC_NEEDED);
|
||||
|
||||
if (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) {
|
||||
if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
|
||||
writel(i, tx_ring->tail);
|
||||
|
||||
/* we need this if more than one processor can write to our tail
|
||||
|
@ -8297,7 +8297,7 @@ static int ixgbe_tx_map(struct ixgbe_ring *tx_ring,
|
||||
|
||||
ixgbe_maybe_stop_tx(tx_ring, DESC_NEEDED);
|
||||
|
||||
if (netif_xmit_stopped(txring_txq(tx_ring)) || !skb->xmit_more) {
|
||||
if (netif_xmit_stopped(txring_txq(tx_ring)) || !netdev_xmit_more()) {
|
||||
writel(i, tx_ring->tail);
|
||||
|
||||
/* we need this if more than one processor can write to our tail
|
||||
|
@ -2467,7 +2467,7 @@ out:
|
||||
if (txq->count >= txq->tx_stop_threshold)
|
||||
netif_tx_stop_queue(nq);
|
||||
|
||||
if (!skb->xmit_more || netif_xmit_stopped(nq) ||
|
||||
if (!netdev_xmit_more() || netif_xmit_stopped(nq) ||
|
||||
txq->pending + frags > MVNETA_TXQ_DEC_SENT_MASK)
|
||||
mvneta_txq_pend_desc_add(pp, txq, frags);
|
||||
else
|
||||
|
@ -767,7 +767,8 @@ static int mtk_tx_map(struct sk_buff *skb, struct net_device *dev,
|
||||
*/
|
||||
wmb();
|
||||
|
||||
if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) || !skb->xmit_more)
|
||||
if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) ||
|
||||
!netdev_xmit_more())
|
||||
mtk_w32(eth, txd->txd2, MTK_QTX_CTX_PTR);
|
||||
|
||||
return 0;
|
||||
|
@ -909,7 +909,7 @@ static int nfp_net_tx(struct sk_buff *skb, struct net_device *netdev)
|
||||
nfp_net_tx_ring_stop(nd_q, tx_ring);
|
||||
|
||||
tx_ring->wr_ptr_add += nr_frags + 1;
|
||||
if (__netdev_tx_sent_queue(nd_q, txbuf->real_len, skb->xmit_more))
|
||||
if (__netdev_tx_sent_queue(nd_q, txbuf->real_len, netdev_xmit_more()))
|
||||
nfp_net_tx_xmit_more_flush(tx_ring);
|
||||
|
||||
return NETDEV_TX_OK;
|
||||
|
@ -1665,12 +1665,12 @@ netdev_tx_t qede_start_xmit(struct sk_buff *skb, struct net_device *ndev)
|
||||
txq->tx_db.data.bd_prod =
|
||||
cpu_to_le16(qed_chain_get_prod_idx(&txq->tx_pbl));
|
||||
|
||||
if (!skb->xmit_more || netif_xmit_stopped(netdev_txq))
|
||||
if (!netdev_xmit_more() || netif_xmit_stopped(netdev_txq))
|
||||
qede_update_tx_producer(txq);
|
||||
|
||||
if (unlikely(qed_chain_get_elem_left(&txq->tx_pbl)
|
||||
< (MAX_SKB_FRAGS + 1))) {
|
||||
if (skb->xmit_more)
|
||||
if (netdev_xmit_more())
|
||||
qede_update_tx_producer(txq);
|
||||
|
||||
netif_tx_stop_queue(netdev_txq);
|
||||
|
@ -840,7 +840,7 @@ static netdev_tx_t r6040_start_xmit(struct sk_buff *skb,
|
||||
skb_tx_timestamp(skb);
|
||||
|
||||
/* Trigger the MAC to check the TX descriptor */
|
||||
if (!skb->xmit_more || netif_queue_stopped(dev))
|
||||
if (!netdev_xmit_more() || netif_queue_stopped(dev))
|
||||
iowrite16(TM2TX, ioaddr + MTPR);
|
||||
lp->tx_insert_ptr = descptr->vndescp;
|
||||
|
||||
|
@ -995,7 +995,7 @@ static void xlgmac_dev_xmit(struct xlgmac_channel *channel)
|
||||
smp_wmb();
|
||||
|
||||
ring->cur = cur_index + 1;
|
||||
if (!pkt_info->skb->xmit_more ||
|
||||
if (!netdev_xmit_more() ||
|
||||
netif_xmit_stopped(netdev_get_tx_queue(pdata->netdev,
|
||||
channel->queue_index)))
|
||||
xlgmac_tx_start_xmit(channel, ring);
|
||||
|
@ -964,7 +964,7 @@ int netvsc_send(struct net_device *ndev,
|
||||
/* Keep aggregating only if stack says more data is coming
|
||||
* and not doing mixed modes send and not flow blocked
|
||||
*/
|
||||
xmit_more = skb->xmit_more &&
|
||||
xmit_more = netdev_xmit_more() &&
|
||||
!packet->cp_partial &&
|
||||
!netif_xmit_stopped(netdev_get_tx_queue(ndev, packet->q_idx));
|
||||
|
||||
|
@ -1568,7 +1568,7 @@ static netdev_tx_t start_xmit(struct sk_buff *skb, struct net_device *dev)
|
||||
struct send_queue *sq = &vi->sq[qnum];
|
||||
int err;
|
||||
struct netdev_queue *txq = netdev_get_tx_queue(dev, qnum);
|
||||
bool kick = !skb->xmit_more;
|
||||
bool kick = !netdev_xmit_more();
|
||||
bool use_napi = sq->napi.weight;
|
||||
|
||||
/* Free up any pending old buffers before queueing new ones. */
|
||||
|
@ -741,7 +741,8 @@ static int mtk_pdma_tx_map(struct sk_buff *skb, struct net_device *dev,
|
||||
wmb();
|
||||
atomic_set(&ring->tx_free_count, mtk_pdma_empty_txd(ring));
|
||||
|
||||
if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) || !skb->xmit_more)
|
||||
if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) ||
|
||||
!netdev_xmit_more())
|
||||
mtk_reg_w32(eth, ring->tx_next_idx, MTK_REG_TX_CTX_IDX0);
|
||||
|
||||
return 0;
|
||||
@ -935,7 +936,8 @@ static int mtk_qdma_tx_map(struct sk_buff *skb, struct net_device *dev,
|
||||
*/
|
||||
wmb();
|
||||
|
||||
if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) || !skb->xmit_more)
|
||||
if (netif_xmit_stopped(netdev_get_tx_queue(dev, 0)) ||
|
||||
!netdev_xmit_more())
|
||||
mtk_w32(eth, txd->txd2, MTK_QTX_CTX_PTR);
|
||||
|
||||
return 0;
|
||||
|
@ -4424,7 +4424,7 @@ static inline netdev_tx_t __netdev_start_xmit(const struct net_device_ops *ops,
|
||||
struct sk_buff *skb, struct net_device *dev,
|
||||
bool more)
|
||||
{
|
||||
skb->xmit_more = more ? 1 : 0;
|
||||
__this_cpu_write(softnet_data.xmit.more, more);
|
||||
return ops->ndo_start_xmit(skb, dev);
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user