git: dd0bb5ba4257 - stable/13 - cxgbe(4): Do not report link state change during interface detach.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Wed, 17 Jul 2024 14:24:48 UTC
The branch stable/13 has been updated by np:
URL: https://cgit.FreeBSD.org/src/commit/?id=dd0bb5ba4257e814ff39b9d7e0321af4b0f82fc5
commit dd0bb5ba4257e814ff39b9d7e0321af4b0f82fc5
Author: Navdeep Parhar <np@FreeBSD.org>
AuthorDate: 2024-07-03 19:01:33 +0000
Commit: Navdeep Parhar <np@FreeBSD.org>
CommitDate: 2024-07-17 07:18:27 +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
Sponsored by: Chelsio Communications
Differential Revision: https://reviews.freebsd.org/D45864
(cherry picked from commit dc20d49aa939caea365cbdf0341b00de69253be4)
---
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 842eb87e9126..7f949ad8e66c 100644
--- a/sys/dev/cxgbe/t4_main.c
+++ b/sys/dev/cxgbe/t4_main.c
@@ -12399,7 +12399,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) {