[PATCH v3] ath10k: fix Rx aggregation reordering
Michal Kazior
michal.kazior at tieto.com
Wed Jul 16 05:35:41 PDT 2014
On 16 July 2014 13:38, Varka Bhadram <varkabhadram at gmail.com> wrote:
> On 07/16/2014 04:49 PM, Michal Kazior wrote:
>
> (...)
>
>
>> +static void ath10k_htt_rx_addba(struct ath10k *ar, struct htt_resp *resp)
>> +{
>> + struct htt_rx_addba *ev = &resp->rx_addba;
>> + struct ath10k_peer *peer;
>> + struct ath10k_vif *arvif;
>> + u16 info0, tid, peer_id;
>> +
>> + info0 = __le32_to_cpu(ev->info0);
>> + tid = MS(info0, HTT_RX_BA_INFO0_TID);
>> + peer_id = MS(info0, HTT_RX_BA_INFO0_PEER_ID);
>> +
>> + ath10k_dbg(ATH10K_DBG_HTT,
>> + "htt rx addba tid %hu peer_id %hu size %hhu\n",
>> + tid, peer_id, ev->window_size);
>> +
>> + spin_lock_bh(&ar->data_lock);
>> + peer = ath10k_peer_find_by_id(ar, peer_id);
>> + if (!peer) {
>> + ath10k_warn("received addba event for invalid peer_id:
>> %hu\n",
>> + peer_id);
>> + spin_unlock_bh(&ar->data_lock);
>> + return;
>> + }
>
>
> Here my concern in amount of time holding the lock...
>
> spin_lock_bh(&ar->data_lock);
> peer = ath10k_peer_find_by_id(ar, peer_id);
> if (!peer) {
> spin_unlock_bh(&ar->data_lock);
>
> ath10k_warn("received addba event for invalid peer_id: %hu\n",
> peer_id);
> return;
> }
>
> No need to of putting the debug message inside the critical region... :-)
Sounds reasonable in this case as I'm not printing spinlock-protected values.
[...]
>> +static int ath10k_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 ath10k_vif *arvif = ath10k_vif_to_arvif(vif);
>> +
>> + ath10k_dbg(ATH10K_DBG_MAC, "mac ampdu vdev_id %i sta %pM tid %hu
>> action %d\n",
>> + arvif->vdev_id, sta->addr, tid, action);
>> +
>> + switch (action) {
>> + case IEEE80211_AMPDU_RX_START:
>> + case IEEE80211_AMPDU_RX_STOP:
>> + /* HTT AddBa/DelBa events trigger mac80211 Rx BA session
>> + * creation/removal. Do we need to verify this?
>> + */
>> + return 0;
>> + case IEEE80211_AMPDU_TX_START:
>> + case IEEE80211_AMPDU_TX_STOP_CONT:
>> + case IEEE80211_AMPDU_TX_STOP_FLUSH:
>> + case IEEE80211_AMPDU_TX_STOP_FLUSH_CONT:
>> + case IEEE80211_AMPDU_TX_OPERATIONAL:
>> + /* Firmware offloads Tx aggregation entirely so deny
>> mac80211
>> + * Tx aggregation requests.
>> + */
>> + break;
>
>
> Instead of break here we can directly do: return -EOPNOTSUPP;
True.
Thanks for review. I'll wait a bit more before I re-post v4 (although
there's no rush since the patch needs mac80211 patches to be applied
first).
Michał
More information about the ath10k
mailing list