[PATCH v2] net: lantiq: Add locking for TX DMA channel

Subsystems: lantiq / maxlinear / intel ethernet dsa drivers, networking drivers, the rest

STALE2092d

5 messages, 3 authors, 2020-11-13 · open the first message on its own page

[PATCH v2] net: lantiq: Add locking for TX DMA channel

From: Hauke Mehrtens <hauke@hauke-m.de>
Date: 2020-09-22 21:41:40

The TX DMA channel data is accessed by the xrx200_start_xmit() and the
xrx200_tx_housekeeping() function from different threads. Make sure the
accesses are synchronized by acquiring the netif_tx_lock() in the
xrx200_tx_housekeeping() function too. This lock is acquired by the
kernel before calling xrx200_start_xmit().

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
---
 drivers/net/ethernet/lantiq_xrx200.c | 2 ++
 1 file changed, 2 insertions(+)
diff --git a/drivers/net/ethernet/lantiq_xrx200.c b/drivers/net/ethernet/lantiq_xrx200.c
index affec78cc0f5..36847ff93918 100644
--- a/drivers/net/ethernet/lantiq_xrx200.c
+++ b/drivers/net/ethernet/lantiq_xrx200.c
@@ -239,6 +239,7 @@ static int xrx200_tx_housekeeping(struct napi_struct *napi, int budget)
 	int pkts = 0;
 	int bytes = 0;
 
+	netif_tx_lock(net_dev);
 	while (pkts < budget) {
 		struct ltq_dma_desc *desc = &ch->dma.desc_base[ch->tx_free];
 
@@ -262,6 +263,7 @@ static int xrx200_tx_housekeeping(struct napi_struct *napi, int budget)
 	net_dev->stats.tx_bytes += bytes;
 	netdev_completed_queue(ch->priv->net_dev, pkts, bytes);
 
+	netif_tx_unlock(net_dev);
 	if (netif_queue_stopped(net_dev))
 		netif_wake_queue(net_dev);
 
-- 
2.20.1

Re: [PATCH v2] net: lantiq: Add locking for TX DMA channel

From: David Miller <davem@davemloft.net>
Date: 2020-09-24 01:01:42

From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Tue, 22 Sep 2020 23:41:12 +0200
The TX DMA channel data is accessed by the xrx200_start_xmit() and the
xrx200_tx_housekeeping() function from different threads. Make sure the
accesses are synchronized by acquiring the netif_tx_lock() in the
xrx200_tx_housekeeping() function too. This lock is acquired by the
kernel before calling xrx200_start_xmit().

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Applied, but...

You posted this really fast after my feedback, so I have to ask if you
actually functionally tested this patch?

Re: [PATCH v2] net: lantiq: Add locking for TX DMA channel

From: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Date: 2020-09-25 12:19:22

On Thu, Sep 24, 2020 at 3:01 AM David Miller [off-list ref] wrote:
From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Tue, 22 Sep 2020 23:41:12 +0200
quoted
The TX DMA channel data is accessed by the xrx200_start_xmit() and the
xrx200_tx_housekeeping() function from different threads. Make sure the
accesses are synchronized by acquiring the netif_tx_lock() in the
xrx200_tx_housekeeping() function too. This lock is acquired by the
kernel before calling xrx200_start_xmit().

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Tested-by: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Applied, but...

You posted this really fast after my feedback, so I have to ask if you
actually functionally tested this patch?
it fixes the following crash for me: [0]


Best regards,
Martin


[0] https://pastebin.com/t1SLz9PH

Re: [PATCH v2] net: lantiq: Add locking for TX DMA channel

From: Hauke Mehrtens <hauke@hauke-m.de>
Date: 2020-09-26 19:30:49

On 9/24/20 3:01 AM, David Miller wrote:
From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Tue, 22 Sep 2020 23:41:12 +0200
quoted
The TX DMA channel data is accessed by the xrx200_start_xmit() and the
xrx200_tx_housekeeping() function from different threads. Make sure the
accesses are synchronized by acquiring the netif_tx_lock() in the
xrx200_tx_housekeeping() function too. This lock is acquired by the
kernel before calling xrx200_start_xmit().

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Applied, but...

You posted this really fast after my feedback, so I have to ask if you
actually functionally tested this patch?
Hi David,

I created the patch first, then tested it with ipef3 (iperf3 -c
192.168.1.70 -P 10 -t 30 and reverse) multiple times and send both mails.

I did not see any problems, but it could still be that I miss more problems.

Hauke

Re: [PATCH v2] net: lantiq: Add locking for TX DMA channel

From: Martin Blumenstingl <martin.blumenstingl@googlemail.com>
Date: 2020-11-13 20:54:27

On Thu, Sep 24, 2020 at 3:01 AM David Miller [off-list ref] wrote:
From: Hauke Mehrtens <hauke@hauke-m.de>
Date: Tue, 22 Sep 2020 23:41:12 +0200
quoted
The TX DMA channel data is accessed by the xrx200_start_xmit() and the
xrx200_tx_housekeeping() function from different threads. Make sure the
accesses are synchronized by acquiring the netif_tx_lock() in the
xrx200_tx_housekeeping() function too. This lock is acquired by the
kernel before calling xrx200_start_xmit().

Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de>
Applied [...]
what is the procedure to have this patch included in the 5.4 and 5.9
-stable trees as well?
this commit is already in mainline as f9317ae5523f99999fb54c513ebabbb2bc887ddf

After more testing other users have confirmed that this patch works
In hindsight it should have carried Fixes: fe1a56420cf2ec ("net:
lantiq: Add Lantiq / Intel VRX200 Ethernet driver")


Thank you!
Martin
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help