[Bug 300561] ieee80211_newstate_cb probably shouldn't assert on (some?) INIT state change failures

From: <bugzilla-noreply_at_freebsd.org>
Date: Fri, 06 Nov 2026 18:39:31 UTC
https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=300561

            Bug ID: 300561
           Summary: ieee80211_newstate_cb probably shouldn't assert on
                    (some?) INIT state change failures
           Product: Base System
           Version: 16.0-CURRENT
          Hardware: Any
                OS: Any
            Status: New
          Severity: Affects Only Me
          Priority: ---
         Component: wireless
          Assignee: wireless@FreeBSD.org
          Reporter: kevans@freebsd.org

e.g.,:

```
panic: INIT state change failed
[...]
#14 0xffffffff80e227c5 in ieee80211_newstate_cb (xvap=0xfffff80037b6f000,       
    npending=<optimized out>)                                                   
    at /usr/src.kbsd/sys/net80211/ieee80211_proto.c:2615                        
        vap = 0xfffff80037b6f000                                                
        ic = <optimized out>                                                    
        nstate_num = <optimized out>                                            
        nstate = IEEE80211_S_INIT                                               
        arg = -1                                                                
        ostate = IEEE80211_S_RUN                                                
        rc = 35                                                                 
#15 0xffffffff80cb6a2b in taskqueue_run_locked (                                
    queue=queue@entry=0xfffff8002b13a100)                                       
    at /usr/src.kbsd/sys/kern/subr_taskqueue.c:542                              
        et = {et_link = {tqe_next = 0x2265797aec0,                              
            tqe_prev = 0xffffffff81318115}, et_td = 0xfffffe015797aec0,         
          et_section = {bucket = 778084352}, et_old_priority = 0 '\000'}        
        tb = {tb_running = 0xfffff80037b6f3d0, tb_seq = 1776,                   
          tb_canceling = false, tb_wanted = false, tb_link = {le_next = 0x0,    
            le_prev = 0xfffff8002b13a110}}                                      
        epochtasks = 0                                                          
        pending = 1                                                             
        task = <optimized out>                                                  
#16 0xffffffff80cb7a63 in taskqueue_thread_loop (                               
    arg=arg@entry=0xfffffe017bf12118)                                           
    at /usr/src.kbsd/sys/kern/subr_taskqueue.c:870                              
        tqp = <optimized out>                                                   
        tq = 0xfffff8002b13a100                                                 
```

12:22 <@adrian> i bet the iwx nic went out to lunch with a firmware panic
12:22 <@adrian> and iwx state changes were happening
12:22 <@adrian> and firmware recovery / restart didn't run yet because of that
assert
12:22 <@adrian> comment out that assert kevans and let the failure path finish
[...]
12:30 <@adrian> but yeah please file a bug kevans, this is [suboptimal and]
needs to be fixed; drivers can fail state changes and it should not be an
assert
12:30 <@adrian> especially since /by the time the assertion has happened/
you've already lost the state in the functions that returned that are relevant

-- 
You are receiving this mail because:
You are the assignee for the bug.