[PATCH 4/7] Fix error handling for DXE memory allocations
Pontus Fuchs
pontus.fuchs at gmail.com
Fri Jun 7 16:31:24 EDT 2013
Signed-off-by: Pontus Fuchs <pontus.fuchs at gmail.com>
---
dxe.c | 10 ++++++++++
1 file changed, 10 insertions(+)
diff --git a/dxe.c b/dxe.c
index 14e30cb..57a4f36 100644
--- a/dxe.c
+++ b/dxe.c
@@ -484,6 +484,8 @@ int wcn36xx_dxe_allocate_mem_pools(struct wcn36xx *wcn)
s = wcn->mgmt_mem_pool.chunk_size * WCN36XX_DXE_CH_DESC_NUMB_TX_H;
cpu_addr = dma_alloc_coherent(NULL, s, &wcn->mgmt_mem_pool.phy_addr,
GFP_KERNEL);
+ if (!cpu_addr)
+ goto out_err;
wcn->mgmt_mem_pool.virt_addr = cpu_addr;
memset(cpu_addr, 0, s);
@@ -497,9 +499,17 @@ int wcn36xx_dxe_allocate_mem_pools(struct wcn36xx *wcn)
s = wcn->data_mem_pool.chunk_size * WCN36XX_DXE_CH_DESC_NUMB_TX_L;
cpu_addr = dma_alloc_coherent(NULL, s, &wcn->data_mem_pool.phy_addr,
GFP_KERNEL);
+ if (!cpu_addr)
+ goto out_err;
+
wcn->data_mem_pool.virt_addr = cpu_addr;
memset(cpu_addr, 0, s);
return 0;
+
+out_err:
+ wcn36xx_dxe_free_mem_pools(wcn);
+ wcn36xx_error("Failed to allocate BD mempool");
+ return -ENOMEM;
}
void wcn36xx_dxe_free_mem_pools(struct wcn36xx *wcn)
--
1.7.10.4
More information about the wcn36xx
mailing list