Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 11 Sep 2020 09:11:48 -0700
From:      Gleb Smirnoff <glebius@freebsd.org>
To:        xtouqh@mm.st
Cc:        current@freebsd.org, net@freebsd.org
Subject:   Re: bridge/igb panic: sleepq_add: td 0xfffffe01bbce5300 to sleep on wchan 0xffffffff8157d9a0 with sleeping prohibited
Message-ID:  <20200911161148.GP1269@FreeBSD.org>
In-Reply-To: <8172451b-81ea-aacb-02bd-b5005d18646d@mm.st>
References:  <8172451b-81ea-aacb-02bd-b5005d18646d@mm.st>

next in thread | previous in thread | raw e-mail | index | archive | help

--EgVrEAR5UttbsTXg
Content-Type: text/plain; charset=us-ascii
Content-Disposition: inline

  Hi,

can you please try out this patch? This is configuration event
and we should use sleepable lock to synchronize, not epoch.

On Fri, Sep 11, 2020 at 10:47:41AM +0300, xtouqh@mm.st wrote:
x> Updating from latest CURRENT snapshot 
x> (FreeBSD-13.0-CURRENT-amd64-20200910-1544934ffb2) to r365620 broke the 
x> bridges with igb (I350-T2) for me.  Booting to kernel.old and/or 
x> commenting the entries in rc.conf helps.
x> 
x> rc.conf:
x> ----
x> cloned_interfaces="bridge0 bridge1 tap0 tap1 tap2 tap3"
x> ifconfig_em0="inet ..."
x> ifconfig_igb0="up"
x> ifconfig_igb1="up"
x> ifconfig_bridge0="addm igb0 addm tap0 addm tap1"
x> ifconfig_bridge1="addm igb1 addm tap2 addm tap3"
x> ----
x> 
x> NICs (em0 is on-board, igb0/igb1 is addon I350-T2 card):
x> ----
x> em0: <Intel(R) PRO/1000 Network Connection> mem 0x92d00000-0x92d1ffff at 
x> device 31.6 numa-domain 0 on pci0
x> em0: Using 1024 TX descriptors and 1024 RX descriptors
x> em0: Using an MSI interrupt
x> em0: Ethernet address: e0:d5:5e:6c:aa:36
x> em0: netmap queues/slots: TX 1/1024, RX 1/1024
x> igb0: <Intel(R) PRO/1000 PCI-Express Network Driver> mem 
x> 0xfbb00000-0xfbbfffff,0xfbc84000-0xfbc87fff at device 0.0 numa-domain 0 
x> on pci16
x> igb0: Using 1024 TX descriptors and 1024 RX descriptors
x> igb0: Using 8 RX queues 8 TX queues
x> igb0: Using MSI-X interrupts with 9 vectors
x> igb0: Ethernet address: a0:36:9f:0a:cf:42
x> igb0: netmap queues/slots: TX 8/1024, RX 8/1024
x> igb1: <Intel(R) PRO/1000 PCI-Express Network Driver> mem 
x> 0xfba00000-0xfbafffff,0xfbc80000-0xfbc83fff at device 0.1 numa-domain 0 
x> on pci16
x> igb1: Using 1024 TX descriptors and 1024 RX descriptors
x> igb1: Using 8 RX queues 8 TX queues
x> igb1: Using MSI-X interrupts with 9 vectors
x> igb1: Ethernet address: a0:36:9f:0a:cf:43
x> igb1: netmap queues/slots: TX 8/1024, RX 8/1024
x> ----
x> 
x> panic:
x> ----
x> panic: sleepq_add: td 0xfffffe01bbce5300 to sleep on wchan 
x> 0xffffffff8157d9a0 with sleeping prohibited
x> cpuid = 16
x> time = 1599808542
x> KDB: stack backtrace:
x> db_trace_self_wrapper() at db_trace_self_wrapper+0x2b/frame 
x> 0xfffffe01ba658c40
x> vpanic() at vpanic+0x182/frame 0xfffffe01ba658c90
x> panic() at panic+0x43/frame 0xfffffe01ba658cf0
x> sleepq_add() at sleepq_add+0x359/frame 0xfffffe01ba658d40
x> _sleep() at _sleep+0x20c/frame 0xfffffe01ba658df0
x> pause_sbt() at pause_sbt+0xfe/frame 0xfffffe01ba658e20
x> e1000_reset_hw_82580() at e1000_reset_hw_82580+0x1c8/frame 
x> 0xfffffe01ba658e60
x> em_if_stop() at em_if_stop+0x1b/frame 0xfffffe01ba658e80
x> iflib_stop() at iflib_stop+0xbd/frame 0xfffffe01ba658ed0
x> iflib_if_ioctl() at iflib_if_ioctl+0x397/frame 0xfffffe01ba658f40
x> bridge_mutecaps() at bridge_mutecaps+0x145/frame 0xfffffe01ba658fb0
x> bridge_ioctl_add() at bridge_ioctl_add+0x468/frame 0xfffffe01ba659000
x> bridge_ioctl() at bridge_ioctl+0x32b/frame 0xfffffe01ba6590d0
x> in_control() at in_control+0x322/frame 0xfffffe01ba659180
x> ifioctl() at ifioctl+0x3e8/frame 0xfffffe01ba659250
x> kern_ioctl() at kern_ioctl+0x28e/frame 0xfffffe01ba6592c0
x> sys_ioctl() at sys_ioctl+0x127/frame 0xfffffe01ba659390
x> amd64_syscall() at amd64_syscall+0x140/frame 0xfffffe01ba6594b0
x> fast_syscall_common() at fast_syscall_common+0xf8/frame 0xfffffe01ba6594b0
x> --- syscall (54, FreeBSD ELF64, sys_ioctl), rip = 0x8004b4aba, rsp = 
x> 0x7fffffffe2b8, rbp = 0x7fffffffe360 ---
x> Uptime: 14s
x> Dumping 3794 out of 97961 
x> MB:..1%..11%..21%..31%..41%..51%..61%..71%..81%..91%
x> ----
x> _______________________________________________
x> freebsd-current@freebsd.org mailing list
x> https://lists.freebsd.org/mailman/listinfo/freebsd-current
x> To unsubscribe, send any mail to "freebsd-current-unsubscribe@freebsd.org"

