|
@@ -1430,18 +1430,10 @@ static int carl9170_op_ampdu_action(struct ieee80211_hw *hw,
|
|
|
if (!sta_info->ht_sta)
|
|
|
return -EOPNOTSUPP;
|
|
|
|
|
|
- rcu_read_lock();
|
|
|
- if (rcu_dereference(sta_info->agg[tid])) {
|
|
|
- rcu_read_unlock();
|
|
|
- return -EBUSY;
|
|
|
- }
|
|
|
-
|
|
|
tid_info = kzalloc(sizeof(struct carl9170_sta_tid),
|
|
|
GFP_ATOMIC);
|
|
|
- if (!tid_info) {
|
|
|
- rcu_read_unlock();
|
|
|
+ if (!tid_info)
|
|
|
return -ENOMEM;
|
|
|
- }
|
|
|
|
|
|
tid_info->hsn = tid_info->bsn = tid_info->snx = (*ssn);
|
|
|
tid_info->state = CARL9170_TID_STATE_PROGRESS;
|
|
@@ -1460,7 +1452,6 @@ static int carl9170_op_ampdu_action(struct ieee80211_hw *hw,
|
|
|
list_add_tail_rcu(&tid_info->list, &ar->tx_ampdu_list);
|
|
|
rcu_assign_pointer(sta_info->agg[tid], tid_info);
|
|
|
spin_unlock_bh(&ar->tx_ampdu_list_lock);
|
|
|
- rcu_read_unlock();
|
|
|
|
|
|
ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid);
|
|
|
break;
|