diff mbox series

brcmsmac: Use kvmalloc() for ucode allocations

Message ID 20180913061517.26295-1-tiwai@suse.de (mailing list archive)
State Accepted
Commit 6c3efbe77bc78bf49db851aec7f385be475afca6
Delegated to: Kalle Valo
Headers show
Series brcmsmac: Use kvmalloc() for ucode allocations | expand

Commit Message

Takashi Iwai Sept. 13, 2018, 6:15 a.m. UTC
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>
---
 .../net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c  | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

Comments

Kalle Valo Sept. 20, 2018, 12:11 p.m. UTC | #1
Takashi Iwai <tiwai@suse.de> wrote:

> 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>

Patch applied to wireless-drivers-next.git, thanks.

6c3efbe77bc7 brcmsmac: Use kvmalloc() for ucode allocations
diff mbox series

Patch

diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
index ecc89e718b9c..6255fb6d97a7 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmsmac/mac80211_if.c
@@ -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);
 }
 
 /*