[PATCH] ucc_geth: Add BQL support

Subsystems: freescale quicc engine ucc ethernet driver, networking drivers, the rest

STALE2962d

7 messages, 4 authors, 2018-06-22 · open the first message on its own page

[PATCH] ucc_geth: Add BQL support

From: Joakim Tjernlund <hidden>
Date: 2018-06-19 16:40:40

Signed-off-by: Joakim Tjernlund <redacted>
---
 drivers/net/ethernet/freescale/ucc_geth.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/freescale/ucc_geth.c b/drivers/net/ethernet/freescale/ucc_geth.c
index f77ba9fa257b..6c99a9af6647 100644
--- a/drivers/net/ethernet/freescale/ucc_geth.c
+++ b/drivers/net/ethernet/freescale/ucc_geth.c
@@ -3096,6 +3096,7 @@ static int ucc_geth_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
 	ugeth_vdbg("%s: IN", __func__);
 
+	netdev_sent_queue(dev, skb->len);
 	spin_lock_irqsave(&ugeth->lock, flags);
 
 	dev->stats.tx_bytes += skb->len;
@@ -3242,6 +3243,8 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
 	struct ucc_geth_private *ugeth = netdev_priv(dev);
 	u8 __iomem *bd;		/* BD pointer */
 	u32 bd_status;
+	int howmany = 0;
+	unsigned int bytes_sent = 0;
 
 	bd = ugeth->confBd[txQ];
 	bd_status = in_be32((u32 __iomem *)bd);
@@ -3257,7 +3260,8 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
 		skb = ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]];
 		if (!skb)
 			break;
-
+		howmany++;
+		bytes_sent += skb->len;
 		dev->stats.tx_packets++;
 
 		dev_consume_skb_any(skb);
@@ -3279,6 +3283,7 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
 		bd_status = in_be32((u32 __iomem *)bd);
 	}
 	ugeth->confBd[txQ] = bd;
+	netdev_completed_queue(dev, howmany, bytes_sent);
 	return 0;
 }
 
-- 
2.13.6

Re: [PATCH] ucc_geth: Add BQL support

From: Li Yang <hidden>
Date: 2018-06-19 18:24:47

On Tue, Jun 19, 2018 at 11:30 AM, Joakim Tjernlund
[off-list ref] wrote:
Signed-off-by: Joakim Tjernlund <redacted>
Acked-by: Li Yang <redacted>
quoted hunk
---
 drivers/net/ethernet/freescale/ucc_geth.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/freescale/ucc_geth.c b/drivers/net/ethernet/freescale/ucc_geth.c
index f77ba9fa257b..6c99a9af6647 100644
--- a/drivers/net/ethernet/freescale/ucc_geth.c
+++ b/drivers/net/ethernet/freescale/ucc_geth.c
@@ -3096,6 +3096,7 @@ static int ucc_geth_start_xmit(struct sk_buff *skb, struct net_device *dev)

        ugeth_vdbg("%s: IN", __func__);

+       netdev_sent_queue(dev, skb->len);
        spin_lock_irqsave(&ugeth->lock, flags);

        dev->stats.tx_bytes += skb->len;
@@ -3242,6 +3243,8 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
        struct ucc_geth_private *ugeth = netdev_priv(dev);
        u8 __iomem *bd;         /* BD pointer */
        u32 bd_status;
+       int howmany = 0;
+       unsigned int bytes_sent = 0;

        bd = ugeth->confBd[txQ];
        bd_status = in_be32((u32 __iomem *)bd);
@@ -3257,7 +3260,8 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
                skb = ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]];
                if (!skb)
                        break;
-
+               howmany++;
+               bytes_sent += skb->len;
                dev->stats.tx_packets++;

                dev_consume_skb_any(skb);
@@ -3279,6 +3283,7 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
                bd_status = in_be32((u32 __iomem *)bd);
        }
        ugeth->confBd[txQ] = bd;
+       netdev_completed_queue(dev, howmany, bytes_sent);
        return 0;
 }

--
2.13.6

Re: [PATCH] ucc_geth: Add BQL support

From: Dave Taht <hidden>
Date: 2018-06-19 18:37:16

very happy to see this. is there a specific chip or devboard this runs on?

