Merge git://git.kernel.org/pub/scm/linux/kernel/git/davem/net
This commit is contained in:
@@ -815,6 +815,14 @@ static netdev_tx_t dpaa2_eth_tx(struct sk_buff *skb, struct net_device *net_dev)
|
||||
*/
|
||||
queue_mapping = skb_get_queue_mapping(skb);
|
||||
fq = &priv->fq[queue_mapping];
|
||||
|
||||
fd_len = dpaa2_fd_get_len(&fd);
|
||||
nq = netdev_get_tx_queue(net_dev, queue_mapping);
|
||||
netdev_tx_sent_queue(nq, fd_len);
|
||||
|
||||
/* Everything that happens after this enqueues might race with
|
||||
* the Tx confirmation callback for this frame
|
||||
*/
|
||||
for (i = 0; i < DPAA2_ETH_ENQUEUE_RETRIES; i++) {
|
||||
err = priv->enqueue(priv, fq, &fd, 0);
|
||||
if (err != -EBUSY)
|
||||
@@ -825,13 +833,10 @@ static netdev_tx_t dpaa2_eth_tx(struct sk_buff *skb, struct net_device *net_dev)
|
||||
percpu_stats->tx_errors++;
|
||||
/* Clean up everything, including freeing the skb */
|
||||
free_tx_fd(priv, fq, &fd, false);
|
||||
netdev_tx_completed_queue(nq, 1, fd_len);
|
||||
} else {
|
||||
fd_len = dpaa2_fd_get_len(&fd);
|
||||
percpu_stats->tx_packets++;
|
||||
percpu_stats->tx_bytes += fd_len;
|
||||
|
||||
nq = netdev_get_tx_queue(net_dev, queue_mapping);
|
||||
netdev_tx_sent_queue(nq, fd_len);
|
||||
}
|
||||
|
||||
return NETDEV_TX_OK;
|
||||
@@ -1823,7 +1828,7 @@ static int dpaa2_eth_xdp_xmit_frame(struct net_device *net_dev,
|
||||
dpaa2_fd_set_format(&fd, dpaa2_fd_single);
|
||||
dpaa2_fd_set_ctrl(&fd, FD_CTRL_PTA);
|
||||
|
||||
fq = &priv->fq[smp_processor_id()];
|
||||
fq = &priv->fq[smp_processor_id() % dpaa2_eth_queue_count(priv)];
|
||||
for (i = 0; i < DPAA2_ETH_ENQUEUE_RETRIES; i++) {
|
||||
err = priv->enqueue(priv, fq, &fd, 0);
|
||||
if (err != -EBUSY)
|
||||
|
Reference in New Issue
Block a user