1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 |
- --- a/drivers/net/ethernet/marvell/mvneta.c
- +++ b/drivers/net/ethernet/marvell/mvneta.c
- @@ -1696,8 +1696,10 @@ static struct mvneta_tx_queue *mvneta_tx
-
- /* Free tx queue skbuffs */
- static void mvneta_txq_bufs_free(struct mvneta_port *pp,
- - struct mvneta_tx_queue *txq, int num)
- + struct mvneta_tx_queue *txq, int num,
- + struct netdev_queue *nq)
- {
- + unsigned int bytes_compl = 0, pkts_compl = 0;
- int i;
-
- for (i = 0; i < num; i++) {
- @@ -1705,6 +1707,11 @@ static void mvneta_txq_bufs_free(struct
- txq->txq_get_index;
- struct sk_buff *skb = txq->tx_skb[txq->txq_get_index];
-
- + if (skb) {
- + bytes_compl += skb->len;
- + pkts_compl++;
- + }
- +
- mvneta_txq_inc_get(txq);
-
- if (!IS_TSO_HEADER(txq, tx_desc->buf_phys_addr))
- @@ -1715,6 +1722,8 @@ static void mvneta_txq_bufs_free(struct
- continue;
- dev_kfree_skb_any(skb);
- }
- +
- + netdev_tx_completed_queue(nq, pkts_compl, bytes_compl);
- }
-
- /* Handle end of transmission */
- @@ -1728,7 +1737,7 @@ static void mvneta_txq_done(struct mvnet
- if (!tx_done)
- return;
-
- - mvneta_txq_bufs_free(pp, txq, tx_done);
- + mvneta_txq_bufs_free(pp, txq, tx_done, nq);
-
- txq->count -= tx_done;
-
- @@ -2335,6 +2344,8 @@ out:
- struct mvneta_pcpu_stats *stats = this_cpu_ptr(pp->stats);
- struct netdev_queue *nq = netdev_get_tx_queue(dev, txq_id);
-
- + netdev_tx_sent_queue(nq, len);
- +
- txq->count += frags;
- mvneta_txq_pend_desc_add(pp, txq, frags);
-
- @@ -2359,9 +2370,10 @@ static void mvneta_txq_done_force(struct
- struct mvneta_tx_queue *txq)
-
- {
- + struct netdev_queue *nq = netdev_get_tx_queue(pp->dev, txq->id);
- int tx_done = txq->count;
-
- - mvneta_txq_bufs_free(pp, txq, tx_done);
- + mvneta_txq_bufs_free(pp, txq, tx_done, nq);
-
- /* reset txq */
- txq->count = 0;
- @@ -2842,6 +2854,8 @@ static int mvneta_txq_init(struct mvneta
- static void mvneta_txq_deinit(struct mvneta_port *pp,
- struct mvneta_tx_queue *txq)
- {
- + struct netdev_queue *nq = netdev_get_tx_queue(pp->dev, txq->id);
- +
- kfree(txq->tx_skb);
-
- if (txq->tso_hdrs)
- @@ -2853,6 +2867,8 @@ static void mvneta_txq_deinit(struct mvn
- txq->size * MVNETA_DESC_ALIGNED_SIZE,
- txq->descs, txq->descs_phys);
-
- + netdev_tx_reset_queue(nq);
- +
- txq->descs = NULL;
- txq->last_desc = 0;
- txq->next_desc_to_proc = 0;
|