Skip to content

Commit

Permalink
net: mvneta: Clean mvneta_tx() sk_buff handling
Browse files Browse the repository at this point in the history
Rework mvneta_tx() so that the code that performs the final handling
before a sk_buff is transmitted is done only if the numbers of fragments
processed if positive.

This is preparation work to add the support for software TSO.

Signed-off-by: Ezequiel Garcia <[email protected]>
Signed-off-by: David S. Miller <[email protected]>
  • Loading branch information
ezequielgarcia authored and davem330 committed May 22, 2014
1 parent 01ef26c commit e19d2dd
Showing 1 changed file with 7 additions and 8 deletions.
15 changes: 7 additions & 8 deletions drivers/net/ethernet/marvell/mvneta.c
Original file line number Diff line number Diff line change
Expand Up @@ -1584,15 +1584,13 @@ static int mvneta_tx(struct sk_buff *skb, struct net_device *dev)
u16 txq_id = skb_get_queue_mapping(skb);
struct mvneta_tx_queue *txq = &pp->txqs[txq_id];
struct mvneta_tx_desc *tx_desc;
struct netdev_queue *nq;
int frags = 0;
u32 tx_cmd;

if (!netif_running(dev))
goto out;

frags = skb_shinfo(skb)->nr_frags + 1;
nq = netdev_get_tx_queue(dev, txq_id);

/* Get a descriptor for the first part of the packet */
tx_desc = mvneta_txq_next_desc_get(txq);
Expand Down Expand Up @@ -1635,15 +1633,16 @@ static int mvneta_tx(struct sk_buff *skb, struct net_device *dev)
}
}

txq->count += frags;
mvneta_txq_pend_desc_add(pp, txq, frags);

if (txq->size - txq->count < MAX_SKB_FRAGS + 1)
netif_tx_stop_queue(nq);

out:
if (frags > 0) {
struct mvneta_pcpu_stats *stats = this_cpu_ptr(pp->stats);
struct netdev_queue *nq = netdev_get_tx_queue(dev, txq_id);

txq->count += frags;
mvneta_txq_pend_desc_add(pp, txq, frags);

if (txq->size - txq->count < MAX_SKB_FRAGS + 1)
netif_tx_stop_queue(nq);

u64_stats_update_begin(&stats->syncp);
stats->tx_packets++;
Expand Down

0 comments on commit e19d2dd

Please sign in to comment.