Здравствуйте, совственно говоря, есть сабжевая карточка, которая на частоте 5GHz (на 2.4 все ок) вылетает (не сразу, в среднем раз в 2-6 часов) с криком «fail to flush all tx fifo queues» + 40 строк о том как ей нехорошо. И есть небольшой патчик с которым она продержалась уже 1.5 дня. Между тем, наверняка не со всеми карточками дела обстоят так паршиво, и вполне может быть, что этот патч внесет кому-то регрессию. Но я не считаю правильным патчить каждое новое ядро, поэтому хочу внести патч в дерево ядра, но 3 «но»:
1. хотелось бы удостовериться, что патч не принесет плохих ништяков, если карточка не N6300
2. кому (Линусу или Грегу) послать патч?
3. и как блин это сделать? %) тупо написать на lkml.org?
ну так вот, ищутся добрые самаритяне с wifi-карточками интела в их ноутбуках и желающие помочь протестировать патч :) (естественно, упоминание в списке тестеров гарантируется)
сам патчик успешно накладывается на 3.{12,13,14} (на более старых не пробовал)
~/devel/linux-3.14-rc1$ patch -p0 < iwlwifi.patch
--- drivers/net/wireless/iwlwifi/dvm/tx.c-orig 2014-02-06 08:48:31.635741095 +0400
+++ drivers/net/wireless/iwlwifi/dvm/tx.c 2014-02-06 09:10:15.491772083 +0400
@@ -1185,13 +1185,6 @@
next_reclaimed = ssn;
}
- if (tid != IWL_TID_NON_QOS) {
- priv->tid_data[sta_id][tid].next_reclaimed =
- next_reclaimed;
- IWL_DEBUG_TX_REPLY(priv, "Next reclaimed packet:%d\n",
- next_reclaimed);
- }
-
iwl_trans_reclaim(priv->trans, txq_id, ssn, &skbs);
iwlagn_check_ratid_empty(priv, sta_id, tid);
@@ -1239,8 +1232,11 @@
info->flags |= IEEE80211_TX_STAT_AMPDU_NO_BACK;
iwlagn_set_tx_status(priv, IEEE80211_SKB_CB(skb),
tx_resp);
- if (!is_agg)
+ if (!is_agg) {
iwlagn_non_agg_tx_status(priv, ctx, hdr->addr1);
+ if (status == TX_STATUS_FAIL_FIFO_FLUSHED)
+ next_reclaimed = ((hdr->seq_ctrl + 0x10) & IEEE80211_SCTL_SEQ) >> 4;
+ }
freed++;
}