|
@@ -3177,14 +3177,27 @@ static int ipw_load_firmware(struct ipw_priv *priv, u8 * data, size_t len)
|
|
|
int total_nr = 0;
|
|
|
int i;
|
|
|
struct pci_pool *pool;
|
|
|
- u32 *virts[CB_NUMBER_OF_ELEMENTS_SMALL];
|
|
|
- dma_addr_t phys[CB_NUMBER_OF_ELEMENTS_SMALL];
|
|
|
+ void **virts;
|
|
|
+ dma_addr_t *phys;
|
|
|
|
|
|
IPW_DEBUG_TRACE("<< : \n");
|
|
|
|
|
|
+ virts = kmalloc(sizeof(void *) * CB_NUMBER_OF_ELEMENTS_SMALL,
|
|
|
+ GFP_KERNEL);
|
|
|
+ if (!virts)
|
|
|
+ return -ENOMEM;
|
|
|
+
|
|
|
+ phys = kmalloc(sizeof(dma_addr_t) * CB_NUMBER_OF_ELEMENTS_SMALL,
|
|
|
+ GFP_KERNEL);
|
|
|
+ if (!phys) {
|
|
|
+ kfree(virts);
|
|
|
+ return -ENOMEM;
|
|
|
+ }
|
|
|
pool = pci_pool_create("ipw2200", priv->pci_dev, CB_MAX_LENGTH, 0, 0);
|
|
|
if (!pool) {
|
|
|
IPW_ERROR("pci_pool_create failed\n");
|
|
|
+ kfree(phys);
|
|
|
+ kfree(virts);
|
|
|
return -ENOMEM;
|
|
|
}
|
|
|
|
|
@@ -3254,6 +3267,8 @@ static int ipw_load_firmware(struct ipw_priv *priv, u8 * data, size_t len)
|
|
|
pci_pool_free(pool, virts[i], phys[i]);
|
|
|
|
|
|
pci_pool_destroy(pool);
|
|
|
+ kfree(phys);
|
|
|
+ kfree(virts);
|
|
|
|
|
|
return ret;
|
|
|
}
|