The branch main has been updated by np: URL: https://cgit.FreeBSD.org/src/commit/?id=dc20d49aa939caea365cbdf0341b00de69253be4
commit dc20d49aa939caea365cbdf0341b00de69253be4 Author: Navdeep Parhar <n...@freebsd.org> AuthorDate: 2024-07-03 19:01:33 +0000 Commit: Navdeep Parhar <n...@freebsd.org> CommitDate: 2024-07-10 19:05:48 +0000 cxgbe(4): Do not report link state change during interface detach. This fixes a panic when multiple VIs are configured on an interface and only the non-primary VI is up at the time of driver detach. The problem was that the driver would queue a link state change notification for an interface about to be freed. To reproduce the panic, add "hw.cxgbe.num_vis=2" to loader.conf and # kldload if_cxgbe # ifconfig vcc0 up # devctl detach t6nex0 trap 0x9, rip = 0xffffffff8107db70, rsp = 0xfffffe0055263d60, rbp = 0xfffffe0055263dd0 taskqueue_run_locked() at taskqueue_run_locked+0x2a0/frame 0xfffffe0055263dd0 taskqueue_run() at taskqueue_run+0x72/frame 0xfffffe0055263df0 taskqueue_swi_run() at taskqueue_swi_run+0x18/frame 0xfffffe0055263e10 intr_event_execute_handlers() at intr_event_execute_handlers+0x249/frame 0xfffffe0055263e50 ithread_execute_handlers() at ithread_execute_handlers+0x9e/frame 0xfffffe0055263e70 Reviewed by: jhb MFC after: 1 week Sponsored by: Chelsio Communications Differential Revision: https://reviews.freebsd.org/D45864 --- sys/dev/cxgbe/t4_main.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/sys/dev/cxgbe/t4_main.c b/sys/dev/cxgbe/t4_main.c index c142fa93166d..99400dc9aadb 100644 --- a/sys/dev/cxgbe/t4_main.c +++ b/sys/dev/cxgbe/t4_main.c @@ -12112,7 +12112,7 @@ t4_os_link_changed(struct port_info *pi) for_each_vi(pi, v, vi) { ifp = vi->ifp; - if (ifp == NULL) + if (ifp == NULL || IS_DETACHING(vi)) continue; if (lc->link_ok) {