• Emmanuel Grumbach's avatar
    mac80211: avoid races related to suspend flow · 4afaff17
    Emmanuel Grumbach authored
    
    
    When we go to suspend, there is complex set of states that
    avoids races. The quiescing variable is set whlie
    __ieee80211_suspend is running. Then suspended is set.
    The code makes sure there is no window without any of these
    flags.
    
    The problem is that workers can still be enqueued while we
    are quiescing. This leads to situations where the driver is
    already suspending and other flows like disassociation are
    handled by a worker.
    
    To fix this, we need to check quiescing and suspended flags
    in the worker itself and not only before enqueueing it.
    I also add here extensive documentation to ease the
    understanding of these complex issues.
    Signed-off-by: default avatarEmmanuel Grumbach <emmanuel.grumbach@intel.com>
    Signed-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
    4afaff17
iface.c 48.9 KB