Skip to content

Commit ac0a230

Browse files
committed
eth: sungem: remove .ndo_poll_controller to avoid deadlocks
Erhard reports netpoll warnings from sungem: netpoll_send_skb_on_dev(): eth0 enabled interrupts in poll (gem_start_xmit+0x0/0x398) WARNING: CPU: 1 PID: 1 at net/core/netpoll.c:370 netpoll_send_skb+0x1fc/0x20c gem_poll_controller() disables interrupts, which may sleep. We can't sleep in netpoll, it has interrupts disabled completely. Strangely, gem_poll_controller() doesn't even poll the completions, and instead acts as if an interrupt has fired so it just schedules NAPI and exits. None of this has been necessary for years, since netpoll invokes NAPI directly. Fixes: fe09bb6 ("sungem: Spring cleaning and GRO support") Reported-and-tested-by: Erhard Furtner <[email protected]> Link: https://lore.kernel.org/all/20240428125306.2c3080ef@legion Reviewed-by: Eric Dumazet <[email protected]> Link: https://lore.kernel.org/r/[email protected] Signed-off-by: Jakub Kicinski <[email protected]>
1 parent a2c7897 commit ac0a230

File tree

1 file changed

+0
-14
lines changed

1 file changed

+0
-14
lines changed

drivers/net/ethernet/sun/sungem.c

Lines changed: 0 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -949,17 +949,6 @@ static irqreturn_t gem_interrupt(int irq, void *dev_id)
949949
return IRQ_HANDLED;
950950
}
951951

952-
#ifdef CONFIG_NET_POLL_CONTROLLER
953-
static void gem_poll_controller(struct net_device *dev)
954-
{
955-
struct gem *gp = netdev_priv(dev);
956-
957-
disable_irq(gp->pdev->irq);
958-
gem_interrupt(gp->pdev->irq, dev);
959-
enable_irq(gp->pdev->irq);
960-
}
961-
#endif
962-
963952
static void gem_tx_timeout(struct net_device *dev, unsigned int txqueue)
964953
{
965954
struct gem *gp = netdev_priv(dev);
@@ -2839,9 +2828,6 @@ static const struct net_device_ops gem_netdev_ops = {
28392828
.ndo_change_mtu = gem_change_mtu,
28402829
.ndo_validate_addr = eth_validate_addr,
28412830
.ndo_set_mac_address = gem_set_mac_address,
2842-
#ifdef CONFIG_NET_POLL_CONTROLLER
2843-
.ndo_poll_controller = gem_poll_controller,
2844-
#endif
28452831
};
28462832

28472833
static int gem_init_one(struct pci_dev *pdev, const struct pci_device_id *ent)

0 commit comments

Comments
 (0)