> Date: Mon, 26 Jun 2023 22:28:42 +0200
> From: Alexander Bluhm <[email protected]>
>
> Hi,
>
> I have an ifconfig on ix(4) that hangs in "sbar" wait queue during
> "starting network" while booting.
>
> load: 3.00 cmd: ifconfig 52949 [sbar] 0.01u 0.05s 0% 78k
>
> ddb{0}> ps
> PID TID PPID UID S FLAGS WAIT COMMAND
> 52949 250855 50082 0 3 0x3 sbar ifconfig
> 50082 468479 32384 0 3 0x10008b sigsusp sh
> 52583 256132 23859 77 3 0x100092 kqread dhcpleased
> 26314 670 23859 77 3 0x100092 kqread dhcpleased
> 23859 213684 1 0 3 0x80 kqread dhcpleased
> 1084 413649 97426 115 3 0x100092 kqread slaacd
> 79640 480435 97426 115 3 0x100092 kqread slaacd
> 97426 244636 1 0 3 0x100080 kqread slaacd
> 32384 389946 1 0 3 0x10008b sigsusp sh
> 25127 139046 0 0 3 0x14200 bored smr
> 38562 94707 0 0 3 0x14200 pgzero zerothread
> 27589 65355 0 0 3 0x14200 aiodoned aiodoned
> 20876 273172 0 0 3 0x14200 syncer update
> 35865 394897 0 0 3 0x14200 cleaner cleaner
> 89296 37410 0 0 3 0x14200 reaper reaper
> 4195 18701 0 0 3 0x14200 pgdaemon pagedaemon
> 70794 65241 0 0 3 0x14200 usbtsk usbtask
> 42580 105576 0 0 3 0x14200 usbatsk usbatsk
> 96913 6418 0 0 3 0x40014200 acpi0 acpi0
> 43860 163896 0 0 1 0x14200 idle7
> 9928 477713 0 0 7 0x40014200 idle6
> 19947 457773 0 0 7 0x40014200 idle5
> 71017 110610 0 0 7 0x40014200 idle4
> 73733 294276 0 0 7 0x40014200 idle3
> 73085 302072 0 0 7 0x40014200 idle2
> 89634 211435 0 0 7 0x40014200 idle1
> 45877 221411 0 0 2 0x40014200 sensors
> 41433 306787 0 0 3 0x14200 bored softnet3
> 85227 338038 0 0 3 0x14200 bored softnet2
> 72032 215983 0 0 3 0x14200 netlock softnet1
> 32550 351943 0 0 3 0x14200 bored softnet0
> 11993 408132 0 0 2 0x40014200 systqmp
> 58738 210334 0 0 3 0x14200 netlock systq
> 70352 115696 0 0 3 0x40014200 netlock softclock
> *95768 350377 0 0 7 0x40014200 idle0
> 1 298699 0 0 3 0x82 wait init
> 0 0 -1 0 3 0x10200 scheduler swapper
>
> ifconfig holds the netlock, I guess this prevents progress.
What does a WITNESS kernel report?
> ddb{0}> trace /t 0t250855
> sleep_finish(ffff8000248a3928,1) at sleep_finish+0x102
> cond_wait(ffff8000248a39c0,ffffffff8207c985) at cond_wait+0x64
> sched_barrier(ffff80002253fff0) at sched_barrier+0x77
> ixgbe_stop(ffff800000776000) at ixgbe_stop+0x1f7
> ixgbe_init(ffff800000776000) at ixgbe_init+0x36
> ixgbe_ioctl(ffff800000776048,8020690c,ffff800000842500) at ixgbe_ioctl+0x13e
> in_ifinit(ffff800000776048,ffff800000842500,ffff8000248a3cf0,1) at
> in_ifinit+0x
> f3
> in_ioctl_change_ifaddr(8040691a,ffff8000248a3ce0,ffff800000776048) at
> in_ioctl_
> change_ifaddr+0x390
> ifioctl(fffffd8746c878f8,8040691a,ffff8000248a3ce0,ffff80002487ab00) at
> ifioctl
> +0x988
> sys_ioctl(ffff80002487ab00,ffff8000248a3df0,ffff8000248a3e50) at
> sys_ioctl+0x2c
> 4
> syscall(ffff8000248a3ec0) at syscall+0x3d4
> Xsyscall() at Xsyscall+0x128
> end of kernel
> end trace frame: 0x74aea7fb4da0, count: -12
>
> systqmp is here, it may wait for the scheduler lock.
>
> ddb{0}> trace /t 0t408132
> sched_barrier_task(ffff8000248a39b8) at sched_barrier_task+0x7e
> taskq_thread(ffffffff824ac758) at taskq_thread+0x100
> end trace frame: 0x0, count: -2
>
> sensors thread seems to wait for scheduler lock, too.
>
> ddb{0}> trace /t 0t221411
> sched_peg_curproc(ffff80002253fff0) at sched_peg_curproc+0x69
> cpu_hz_update_sensor(ffff80002253fff0) at cpu_hz_update_sensor+0x21
> sensor_task_work(ffff800000366700) at sensor_task_work+0x48
> taskq_thread(ffff800000362100) at taskq_thread+0x100
>
> ddb{0}> show struct __mp_lock sched_lock
> struct sched_lock at 0xffffffff8250fa54 (520 bytes) {mpl_cpus = 10144565,
> mpl_t
> icket = 0x9acb36, mpl_users = 0x9acb35}
>
> systq is blocked by netlock
>
> ddb{0}> trace /t 0t210334
> sleep_finish(ffff8000247ab030,1) at sleep_finish+0x102
> rw_enter(ffffffff824a4fe8,1) at rw_enter+0x1cf
> pf_purge(ffffffff824bb760) at pf_purge+0x38
> taskq_thread(ffffffff824ac708) at taskq_thread+0x100
> end trace frame: 0x0, count: -4
>
> bluhm
>
>