admin管理员组

文章数量:1531792

2024年4月1日发(作者:)

break;

/* Process all buffers of the current transmitted frame */

for (;; tail++) {

tx_skb = macb_tx_skb(queue, tail);

skb = tx_skb->skb;

/* First, update TX stats if needed */

if (skb) {

netdev_vdbg(bp->dev, "skb %u (data %p) TX completen",

macb_tx_ring_wrap(tail), skb->data);

bp->_packets++;

bp->_bytes += skb->len;

}

/* Now we can safely release resources */

macb_tx_unmap(bp, tx_skb);

/* skb is set only for the last buffer of the frame.

* WARNING: at this point skb has been freed by

* macb_tx_unmap().

*/

if (skb)

break;

}

}

queue->tx_tail = tail;

if (__netif_subqueue_stopped(bp->dev, queue_index) &&

CIRC_CNT(queue->tx_head, queue->tx_tail,

TX_RING_SIZE) <= MACB_TX_WAKEUP_THRESH)

netif_wake_subqueue(bp->dev, queue_index);

}

本文标签: 网卡指令屏障