-- 
Gleb Smirnoff

--EgVrEAR5UttbsTXg
Content-Type: text/x-diff; charset=us-ascii
Content-Disposition: attachment; filename="lagg_register_vlan-sleeps.diff"

Index: if_lagg.c
===================================================================
--- if_lagg.c	(revision 364434)
+++ if_lagg.c	(working copy)
@@ -476,10 +476,10 @@ lagg_register_vlan(void *arg, struct ifnet *ifp, u
 	if (ifp->if_softc !=  arg)   /* Not our event */
 		return;
 
-	LAGG_RLOCK();
+	sx_slock(&sc->sc_sx);
 	CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
 		EVENTHANDLER_INVOKE(vlan_config, lp->lp_ifp, vtag);
-	LAGG_RUNLOCK();
+	sx_sunlock(&sc->sc_sx);
 }
 
 /*
@@ -495,10 +495,10 @@ lagg_unregister_vlan(void *arg, struct ifnet *ifp,
 	if (ifp->if_softc !=  arg)   /* Not our event */
 		return;
 
-	LAGG_RLOCK();
+	sx_slock(&sc->sc_sx);
 	CK_SLIST_FOREACH(lp, &sc->sc_ports, lp_entries)
 		EVENTHANDLER_INVOKE(vlan_unconfig, lp->lp_ifp, vtag);
-	LAGG_RUNLOCK();
+	sx_sunlock(&sc->sc_sx);
 }
 
 static int

--EgVrEAR5UttbsTXg--



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20200911161148.GP1269>