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>