From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mathias Thore Subject: [PATCH] net/wan/fsl_ucc_hdlc: add BQL support Date: Wed, 7 Nov 2018 09:09:45 +0100 Message-ID: <20181107080945.30651-1-mathias.thore@infinera.com> Cc: Mathias Thore To: qiang.zhao@nxp.com, linuxppc-dev@lists.ozlabs.org, netdev@vger.kernel.org, joakim.tjernlund@infinera.com, david.gounaris@infinera.com Return-path: Received: from smtp.transmode.se ([31.15.61.139]:60618 "EHLO smtp.transmode.se" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1728301AbeKGRjN (ORCPT ); Wed, 7 Nov 2018 12:39:13 -0500 Sender: netdev-owner@vger.kernel.org List-ID: Add byte queue limits support in the fsl_ucc_hdlc driver. Signed-off-by: Mathias Thore --- drivers/net/wan/fsl_ucc_hdlc.c | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/drivers/net/wan/fsl_ucc_hdlc.c b/drivers/net/wan/fsl_ucc_hdlc.c index 4d6409605207..7a42336c8af8 100644 --- a/drivers/net/wan/fsl_ucc_hdlc.c +++ b/drivers/net/wan/fsl_ucc_hdlc.c @@ -391,6 +391,7 @@ static netdev_tx_t ucc_hdlc_tx(struct sk_buff *skb, struct net_device *dev) dev_kfree_skb(skb); return -ENOMEM; } + netdev_sent_queue(dev, skb->len); spin_lock_irqsave(&priv->lock, flags); /* Start from the next BD that should be filled */ @@ -447,6 +448,8 @@ static int hdlc_tx_done(struct ucc_hdlc_private *priv) { /* Start from the next BD that should be filled */ struct net_device *dev = priv->ndev; + unsigned int bytes_sent = 0; + int howmany = 0; struct qe_bd *bd; /* BD pointer */ u16 bd_status; int tx_restart = 0; @@ -474,6 +477,8 @@ static int hdlc_tx_done(struct ucc_hdlc_private *priv) skb = priv->tx_skbuff[priv->skb_dirtytx]; if (!skb) break; + howmany++; + bytes_sent += skb->len; dev->stats.tx_packets++; memset(priv->tx_buffer + (be32_to_cpu(bd->buf) - priv->dma_tx_addr), @@ -501,6 +506,7 @@ static int hdlc_tx_done(struct ucc_hdlc_private *priv) if (tx_restart) hdlc_tx_restart(priv); + netdev_completed_queue(dev, howmany, bytes_sent); return 0; } @@ -721,6 +727,7 @@ static int uhdlc_open(struct net_device *dev) priv->hdlc_busy = 1; netif_device_attach(priv->ndev); napi_enable(&priv->napi); + netdev_reset_queue(dev); netif_start_queue(dev); hdlc_open(dev); } @@ -812,6 +819,7 @@ static int uhdlc_close(struct net_device *dev) free_irq(priv->ut_info->uf_info.irq, priv); netif_stop_queue(dev); + netdev_reset_queue(dev); priv->hdlc_busy = 0; return 0; -- 2.18.1