diff options
author | Sara Sharon <sara.sharon@intel.com> | 2017-01-03 14:03:35 -0500 |
---|---|---|
committer | Greg Kroah-Hartman <gregkh@linuxfoundation.org> | 2017-05-14 08:00:16 -0400 |
commit | a6fe39262c518c105f7003dca5eb5ae45b72713e (patch) | |
tree | 9781a1b033ae7a9ecb0f52f9a89f9b550c75bc18 | |
parent | 20a9de99a0da9021e9d00db635bab47eeb3ca978 (diff) |
iwlwifi: mvm: fix reorder timer re-arming
commit 5351f9ab254c30d41659924265f1ecd7b4758d9e upstream.
When NSSN is behind the reorder buffer due to timeout
the reorder timer isn't getting re-armed until NSSN
catches up. Fix it.
Fixes: 0690405fef29 ("iwlwifi: mvm: add reorder timeout per frame")
Signed-off-by: Sara Sharon <sara.sharon@intel.com>
Signed-off-by: Luca Coelho <luciano.coelho@intel.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r-- | drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c index 6c802cee900c..a481eb41f693 100644 --- a/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c +++ b/drivers/net/wireless/intel/iwlwifi/mvm/rxmq.c | |||
@@ -409,7 +409,7 @@ static void iwl_mvm_release_frames(struct iwl_mvm *mvm, | |||
409 | 409 | ||
410 | /* ignore nssn smaller than head sn - this can happen due to timeout */ | 410 | /* ignore nssn smaller than head sn - this can happen due to timeout */ |
411 | if (iwl_mvm_is_sn_less(nssn, ssn, reorder_buf->buf_size)) | 411 | if (iwl_mvm_is_sn_less(nssn, ssn, reorder_buf->buf_size)) |
412 | return; | 412 | goto set_timer; |
413 | 413 | ||
414 | while (iwl_mvm_is_sn_less(ssn, nssn, reorder_buf->buf_size)) { | 414 | while (iwl_mvm_is_sn_less(ssn, nssn, reorder_buf->buf_size)) { |
415 | int index = ssn % reorder_buf->buf_size; | 415 | int index = ssn % reorder_buf->buf_size; |
@@ -432,6 +432,7 @@ static void iwl_mvm_release_frames(struct iwl_mvm *mvm, | |||
432 | } | 432 | } |
433 | reorder_buf->head_sn = nssn; | 433 | reorder_buf->head_sn = nssn; |
434 | 434 | ||
435 | set_timer: | ||
435 | if (reorder_buf->num_stored && !reorder_buf->removed) { | 436 | if (reorder_buf->num_stored && !reorder_buf->removed) { |
436 | u16 index = reorder_buf->head_sn % reorder_buf->buf_size; | 437 | u16 index = reorder_buf->head_sn % reorder_buf->buf_size; |
437 | 438 | ||