ipw2200: use kmalloc for large local variables
Fixed below compiler warning: drivers/net/wireless/ipw2x00/ipw2200.c: In function ‘ipw_load_firmware’: drivers/net/wireless/ipw2x00/ipw2200.c:3260: warning: the frame size of 1168 bytes is larger than 1024 bytes Signed-off-by: Zhu Yi <yi.zhu@intel.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
This commit is contained in:
Родитель
5f13bfac07
Коммит
41093167ec
|
@ -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;
|
||||
}
|
||||
|
|
Загрузка…
Ссылка в новой задаче