diff mbox series

[net-next] bcm63xx_enet: add BQL support

Message ID 20201204054616.26876-2-liew.s.piaw@gmail.com
State New
Headers show
Series [net-next] bcm63xx_enet: add BQL support | expand

Commit Message

Sieng Piaw Liew Dec. 4, 2020, 5:46 a.m. UTC
Add Byte Queue Limits support to reduce/remove bufferbloat in
bcm63xx_enet.

Signed-off-by: Sieng Piaw Liew <liew.s.piaw@gmail.com>
---
 drivers/net/ethernet/broadcom/bcm63xx_enet.c | 9 +++++++++
 1 file changed, 9 insertions(+)
diff mbox series

Patch

diff --git a/drivers/net/ethernet/broadcom/bcm63xx_enet.c b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
index b82b7805c36a..c1eba5fa3258 100644
--- a/drivers/net/ethernet/broadcom/bcm63xx_enet.c
+++ b/drivers/net/ethernet/broadcom/bcm63xx_enet.c
@@ -417,9 +417,11 @@  static int bcm_enet_receive_queue(struct net_device *dev, int budget)
 static int bcm_enet_tx_reclaim(struct net_device *dev, int force)
 {
 	struct bcm_enet_priv *priv;
+	unsigned int bytes;
 	int released;
 
 	priv = netdev_priv(dev);
+	bytes = 0;
 	released = 0;
 
 	while (priv->tx_desc_count < priv->tx_ring_size) {
@@ -456,10 +458,13 @@  static int bcm_enet_tx_reclaim(struct net_device *dev, int force)
 		if (desc->len_stat & DMADESC_UNDER_MASK)
 			dev->stats.tx_errors++;
 
+		bytes += skb->len;
 		dev_kfree_skb(skb);
 		released++;
 	}
 
+	netdev_completed_queue(dev, released, bytes);
+
 	if (netif_queue_stopped(dev) && released)
 		netif_wake_queue(dev);
 
@@ -626,6 +631,8 @@  bcm_enet_start_xmit(struct sk_buff *skb, struct net_device *dev)
 	desc->len_stat = len_stat;
 	wmb();
 
+	netdev_sent_queue(dev, skb->len);
+
 	/* kick tx dma */
 	enet_dmac_writel(priv, priv->dma_chan_en_mask,
 				 ENETDMAC_CHANCFG, priv->tx_chan);
@@ -1069,6 +1076,7 @@  static int bcm_enet_open(struct net_device *dev)
 	else
 		bcm_enet_adjust_link(dev);
 
+	netdev_reset_queue(dev);
 	netif_start_queue(dev);
 	return 0;
 
@@ -2246,6 +2254,7 @@  static int bcm_enetsw_open(struct net_device *dev)
 			 ENETDMAC_IRMASK, priv->tx_chan);
 
 	netif_carrier_on(dev);
+	netdev_reset_queue(dev);
 	netif_start_queue(dev);
 
 	/* apply override config for bypass_link ports here. */