Message ID | 20201204054616.26876-2-liew.s.piaw@gmail.com |
---|---|
State | Superseded |
Headers | show |
Series | [net-next] bcm63xx_enet: add BQL support | expand |
On 12/3/2020 9:46 PM, Sieng Piaw Liew wrote: > 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 --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); Doing netdev_reset_queue() in bcm_enetsw_stop() and bcm_enet_stop() would feel more natural and be consistent with where the resources are being shut down. With that fixed: Acked-by: Florian Fainelli <f.fainelli@gmail.com>
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. */
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(+)