Commit 5c4470a1 authored by Jakub Kicinski's avatar Jakub Kicinski
Browse files

eth: forcedeth: fix calling napi_enable() in atomic context



napi_enable() may sleep now, take netdev_lock() before np->lock.

Fixes: 413f0271 ("net: protect NAPI enablement with netdev_lock()")
Reported-by: default avatarDan Carpenter <dan.carpenter@linaro.org>
Link: https://lore.kernel.org/dcfd56bc-de32-4b11-9e19-d8bd1543745d@stanley.mountain


Acked-by: default avatarZhu Yanjun <zyjzyj2000@gmail.com>
Reviewed-by: default avatarEric Dumazet <edumazet@google.com>
Link: https://patch.msgid.link/20250124031841.1179756-4-kuba@kernel.org


Signed-off-by: default avatarJakub Kicinski <kuba@kernel.org>
parent a878f3e4
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -5562,6 +5562,7 @@ static int nv_open(struct net_device *dev)
	/* ask for interrupts */
	nv_enable_hw_interrupts(dev, np->irqmask);

	netdev_lock(dev);
	spin_lock_irq(&np->lock);
	writel(NVREG_MCASTADDRA_FORCE, base + NvRegMulticastAddrA);
	writel(0, base + NvRegMulticastAddrB);
@@ -5580,7 +5581,7 @@ static int nv_open(struct net_device *dev)
	ret = nv_update_linkspeed(dev);
	nv_start_rxtx(dev);
	netif_start_queue(dev);
	napi_enable(&np->napi);
	napi_enable_locked(&np->napi);

	if (ret) {
		netif_carrier_on(dev);
@@ -5597,6 +5598,7 @@ static int nv_open(struct net_device *dev)
			round_jiffies(jiffies + STATS_INTERVAL));

	spin_unlock_irq(&np->lock);
	netdev_unlock(dev);

	/* If the loopback feature was set while the device was down, make sure
	 * that it's set correctly now.