diff options
author | Simon Graham <simon.graham@virtualcomputer.com> | 2012-02-07 19:07:38 -0500 |
---|---|---|
committer | Luis Henriques <luis.henriques@canonical.com> | 2012-04-05 11:17:21 -0400 |
commit | 01e5cfdbad88cc93c34b55b0015587375acffed4 (patch) | |
tree | e041a533cebccfe4a8cc22af146758cd1dbbbd2b /drivers/net/wireless/rtlwifi/pci.c | |
parent | c86f3c6744c1f01ae16835da1b1f6b9f1fed33f2 (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.c | 16 |
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 | ||
1189 | static void _rtl_pci_free_rx_ring(struct rtl_pci *rtlpci) | 1191 | static 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 | ||