diff options
author | John W. Linville <linville@tuxdriver.com> | 2014-06-26 11:39:36 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2014-06-26 11:39:36 -0400 |
commit | e055a6e20a9105551295da164c31179b82c6227e (patch) | |
tree | 469354a458b863373d021fac599dd58e6dbc3b83 | |
parent | c6bff5449fa78e1d524bb5b67b8ab82faf835bff (diff) | |
parent | dfa413de1e4388818f7dcdce0a90d6212e74895b (diff) |
Merge branch 'ath-current' of git://github.com/kvalo/ath
-rw-r--r-- | drivers/net/wireless/ath/ath10k/core.c | 6 | ||||
-rw-r--r-- | drivers/net/wireless/ath/ath10k/htt_rx.c | 18 |
2 files changed, 5 insertions, 19 deletions
diff --git a/drivers/net/wireless/ath/ath10k/core.c b/drivers/net/wireless/ath/ath10k/core.c index 82017f56e661..e6c56c5bb0f6 100644 --- a/drivers/net/wireless/ath/ath10k/core.c +++ b/drivers/net/wireless/ath/ath10k/core.c | |||
@@ -795,7 +795,11 @@ int ath10k_core_start(struct ath10k *ar) | |||
795 | if (status) | 795 | if (status) |
796 | goto err_htc_stop; | 796 | goto err_htc_stop; |
797 | 797 | ||
798 | ar->free_vdev_map = (1 << TARGET_NUM_VDEVS) - 1; | 798 | if (test_bit(ATH10K_FW_FEATURE_WMI_10X, ar->fw_features)) |
799 | ar->free_vdev_map = (1 << TARGET_10X_NUM_VDEVS) - 1; | ||
800 | else | ||
801 | ar->free_vdev_map = (1 << TARGET_NUM_VDEVS) - 1; | ||
802 | |||
799 | INIT_LIST_HEAD(&ar->arvifs); | 803 | INIT_LIST_HEAD(&ar->arvifs); |
800 | 804 | ||
801 | if (!test_bit(ATH10K_FLAG_FIRST_BOOT_DONE, &ar->dev_flags)) | 805 | if (!test_bit(ATH10K_FLAG_FIRST_BOOT_DONE, &ar->dev_flags)) |
diff --git a/drivers/net/wireless/ath/ath10k/htt_rx.c b/drivers/net/wireless/ath/ath10k/htt_rx.c index 6c102b1312ff..eebc860c3655 100644 --- a/drivers/net/wireless/ath/ath10k/htt_rx.c +++ b/drivers/net/wireless/ath/ath10k/htt_rx.c | |||
@@ -312,7 +312,6 @@ static int ath10k_htt_rx_amsdu_pop(struct ath10k_htt *htt, | |||
312 | int msdu_len, msdu_chaining = 0; | 312 | int msdu_len, msdu_chaining = 0; |
313 | struct sk_buff *msdu; | 313 | struct sk_buff *msdu; |
314 | struct htt_rx_desc *rx_desc; | 314 | struct htt_rx_desc *rx_desc; |
315 | bool corrupted = false; | ||
316 | 315 | ||
317 | lockdep_assert_held(&htt->rx_ring.lock); | 316 | lockdep_assert_held(&htt->rx_ring.lock); |
318 | 317 | ||
@@ -439,9 +438,6 @@ static int ath10k_htt_rx_amsdu_pop(struct ath10k_htt *htt, | |||
439 | last_msdu = __le32_to_cpu(rx_desc->msdu_end.info0) & | 438 | last_msdu = __le32_to_cpu(rx_desc->msdu_end.info0) & |
440 | RX_MSDU_END_INFO0_LAST_MSDU; | 439 | RX_MSDU_END_INFO0_LAST_MSDU; |
441 | 440 | ||
442 | if (msdu_chaining && !last_msdu) | ||
443 | corrupted = true; | ||
444 | |||
445 | if (last_msdu) { | 441 | if (last_msdu) { |
446 | msdu->next = NULL; | 442 | msdu->next = NULL; |
447 | break; | 443 | break; |
@@ -457,20 +453,6 @@ static int ath10k_htt_rx_amsdu_pop(struct ath10k_htt *htt, | |||
457 | msdu_chaining = -1; | 453 | msdu_chaining = -1; |
458 | 454 | ||
459 | /* | 455 | /* |
460 | * Apparently FW sometimes reports weird chained MSDU sequences with | ||
461 | * more than one rx descriptor. This seems like a bug but needs more | ||
462 | * analyzing. For the time being fix it by dropping such sequences to | ||
463 | * avoid blowing up the host system. | ||
464 | */ | ||
465 | if (corrupted) { | ||
466 | ath10k_warn("failed to pop chained msdus, dropping\n"); | ||
467 | ath10k_htt_rx_free_msdu_chain(*head_msdu); | ||
468 | *head_msdu = NULL; | ||
469 | *tail_msdu = NULL; | ||
470 | msdu_chaining = -EINVAL; | ||
471 | } | ||
472 | |||
473 | /* | ||
474 | * Don't refill the ring yet. | 456 | * Don't refill the ring yet. |
475 | * | 457 | * |
476 | * First, the elements popped here are still in use - it is not | 458 | * First, the elements popped here are still in use - it is not |