Skip to content

Commit 23603e6

Browse files
kuba-moogregkh
authored andcommitted
bnxt: don't enable NAPI until rings are ready
commit 96ecdcc upstream. Netpoll can try to poll napi as soon as napi_enable() is called. It crashes trying to access a doorbell which is still NULL: BUG: kernel NULL pointer dereference, address: 0000000000000000 CPU: 59 PID: 6039 Comm: ethtool Kdump: loaded Tainted: G S 5.9.0-rc1-00469-g5fd99b5d9950-dirty #26 RIP: 0010:bnxt_poll+0x121/0x1c0 Code: c4 20 44 89 e0 5b 5d 41 5c 41 5d 41 5e 41 5f c3 41 8b 86 a0 01 00 00 41 23 85 18 01 00 00 49 8b 96 a8 01 00 00 0d 00 00 00 24 <89> 02 41 f6 45 77 02 74 cb 49 8b ae d8 01 00 00 31 c0 c7 44 24 1a netpoll_poll_dev+0xbd/0x1a0 __netpoll_send_skb+0x1b2/0x210 netpoll_send_udp+0x2c9/0x406 write_ext_msg+0x1d7/0x1f0 console_unlock+0x23c/0x520 vprintk_emit+0xe0/0x1d0 printk+0x58/0x6f x86_vector_activate.cold+0xf/0x46 __irq_domain_activate_irq+0x50/0x80 __irq_domain_activate_irq+0x32/0x80 __irq_domain_activate_irq+0x32/0x80 irq_domain_activate_irq+0x25/0x40 __setup_irq+0x2d2/0x700 request_threaded_irq+0xfb/0x160 __bnxt_open_nic+0x3b1/0x750 bnxt_open_nic+0x19/0x30 ethtool_set_channels+0x1ac/0x220 dev_ethtool+0x11ba/0x2240 dev_ioctl+0x1cf/0x390 sock_do_ioctl+0x95/0x130 Reported-by: Rob Sherwood <rsher@fb.com> Fixes: c0c050c ("bnxt_en: New Broadcom ethernet driver.") Signed-off-by: Jakub Kicinski <kuba@kernel.org> Reviewed-by: Michael Chan <michael.chan@broadcom.com> Signed-off-by: David S. Miller <davem@davemloft.net> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
1 parent ce391ac commit 23603e6

File tree

1 file changed

+3
-6
lines changed
  • drivers/net/ethernet/broadcom/bnxt

1 file changed

+3
-6
lines changed

drivers/net/ethernet/broadcom/bnxt/bnxt.c

+3-6
Original file line numberDiff line numberDiff line change
@@ -5589,14 +5589,14 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init)
55895589
}
55905590
}
55915591

5592-
bnxt_enable_napi(bp);
5593-
55945592
rc = bnxt_init_nic(bp, irq_re_init);
55955593
if (rc) {
55965594
netdev_err(bp->dev, "bnxt_init_nic err: %x\n", rc);
5597-
goto open_err;
5595+
goto open_err_irq;
55985596
}
55995597

5598+
bnxt_enable_napi(bp);
5599+
56005600
if (link_re_init) {
56015601
mutex_lock(&bp->link_lock);
56025602
rc = bnxt_update_phy_setting(bp);
@@ -5618,9 +5618,6 @@ static int __bnxt_open_nic(struct bnxt *bp, bool irq_re_init, bool link_re_init)
56185618

56195619
return 0;
56205620

5621-
open_err:
5622-
bnxt_disable_napi(bp);
5623-
56245621
open_err_irq:
56255622
bnxt_del_napi(bp);
56265623

0 commit comments

Comments
 (0)