iwlagn: fix cmd queue unmap
authorJohannes Berg <johannes.berg@intel.com>
Mon, 27 Jun 2011 14:48:52 +0000 (07:48 -0700)
committerWey-Yi Guy <wey-yi.w.guy@intel.com>
Mon, 27 Jun 2011 14:50:45 +0000 (07:50 -0700)
When we stop the device while a command is in
flight that uses multiple TBs, we can leak the
DMA buffers for the second and higher TBs. Fix
this by using iwlagn_unmap_tfd() as we do when
we normally recover the entry.

Signed-off-by: Johannes Berg <johannes.berg@intel.com>
Signed-off-by: Wey-Yi Guy <wey-yi.w.guy@intel.com>
drivers/net/wireless/iwlwifi/iwl-tx.c

index 157a642..8f20065 100644 (file)
@@ -310,10 +310,7 @@ void iwl_cmd_queue_unmap(struct iwl_priv *priv)
                i = get_cmd_index(q, q->read_ptr);
 
                if (txq->meta[i].flags & CMD_MAPPED) {
-                       pci_unmap_single(priv->pci_dev,
-                                        dma_unmap_addr(&txq->meta[i], mapping),
-                                        dma_unmap_len(&txq->meta[i], len),
-                                        PCI_DMA_BIDIRECTIONAL);
+                       iwlagn_unmap_tfd(priv, &txq->meta[i], &txq->tfds[i]);
                        txq->meta[i].flags = 0;
                }