Message ID | 20200922214112.19591-1-hauke@hauke-m.de |
---|---|
State | New |
Headers | show |
Series | [v2] net: lantiq: Add locking for TX DMA channel | expand |
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?
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
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
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 --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);
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(+)