Serve threading problems with the current release reorder timer implementation have been discovered. A lengthy discussion which lists some of the pitfalls and possible solutions can be found at: http://marc.info/?t=128635927000001 But Due to the complicated nature of the subject and the foreseeable advent of a new -rc1 cycle, it was decided to disable the feature for the time being. Signed-off-by: Christian Lamparter <chunkeey@xxxxxxxxxxxxxx> --- if we want, we could add a WARN_ON into the timer too. --- diff --git a/net/mac80211/rx.c b/net/mac80211/rx.c index b67221d..e1e02b5 100644 --- a/net/mac80211/rx.c +++ b/net/mac80211/rx.c @@ -622,6 +622,26 @@ static void ieee80211_sta_reorder_release(struct ieee80211_hw *hw, tid_agg_rx->buf_size; } + /* + * Disable the reorder release timer for now. + * + * The current implementation lacks a proper locking scheme + * which would protect vital statistic and debug counters + * from being updated by two different, but concurrent BHs. + * + * more information about the topic is available from: + * - thread: http://marc.info/?t=128635927000001 + * + * Why did it break: + * => http://marc.info/?l=linux-wireless&m=128636170811964 + * "Basically the thing is that until your patch, the data + * in the struct didn't actually need locking because it + * was accessed by the RX path only which is not concurrent." + * + * List of known things that need to be fixed/considered: + * => http://marc.info/?l=linux-wireless&m=128656352920957 + * + if (tid_agg_rx->stored_mpdu_num) { j = index = seq_sub(tid_agg_rx->head_seq_num, tid_agg_rx->ssn) % tid_agg_rx->buf_size; @@ -640,6 +660,9 @@ static void ieee80211_sta_reorder_release(struct ieee80211_hw *hw, } else { del_timer(&tid_agg_rx->reorder_timer); } + */ + +set_release_timer: } /* -- 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