]> asedeno.scripts.mit.edu Git - linux.git/commitdiff
brcmsmac: Use kvmalloc() for ucode allocations
authorTakashi Iwai <tiwai@suse.de>
Thu, 13 Sep 2018 06:15:17 +0000 (08:15 +0200)
committerKalle Valo <kvalo@codeaurora.org>
Thu, 20 Sep 2018 12:11:36 +0000 (15:11 +0300)
The ucode chunk might be relatively large and the allocation with
kmalloc() may fail occasionally.  Since the data isn't DMA-transferred
but by manual loops, we can use vmalloc instead of kmalloc.
For a better performance, though, kvmalloc() would be the best choice
in such a case, so let's replace with it.

Bugzilla: https://bugzilla.suse.com/show_bug.cgi?id=1103431
Signed-off-by: Takashi Iwai <tiwai@suse.de>
Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c

index ecc89e718b9c146865b6e17917e3fb51023614aa..6255fb6d97a7087dfcbf11cc9182afafbd4c4982 100644 (file)
@@ -1578,10 +1578,10 @@ int brcms_ucode_init_buf(struct brcms_info *wl, void **pbuf, u32 idx)
                        if (le32_to_cpu(hdr->idx) == idx) {
                                pdata = wl->fw.fw_bin[i]->data +
                                        le32_to_cpu(hdr->offset);
-                               *pbuf = kmemdup(pdata, len, GFP_KERNEL);
+                               *pbuf = kvmalloc(len, GFP_KERNEL);
                                if (*pbuf == NULL)
                                        goto fail;
-
+                               memcpy(*pbuf, pdata, len);
                                return 0;
                        }
                }
@@ -1629,7 +1629,7 @@ int brcms_ucode_init_uint(struct brcms_info *wl, size_t *n_bytes, u32 idx)
  */
 void brcms_ucode_free_buf(void *p)
 {
-       kfree(p);
+       kvfree(p);
 }
 
 /*