diff options
Diffstat (limited to 'drivers/net/wireless/ath/carl9170/main.c')
-rw-r--r-- | drivers/net/wireless/ath/carl9170/main.c | 11 |
1 files changed, 1 insertions, 10 deletions
diff --git a/drivers/net/wireless/ath/carl9170/main.c b/drivers/net/wireless/ath/carl9170/main.c index f8ded84b7be8..ef5b6dc7b7f1 100644 --- a/drivers/net/wireless/ath/carl9170/main.c +++ b/drivers/net/wireless/ath/carl9170/main.c | |||
@@ -1430,18 +1430,10 @@ static int carl9170_op_ampdu_action(struct ieee80211_hw *hw, | |||
1430 | if (!sta_info->ht_sta) | 1430 | if (!sta_info->ht_sta) |
1431 | return -EOPNOTSUPP; | 1431 | return -EOPNOTSUPP; |
1432 | 1432 | ||
1433 | rcu_read_lock(); | ||
1434 | if (rcu_dereference(sta_info->agg[tid])) { | ||
1435 | rcu_read_unlock(); | ||
1436 | return -EBUSY; | ||
1437 | } | ||
1438 | |||
1439 | tid_info = kzalloc(sizeof(struct carl9170_sta_tid), | 1433 | tid_info = kzalloc(sizeof(struct carl9170_sta_tid), |
1440 | GFP_ATOMIC); | 1434 | GFP_ATOMIC); |
1441 | if (!tid_info) { | 1435 | if (!tid_info) |
1442 | rcu_read_unlock(); | ||
1443 | return -ENOMEM; | 1436 | return -ENOMEM; |
1444 | } | ||
1445 | 1437 | ||
1446 | tid_info->hsn = tid_info->bsn = tid_info->snx = (*ssn); | 1438 | tid_info->hsn = tid_info->bsn = tid_info->snx = (*ssn); |
1447 | tid_info->state = CARL9170_TID_STATE_PROGRESS; | 1439 | tid_info->state = CARL9170_TID_STATE_PROGRESS; |
@@ -1460,7 +1452,6 @@ static int carl9170_op_ampdu_action(struct ieee80211_hw *hw, | |||
1460 | list_add_tail_rcu(&tid_info->list, &ar->tx_ampdu_list); | 1452 | list_add_tail_rcu(&tid_info->list, &ar->tx_ampdu_list); |
1461 | rcu_assign_pointer(sta_info->agg[tid], tid_info); | 1453 | rcu_assign_pointer(sta_info->agg[tid], tid_info); |
1462 | spin_unlock_bh(&ar->tx_ampdu_list_lock); | 1454 | spin_unlock_bh(&ar->tx_ampdu_list_lock); |
1463 | rcu_read_unlock(); | ||
1464 | 1455 | ||
1465 | ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid); | 1456 | ieee80211_start_tx_ba_cb_irqsafe(vif, sta->addr, tid); |
1466 | break; | 1457 | break; |