Allow drivers to sleep, and indicate this in
the documentation. ath9k has some locking I
don't understand, so keep it safe and disable
BHs in it, all other drivers look fine with
the context change.
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: John W. Linville <linville@tuxdriver.com>
        struct ath_softc *sc = aphy->sc;
        int ret = 0;
 
+       local_bh_disable();
+
        switch (action) {
        case IEEE80211_AMPDU_RX_START:
                if (!(sc->sc_flags & SC_OP_RXAGGR))
                          "Unknown AMPDU action\n");
        }
 
+       local_bh_enable();
+
        return ret;
 }
 
 
  *     is the first frame we expect to perform the action on. Notice
  *     that TX/RX_STOP can pass NULL for this parameter.
  *     Returns a negative error code on failure.
- *     The callback must be atomic.
+ *     The callback can sleep.
  *
  * @get_survey: Return per-channel survey information
  *
 
 
        might_sleep();
 
-       local_bh_disable();
        if (local->ops->ampdu_action)
                ret = local->ops->ampdu_action(&local->hw, &sdata->vif, action,
                                               sta, tid, ssn);
-       local_bh_enable();
+
        trace_drv_ampdu_action(local, sdata, action, sta, tid, ssn, ret);
        return ret;
 }