diff mbox series

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

Message ID 20200922214112.19591-1-hauke@hauke-m.de
State Accepted
Delegated to: David Miller
Headers show
Series [v2] net: lantiq: Add locking for TX DMA channel | expand

Commit Message

Hauke Mehrtens Sept. 22, 2020, 9:41 p.m. UTC
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(+)

Comments

David Miller Sept. 24, 2020, 1:01 a.m. UTC | #1
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?
Martin Blumenstingl Sept. 25, 2020, 12:19 p.m. UTC | #2
On Thu, Sep 24, 2020 at 3:01 AM David Miller <davem@davemloft.net> wrote:
>
> 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>
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
Hauke Mehrtens Sept. 26, 2020, 7:30 p.m. UTC | #3
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
> 
>> 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
Martin Blumenstingl Nov. 13, 2020, 8:54 p.m. UTC | #4
On Thu, Sep 24, 2020 at 3:01 AM David Miller <davem@davemloft.net> wrote:
>
> 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 [...]
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
diff mbox series

Patch

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);