• Eliad Peller's avatar
    mac80211: use freezable workqueue for restart work · 43d6df00
    Eliad Peller authored
    Requesting hw restart during suspend might result
    in the restart work being executed after mac80211
    and the hw are suspended.
    
    Solve the race by simply scheduling the restart
    work on a freezable workqueue.
    
    Note that there can be some cases of reconfiguration
    on resume (besides the hardware restart):
    
    * wowlan is not configured -
        All the interfaces removed were removed on suspend,
        and drv_stop() was called. At this point the driver
        shouldn't expect for hw_restart anyway, so we can
        simply cancel it (on resume).
    
    * wowlan is configured, drv_resume() == 1
        There is no definitive expected behavior in this case,
        as each driver might have different expectations (e.g.
        setting some flags on suspend/restart vs. not handling
        spurious recovery).
        For now, simply let the hw_restart work run again after
        resume, and hope the driver will handle it well (or at
        least initiate another hw restart).
    Signed-off-by: default avatarEliad Peller <eliadx.peller@intel.com>
    Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    43d6df00
util.c 86.1 KB