• Johannes Berg's avatar
    mac80211: remove ieee80211_notify_mac · 8e3bad65
    Johannes Berg authored
    Before ieee80211_notify_mac() was added, it was presented with the
    use case of using it to tell mac80211 that the association may
    have been lost because the firmware crashed/reset.
    
    Since then, it has also been used by iwlwifi to (slightly) speed
    up re-association after resume, a workaround around the fact that
    mac80211 has no suspend/resume handling yet. It is also not used
    by any other drivers, so clearly it cannot be necessary for "good
    enough" suspend/resume.
    
    Unfortunately, the callback suffers from a severe problem: It only
    works for station mode. If suspend/resume happens while in IBSS or
    any other mode (but station), then the callback is pointless.
    
    Recently, it has created a number of locking issues, first because
    it required rtnl locking rather than RCU due to calling sleeping
    functions within the critical section, and now because it's called
    by iwlwifi from the mac80211 workqueue that may not use the rtnl
    because it is flushed under rtnl.
    (cf. http://bugzilla.kernel.org/show_bug.cgi?id=12046
    
    )
    
    I think, therefore, that we should take a step back, remove it
    entirely for now and add the small feature it provided properly.
    For suspend and resume we will need to introduce new hooks, and for
    the case where the firmware was reset the driver will probably
    simply just pretend it has done a suspend/resume cycle to get
    mac80211 to reprogram the hardware completely, not just try to
    connect to the current AP again in station mode. When doing so, we
    will need to take into account locking issues and possibly defer
    to schedule_work from within mac80211 for the resume operation,
    while the suspend operation must be done directly.
    
    Proper suspend/resume should also not necessarily try to reconnect
    to the current AP, the time spent in suspend may have been short
    enough to not be disconnected from the AP, mac80211 will detect
    that the AP went out of range quickly if it did, and if the
    association is lost then the AP will disassoc as soon as a data
    frame is sent. We might also take into account WWOL then, and
    have mac80211 program the hardware into such a mode where it is
    available and requested.
    Signed-off-by: default avatarJohannes Berg <johannes@sipsolutions.net>
    Signed-off-by: default avatarJohn W. Linville <linville@tuxdriver.com>
    8e3bad65