diff options
author | John W. Linville <linville@tuxdriver.com> | 2012-08-24 12:25:30 -0400 |
---|---|---|
committer | John W. Linville <linville@tuxdriver.com> | 2012-08-24 12:25:30 -0400 |
commit | f20b6213f193f455a62ef9299ceca11f5531dff8 (patch) | |
tree | 737a14af45038252fc0e3863d62dde09432cd779 /drivers/net/wireless/iwlwifi/pcie/rx.c | |
parent | e6e94e392fddb8845bdd2e199f55ebf7d76cb58d (diff) | |
parent | a4881cc45a3fab4488e16c4934e149cfa620f1a9 (diff) |
Merge branch 'master' of git://git.kernel.org/pub/scm/linux/kernel/git/linville/wireless-next into for-davem
Diffstat (limited to 'drivers/net/wireless/iwlwifi/pcie/rx.c')
-rw-r--r-- | drivers/net/wireless/iwlwifi/pcie/rx.c | 16 |
1 files changed, 13 insertions, 3 deletions
diff --git a/drivers/net/wireless/iwlwifi/pcie/rx.c b/drivers/net/wireless/iwlwifi/pcie/rx.c index 39a6ca1f009..d80604a2bb1 100644 --- a/drivers/net/wireless/iwlwifi/pcie/rx.c +++ b/drivers/net/wireless/iwlwifi/pcie/rx.c @@ -421,13 +421,23 @@ static void iwl_rx_handle_rxbuf(struct iwl_trans *trans, index = SEQ_TO_INDEX(sequence); cmd_index = get_cmd_index(&txq->q, index); - if (reclaim) - cmd = txq->entries[cmd_index].cmd; - else + if (reclaim) { + struct iwl_pcie_tx_queue_entry *ent; + ent = &txq->entries[cmd_index]; + cmd = ent->copy_cmd; + WARN_ON_ONCE(!cmd && ent->meta.flags & CMD_WANT_HCMD); + } else { cmd = NULL; + } err = iwl_op_mode_rx(trans->op_mode, &rxcb, cmd); + if (reclaim) { + /* The original command isn't needed any more */ + kfree(txq->entries[cmd_index].copy_cmd); + txq->entries[cmd_index].copy_cmd = NULL; + } + /* * After here, we should always check rxcb._page_stolen, * if it is true then one of the handlers took the page. |