On Tue, Jun 19, 2018 at 11:24 AM, Li Yang [off-list ref] wrote:
On Tue, Jun 19, 2018 at 11:30 AM, Joakim Tjernlund
[off-list ref] wrote:
quoted
Signed-off-by: Joakim Tjernlund <redacted>
Acked-by: Li Yang <redacted>
quoted
---
 drivers/net/ethernet/freescale/ucc_geth.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/freescale/ucc_geth.c b/drivers/net/ethernet/freescale/ucc_geth.c
index f77ba9fa257b..6c99a9af6647 100644
--- a/drivers/net/ethernet/freescale/ucc_geth.c
+++ b/drivers/net/ethernet/freescale/ucc_geth.c
@@ -3096,6 +3096,7 @@ static int ucc_geth_start_xmit(struct sk_buff *skb, struct net_device *dev)

        ugeth_vdbg("%s: IN", __func__);

+       netdev_sent_queue(dev, skb->len);
        spin_lock_irqsave(&ugeth->lock, flags);

        dev->stats.tx_bytes += skb->len;
@@ -3242,6 +3243,8 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
        struct ucc_geth_private *ugeth = netdev_priv(dev);
        u8 __iomem *bd;         /* BD pointer */
        u32 bd_status;
+       int howmany = 0;
+       unsigned int bytes_sent = 0;

        bd = ugeth->confBd[txQ];
        bd_status = in_be32((u32 __iomem *)bd);
@@ -3257,7 +3260,8 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
                skb = ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]];
                if (!skb)
                        break;
-
+               howmany++;
+               bytes_sent += skb->len;
                dev->stats.tx_packets++;

                dev_consume_skb_any(skb);
@@ -3279,6 +3283,7 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
                bd_status = in_be32((u32 __iomem *)bd);
        }
        ugeth->confBd[txQ] = bd;
+       netdev_completed_queue(dev, howmany, bytes_sent);
        return 0;
 }

--
2.13.6


-- 

Dave Täht
CEO, TekLibre, LLC
http://www.teklibre.com
Tel: 1-669-226-2619

Re: [PATCH] ucc_geth: Add BQL support

From: Joakim Tjernlund <hidden>
Date: 2018-06-19 19:06:09

On Tue, 2018-06-19 at 11:37 -0700, Dave Taht wrote:
CAUTION: This email originated from outside of the organization. Do not click links or open attachments unless you recognize the sender and know the content is safe.


very happy to see this. is there a specific chip or devboard this runs on?
This driver is for MPC83xx family SOCs(possibly others as well) on our custom boards, used in 
our telecom product.

You are actually the reason I impl. this :)

 Jocke
On Tue, Jun 19, 2018 at 11:24 AM, Li Yang [off-list ref] wrote:
quoted
On Tue, Jun 19, 2018 at 11:30 AM, Joakim Tjernlund
[off-list ref] wrote:
quoted
Signed-off-by: Joakim Tjernlund <redacted>
Acked-by: Li Yang <redacted>
quoted
---
 drivers/net/ethernet/freescale/ucc_geth.c | 7 ++++++-
 1 file changed, 6 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/freescale/ucc_geth.c b/drivers/net/ethernet/freescale/ucc_geth.c
index f77ba9fa257b..6c99a9af6647 100644
--- a/drivers/net/ethernet/freescale/ucc_geth.c
+++ b/drivers/net/ethernet/freescale/ucc_geth.c
@@ -3096,6 +3096,7 @@ static int ucc_geth_start_xmit(struct sk_buff *skb, struct net_device *dev)

        ugeth_vdbg("%s: IN", __func__);

+       netdev_sent_queue(dev, skb->len);
        spin_lock_irqsave(&ugeth->lock, flags);

        dev->stats.tx_bytes += skb->len;
@@ -3242,6 +3243,8 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
        struct ucc_geth_private *ugeth = netdev_priv(dev);
        u8 __iomem *bd;         /* BD pointer */
        u32 bd_status;
+       int howmany = 0;
+       unsigned int bytes_sent = 0;

        bd = ugeth->confBd[txQ];
        bd_status = in_be32((u32 __iomem *)bd);
@@ -3257,7 +3260,8 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
                skb = ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]];
                if (!skb)
                        break;
-
+               howmany++;
+               bytes_sent += skb->len;
                dev->stats.tx_packets++;

                dev_consume_skb_any(skb);
