mirror of https://gitee.com/openkylin/linux.git
brcmsmac: allocate ucode with GFP_KERNEL
The brcms_ucode_init_buf() duplicates the ucode chunks via kmemdup() with GFP_ATOMIC as a precondition of wl->lock acquired. This caused allocation failures sometimes as reported in the bugzilla below. When looking at the the real usage, one can find that it's called solely from brcms_request_fw(), and it's obviously outside the lock. Hence we can use GFP_KERNEL there safely for avoiding such allocation errors. Bugzilla: http://bugzilla.suse.com/show_bug.cgi?id=1085174 Signed-off-by: Takashi Iwai <tiwai@suse.de> Acked-by: Arend van Spriel <arend.vanspriel@broadcom.com> Signed-off-by: Kalle Valo <kvalo@codeaurora.org>
This commit is contained in:
parent
48eaee3f27
commit
b1c2d0f250
|
@ -1563,7 +1563,7 @@ void brcms_free_timer(struct brcms_timer *t)
|
|||
}
|
||||
|
||||
/*
|
||||
* precondition: perimeter lock has been acquired
|
||||
* precondition: no locking required
|
||||
*/
|
||||
int brcms_ucode_init_buf(struct brcms_info *wl, void **pbuf, u32 idx)
|
||||
{
|
||||
|
@ -1578,7 +1578,7 @@ 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_ATOMIC);
|
||||
*pbuf = kmemdup(pdata, len, GFP_KERNEL);
|
||||
if (*pbuf == NULL)
|
||||
goto fail;
|
||||
|
||||
|
|
Loading…
Reference in New Issue