aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net/wireless/rtlwifi/pci.c
diff options
context:
space:
mode:
authorSimon Graham <simon.graham@virtualcomputer.com>2012-02-07 19:07:38 -0500
committerLuis Henriques <luis.henriques@canonical.com>2012-04-05 11:17:21 -0400
commit01e5cfdbad88cc93c34b55b0015587375acffed4 (patch)
treee041a533cebccfe4a8cc22af146758cd1dbbbd2b /drivers/net/wireless/rtlwifi/pci.c
parentc86f3c6744c1f01ae16835da1b1f6b9f1fed33f2 (diff)
rtlwifi: Handle previous allocation failures when freeing device memory
BugLink: http://bugs.launchpad.net/bugs/971808 commit 7f66c2f93e5779625c10d262c84537427a2673ca upstream. Handle previous allocation failures when freeing device memory Signed-off-by: Simon Graham <simon.graham@virtualcomputer.com> Signed-off-by: Larry Finger <Larry.Finger@lwfinger.net> Signed-off-by: John W. Linville <linville@tuxdriver.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Diffstat (limited to 'drivers/net/wireless/rtlwifi/pci.c')
-rw-r--r--drivers/net/wireless/rtlwifi/pci.c16
1 files changed, 10 insertions, 6 deletions
diff --git a/drivers/net/wireless/rtlwifi/pci.c b/drivers/net/wireless/rtlwifi/pci.c
index c872a232427..6c56198e26b 100644
--- a/drivers/net/wireless/rtlwifi/pci.c
+++ b/drivers/net/wireless/rtlwifi/pci.c
@@ -1180,10 +1180,12 @@ static void _rtl_pci_free_tx_ring(struct ieee80211_hw *hw,
1180 ring->idx = (ring->idx + 1) % ring->entries; 1180 ring->idx = (ring->idx + 1) % ring->entries;
1181 } 1181 }
1182 1182
1183 pci_free_consistent(rtlpci->pdev, 1183 if (ring->desc) {
1184 sizeof(*ring->desc) * ring->entries, 1184 pci_free_consistent(rtlpci->pdev,
1185 ring->desc, ring->dma); 1185 sizeof(*ring->desc) * ring->entries,
1186 ring->desc = NULL; 1186 ring->desc, ring->dma);
1187 ring->desc = NULL;
1188 }
1187} 1189}
1188 1190
1189static void _rtl_pci_free_rx_ring(struct rtl_pci *rtlpci) 1191static void _rtl_pci_free_rx_ring(struct rtl_pci *rtlpci)
@@ -1207,12 +1209,14 @@ static void _rtl_pci_free_rx_ring(struct rtl_pci *rtlpci)
1207 kfree_skb(skb); 1209 kfree_skb(skb);
1208 } 1210 }
1209 1211
1210 pci_free_consistent(rtlpci->pdev, 1212 if (rtlpci->rx_ring[rx_queue_idx].desc) {
1213 pci_free_consistent(rtlpci->pdev,
1211 sizeof(*rtlpci->rx_ring[rx_queue_idx]. 1214 sizeof(*rtlpci->rx_ring[rx_queue_idx].
1212 desc) * rtlpci->rxringcount, 1215 desc) * rtlpci->rxringcount,
1213 rtlpci->rx_ring[rx_queue_idx].desc, 1216 rtlpci->rx_ring[rx_queue_idx].desc,
1214 rtlpci->rx_ring[rx_queue_idx].dma); 1217 rtlpci->rx_ring[rx_queue_idx].dma);
1215 rtlpci->rx_ring[rx_queue_idx].desc = NULL; 1218 rtlpci->rx_ring[rx_queue_idx].desc = NULL;
1219 }
1216 } 1220 }
1217} 1221}
1218 1222