aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorHauke Mehrtens <hauke@hauke-m.de>2012-05-18 14:22:53 -0400
committerJohn W. Linville <linville@tuxdriver.com>2012-05-25 11:16:16 -0400
commitedb9bc9a1e08f54adfdb4f4d31bca5a15aeb8ef0 (patch)
tree23b4683dc5897953fb92088301264c7ddc3ac23a /drivers/net
parent885ba1da689299ec52e646ca1a2429b8de55f364 (diff)
brcmfmac: use vmalloc to allocate mem for the firmware
The firmware is more than 300KB big and you should not use kmalloc for such big allocations. This allocation with kmalloc failed on my mips based device (BCM47186). Signed-off-by: Hauke Mehrtens <hauke@hauke-m.de> Acked-by: Franky Lin <frankyl@broadcom.com> Signed-off-by: John W. Linville <linville@tuxdriver.com>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/wireless/brcm80211/brcmfmac/usb.c5
1 files changed, 3 insertions, 2 deletions
diff --git a/drivers/net/wireless/brcm80211/brcmfmac/usb.c b/drivers/net/wireless/brcm80211/brcmfmac/usb.c
index 1d67ecf681b7..3e3524756263 100644
--- a/drivers/net/wireless/brcm80211/brcmfmac/usb.c
+++ b/drivers/net/wireless/brcm80211/brcmfmac/usb.c
@@ -28,6 +28,7 @@
28#include <linux/uaccess.h> 28#include <linux/uaccess.h>
29#include <linux/firmware.h> 29#include <linux/firmware.h>
30#include <linux/usb.h> 30#include <linux/usb.h>
31#include <linux/vmalloc.h>
31#include <net/cfg80211.h> 32#include <net/cfg80211.h>
32 33
33#include <defs.h> 34#include <defs.h>
@@ -1239,7 +1240,7 @@ static int brcmf_usb_get_fw(struct brcmf_usbdev_info *devinfo)
1239 return -EINVAL; 1240 return -EINVAL;
1240 } 1241 }
1241 1242
1242 devinfo->image = kmalloc(fw->size, GFP_ATOMIC); /* plus nvram */ 1243 devinfo->image = vmalloc(fw->size); /* plus nvram */
1243 if (!devinfo->image) 1244 if (!devinfo->image)
1244 return -ENOMEM; 1245 return -ENOMEM;
1245 1246
@@ -1602,7 +1603,7 @@ static struct usb_driver brcmf_usbdrvr = {
1602void brcmf_usb_exit(void) 1603void brcmf_usb_exit(void)
1603{ 1604{
1604 usb_deregister(&brcmf_usbdrvr); 1605 usb_deregister(&brcmf_usbdrvr);
1605 kfree(g_image.data); 1606 vfree(g_image.data);
1606 g_image.data = NULL; 1607 g_image.data = NULL;
1607 g_image.len = 0; 1608 g_image.len = 0;
1608} 1609}