eth: sungem: remove .ndo_poll_controller to avoid deadlocks
authorJakub Kicinski <kuba@kernel.org>
Wed, 8 May 2024 13:45:04 +0000 (06:45 -0700)
committerJakub Kicinski <kuba@kernel.org>
Sat, 11 May 2024 01:15:05 +0000 (18:15 -0700)
commitac0a230f719b02432d8c7eba7615ebd691da86f4
treec8283a6281576d91b3a7174c2c686213d7fcc375
parenta2c78977950da00aca83a3f8865d1f54e715770d
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: fe09bb619096 ("sungem: Spring cleaning and GRO support")
Reported-and-tested-by: Erhard Furtner <erhard_f@mailbox.org>
Link: https://lore.kernel.org/all/20240428125306.2c3080ef@legion
Reviewed-by: Eric Dumazet <edumazet@google.com>
Link: https://lore.kernel.org/r/20240508134504.3560956-1-kuba@kernel.org
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/sun/sungem.c