From: Johannes Berg <johannes.berg@xxxxxxxxx> 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@xxxxxxxxx> --- drivers/net/wireless/ath/ath9k/main.c | 4 ++++ include/net/mac80211.h | 2 +- net/mac80211/driver-ops.h | 3 +-- 3 files changed, 6 insertions(+), 3 deletions(-) --- wireless-testing.orig/include/net/mac80211.h 2010-06-07 12:42:24.000000000 +0200 +++ wireless-testing/include/net/mac80211.h 2010-06-07 12:42:35.000000000 +0200 @@ -1640,7 +1640,7 @@ enum ieee80211_ampdu_mlme_action { * 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 * --- wireless-testing.orig/drivers/net/wireless/ath/ath9k/main.c 2010-06-07 12:43:05.000000000 +0200 +++ wireless-testing/drivers/net/wireless/ath/ath9k/main.c 2010-06-07 12:43:55.000000000 +0200 @@ -1769,6 +1769,8 @@ static int ath9k_ampdu_action(struct iee 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)) @@ -1798,6 +1800,8 @@ static int ath9k_ampdu_action(struct iee "Unknown AMPDU action\n"); } + local_bh_enable(); + return ret; } --- wireless-testing.orig/net/mac80211/driver-ops.h 2010-06-07 12:42:42.000000000 +0200 +++ wireless-testing/net/mac80211/driver-ops.h 2010-06-07 12:42:46.000000000 +0200 @@ -352,11 +352,10 @@ static inline int drv_ampdu_action(struc 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; } -- To unsubscribe from this list: send the line "unsubscribe linux-wireless" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html