iwm(4) can panic if the firmware image is missing or corrupt: starting network iwm1: firmware parse error 22, section type 0 iwm1: failed to load init firmware ifconfig: SIOCSIFXFLAGS: Invalid argument panic: kernel diagnostic assertion "sc->task_refs.r_refs == 0" failed: file "/u sr/src/sys/dev/pci/if_iwm.c", line 10361 Stopped at db_enter+0x10: popq %rbp TID PID UID PRFLAGS PFLAGS 0 0x3 0 1K ifconfig db_enter() at db_enter+0x10 panic(ffffffff81f3341f) at panic+0xbf __assert(ffffffff81fa36d6,ffffffff81f9df76,2879,ffffffff81f4cb41) at __assert+0 x25 iwm_init(ffff8000005eb048) at iwm_init+0x2c4 iwm_ioctl(ffff8000005eb048,8020690c,ffff800000bc2400) at iwm_ioctl+0xf9 in6_ifinit(ffff8000005eb048,ffff800000bc2400,1) at in6_ifinit+0xbb in6_update_ifa(ffff8000005eb048,ffff8000227473b0,0) at in6_update_ifa+0x774 in6_ifattach_linklocal(ffff8000005eb048,0) at in6_ifattach_linklocal+0x1ff in6_ifattach(ffff8000005eb048) at in6_ifattach+0xef ifioctl(fffffd810ec50ac0,801169ab,ffff800022747570,ffff800022782a80) at ifioctl +0xd97 sys_ioctl(ffff800022782a80,ffff800022747680,ffff8000227476e0) at sys_ioctl+0x2c 4 syscall(ffff800022747750) at syscall+0x384 Xsyscall() at Xsyscall+0x128 end of kernel end trace frame: 0x7f7ffffe1490, count: 2 https://www.openbsd.org/ddb.html describes the minimum info required in bug reports. Insufficient info makes it difficult to find and fix bugs. ddb{1}>
This issue has already been fixed for iwx(4) in r1.113 of if_iwx.c. Equivalent fix for iwm(4) below. ok? diff /usr/src commit - 36eaeeee8d761cea6a70e9e97003c06b13843e25 path + /usr/src blob - b7d37d7182e12521452a6d0ee178001ce2f9ba14 file + sys/dev/pci/if_iwm.c --- sys/dev/pci/if_iwm.c +++ sys/dev/pci/if_iwm.c @@ -10358,9 +10358,6 @@ iwm_init(struct ifnet *ifp) generation = ++sc->sc_generation; - KASSERT(sc->task_refs.r_refs == 0); - refcnt_init(&sc->task_refs); - err = iwm_preinit(sc); if (err) return err; @@ -10374,7 +10371,7 @@ iwm_init(struct ifnet *ifp) err = iwm_init_hw(sc); if (err) { if (generation == sc->sc_generation) - iwm_stop(ifp); + iwm_stop_device(sc); return err; } @@ -10383,6 +10380,8 @@ iwm_init(struct ifnet *ifp) if (sc->sc_nvm.sku_cap_11ac_enable) iwm_setup_vht_rates(sc); + KASSERT(sc->task_refs.r_refs == 0); + refcnt_init(&sc->task_refs); ifq_clr_oactive(&ifp->if_snd); ifp->if_flags |= IFF_RUNNING;