@@ -3279,6 +3283,7 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
                bd_status = in_be32((u32 __iomem *)bd);
        }
        ugeth->confBd[txQ] = bd;
+       netdev_completed_queue(dev, howmany, bytes_sent);
        return 0;
 }

--
2.13.6


--

Dave Täht
CEO, TekLibre, LLC
http://www.teklibre.com
Tel: 1-669-226-2619

Re: [PATCH] ucc_geth: Add BQL support

From: David Miller <davem@davemloft.net>
Date: 2018-06-20 05:39:48

From: Joakim Tjernlund <redacted>
Date: Tue, 19 Jun 2018 18:30:36 +0200
quoted hunk
@@ -3242,6 +3243,8 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
 	struct ucc_geth_private *ugeth = netdev_priv(dev);
 	u8 __iomem *bd;		/* BD pointer */
 	u32 bd_status;
+	int howmany = 0;
+	unsigned int bytes_sent = 0;
Please keep the function local variable declarations ordered from
longest to shortest line.

Thank you.

[PATCH v2] ucc_geth: Add BQL support

From: Joakim Tjernlund <hidden>
Date: 2018-06-20 16:29:32

Signed-off-by: Joakim Tjernlund <redacted>
---

 v2 - Reoder varibles according to Dave
      Add call to netdev_reset_queue(dev) open/close
 drivers/net/ethernet/freescale/ucc_geth.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)
diff --git a/drivers/net/ethernet/freescale/ucc_geth.c b/drivers/net/ethernet/freescale/ucc_geth.c
index f77ba9fa257b..e8debbde0a34 100644
--- a/drivers/net/ethernet/freescale/ucc_geth.c
+++ b/drivers/net/ethernet/freescale/ucc_geth.c
@@ -3096,6 +3096,7 @@ static int ucc_geth_start_xmit(struct sk_buff *skb, struct net_device *dev)
 
 	ugeth_vdbg("%s: IN", __func__);
 
+	netdev_sent_queue(dev, skb->len);
 	spin_lock_irqsave(&ugeth->lock, flags);
 
 	dev->stats.tx_bytes += skb->len;
@@ -3240,6 +3241,8 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
 {
 	/* Start from the next BD that should be filled */
 	struct ucc_geth_private *ugeth = netdev_priv(dev);
+	unsigned int bytes_sent = 0;
+	int howmany = 0;
 	u8 __iomem *bd;		/* BD pointer */
 	u32 bd_status;
 
@@ -3257,7 +3260,8 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
 		skb = ugeth->tx_skbuff[txQ][ugeth->skb_dirtytx[txQ]];
 		if (!skb)
 			break;
-
+		howmany++;
+		bytes_sent += skb->len;
 		dev->stats.tx_packets++;
 
 		dev_consume_skb_any(skb);
@@ -3279,6 +3283,7 @@ static int ucc_geth_tx(struct net_device *dev, u8 txQ)
 		bd_status = in_be32((u32 __iomem *)bd);
 	}
 	ugeth->confBd[txQ] = bd;
+	netdev_completed_queue(dev, howmany, bytes_sent);
 	return 0;
 }
 
@@ -3479,6 +3484,7 @@ static int ucc_geth_open(struct net_device *dev)
 
 	phy_start(ugeth->phydev);
 	napi_enable(&ugeth->napi);
+	netdev_reset_queue(dev);
 	netif_start_queue(dev);
 
 	device_set_wakeup_capable(&dev->dev,
@@ -3509,6 +3515,7 @@ static int ucc_geth_close(struct net_device *dev)
 	free_irq(ugeth->ug_info->uf_info.irq, ugeth->ndev);
 
 	netif_stop_queue(dev);
+	netdev_reset_queue(dev);
 
 	return 0;
 }
-- 
2.13.6

Re: [PATCH v2] ucc_geth: Add BQL support

From: David Miller <davem@davemloft.net>
Date: 2018-06-22 04:56:26

From: Joakim Tjernlund <redacted>
Date: Wed, 20 Jun 2018 18:29:18 +0200
Signed-off-by: Joakim Tjernlund <redacted>
---

 v2 - Reoder varibles according to Dave
      Add call to netdev_reset_queue(dev) open/close
Applied.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help