On 25 September 2013 11:38, Bartosz Markowski <bartosz.markowski@xxxxxxxxx> wrote: > @@ -1497,16 +1497,23 @@ static void ath10k_tx_htt(struct ath10k *ar, struct sk_buff *skb) > goto exit; > } > > - if (ieee80211_is_mgmt(hdr->frame_control)) > - ret = ath10k_htt_mgmt_tx(&ar->htt, skb); > - else if (ieee80211_is_nullfunc(hdr->frame_control)) > + if (ieee80211_is_mgmt(hdr->frame_control)) { > + if (test_bit(ATH10K_FW_FEATURE_HAS_WMI_MGMT_TX, > + ar->fw_features)) > + ret = ath10k_wmi_mgmt_tx(ar, skb); Due to recent changes (WMI commands can block/sleep) this cannot be so. ath10k_tx_htt() is called from an atomic context. I'm seeing 2 aproaches here: a) management frame queue, b) use ieee80211_{stop,wake}_queues() I'm worried (b) could degrade throughput. WMI endpoint has only 2 HTC credits meaning management frame bursts will lock out data frame tx. Michał. -- 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