Hi again Can you please try the attached patch ? I would like to know if it helps. Thanks ! On Sun, Nov 27, 2011 at 08:38, Emmanuel Grumbach <egrumbach@xxxxxxxxx> wrote: >> Yeah, that was my impression too, but still, I wanted to mention it. >> >>> I am already on week-end here and will look at it more carefully >>> later. First impression is that things are messy here. I guess we are >>> getting in a bad failure path that wasn't checked... >> >> No problem, I can cope with it. >> > > you can always disable 11n: modprobe 11n_disable=1. > > Well... Something is really weird here: > mac80211 requests from us to: > * start agg > * stop agg > * agg operational > > this is not a legal sequence > > BTW - I am under this impression that mac80211 hasn't been compiled > with HT debug flag. Can you please set this compilation flag ? > > I also would like you to add this line in iwlagn_mac_ampdu_action: > > > static int iwlagn_mac_ampdu_action(struct ieee80211_hw *hw, > struct ieee80211_vif *vif, > enum ieee80211_ampdu_mlme_action action, > struct ieee80211_sta *sta, u16 tid, u16 *ssn, > u8 buf_size) > { > struct iwl_priv *priv = hw->priv; > int ret = -EINVAL; > struct iwl_station_priv *sta_priv = (void *) sta->drv_priv; > > IWL_DEBUG_HT(priv, "A-MPDU action on addr %pM tid %d\n", > sta->addr, tid); > > dump_stack(); <<<<========================================= new line > > if (!(priv->cfg->sku & EEPROM_SKU_CAP_11N_ENABLE)) > return -EACCES; > > > > This will give an insight at why is mac80211 calling the driver and > better point me to the bug. > > > Thanks ! >
diff --git a/net/mac80211/agg-tx.c b/net/mac80211/agg-tx.c index d9b5340..f6436b9 100644 --- a/net/mac80211/agg-tx.c +++ b/net/mac80211/agg-tx.c @@ -778,6 +778,9 @@ void ieee80211_process_addba_resp(struct ieee80211_local *local, */ if (le16_to_cpu(mgmt->u.action.u.addba_resp.status) == WLAN_STATUS_SUCCESS && buf_size) { + if (test_bit(HT_AGG_STATE_WANT_STOP, &tid_tx->state)) + /* the addBA resp came too late */ + goto out; if (test_and_set_bit(HT_AGG_STATE_RESPONSE_RECEIVED, &tid_tx->state)) { /* ignore duplicate response */