Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1752354AbbLUWGd (ORCPT ); Mon, 21 Dec 2015 17:06:33 -0500 Received: from webmail.lairdtech.com ([63.123.150.69]:61516 "EHLO webmail.lairdtech.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751329AbbLUWG3 (ORCPT ); Mon, 21 Dec 2015 17:06:29 -0500 X-Greylist: delayed 340 seconds by postgrey-1.27 at vger.kernel.org; Mon, 21 Dec 2015 17:06:29 EST From: Dan Kephart To: Souptick Joarder , Brent Taylor CC: "netdev@vger.kernel.org" , Kalle Valo , "ath6kl@lists.infradead.org" , "linux-wireless@vger.kernel.org" , "linux-kernel@vger.kernel.org" Subject: Re: [PATCH] ath6kl: Use vmalloc to allocate ar->fw for api1 method Thread-Topic: [PATCH] ath6kl: Use vmalloc to allocate ar->fw for api1 method Thread-Index: AQHRPCUeuJG4SF56vEea2Ug7ggI0m57WH0wA Date: Mon, 21 Dec 2015 22:00:40 +0000 Message-ID: References: <1448948470-31111-1-git-send-email-motobud@gmail.com> In-Reply-To: Accept-Language: en-US Content-Language: en-US X-MS-Has-Attach: X-MS-TNEF-Correlator: user-agent: Microsoft-MacOutlook/0.0.0.151105 x-originating-ip: [10.37.152.5] Content-Type: text/plain; charset="utf-8" Content-ID: MIME-Version: 1.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Transfer-Encoding: 8bit X-MIME-Autoconverted: from base64 to 8bit by mail.home.local id tBLM6bNS005932 Content-Length: 3139 Lines: 88 Hi Brent and Souptick, On 12/21/15, 2:23 PM, "ath6kl on behalf of Souptick Joarder" wrote: >Hi Brent, > >On Tue, Dec 1, 2015 at 11:11 AM, Brent Taylor wrote: >> Since commit 8437754c83351d6213c1a47ff029c1126d6042a7, ar->fw is expected to be pointing to memory allocated by vmalloc. If the api1 method (via ath6kl_fetch_fw_api1) is used to allocate memory for ar->fw, then kmemdup is used. This patch checks if the firmware being loaded is the 'fw' image, then use vmalloc, otherwise use kmalloc. >> >> Signed-off-by: Brent Taylor >> --- >> drivers/net/wireless/ath/ath6kl/init.c | 7 ++++++- >> 1 file changed, 6 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/net/wireless/ath/ath6kl/init.c b/drivers/net/wireless/ath/ath6kl/init.c >> index 6ae0734..4f2b124d 100644 >> --- a/drivers/net/wireless/ath/ath6kl/init.c >> +++ b/drivers/net/wireless/ath/ath6kl/init.c >> @@ -673,10 +673,15 @@ static int ath6kl_get_fw(struct ath6kl *ar, const char *filename, >> return ret; >> >> *fw_len = fw_entry->size; >> - *fw = kmemdup(fw_entry->data, fw_entry->size, GFP_KERNEL); >> + if (&ar->fw == fw) >> + *fw = vmalloc(fw_entry->size); >> + else >> + *fw = kmalloc(fw_entry->size, GFP_KERNEL); > > Why vmalloc and kmalloc both are required? can't use either >vmalloc or kmalloc? My guess is the reason to use both vmalloc and kmalloc is that the firmware blob can be near 128KB. I know our ar6003 firmwares approach that. So vmalloc must have been chosen to avoid any issues if it was greater than 128KB. So kmalloc is used for all the small firmware pieces (board data, otp.bin, etc) but vmalloc for the firmware itself. I personally fixed this issue for loading the firmware (but not board data, opt.bin, etc) in the api1 and testmode functions by have it call a new helper function: static int ath6kl_get_fw_vm(struct ath6kl *ar, const char *filename, u8 **fw, size_t *fw_len) { const struct firmware *fw_entry; int ret; ret = request_firmware(&fw_entry, filename, ar->dev); if (ret) return ret; *fw_len = fw_entry->size; *fw = vmalloc(*fw_len); if (*fw == NULL) ret = -ENOMEM; memcpy(*fw, fw_entry->data, *fw_len); release_firmware(fw_entry); return ret; } >> >> if (*fw == NULL) >> ret = -ENOMEM; >> + else >> + memcpy(*fw, fw_entry->data, fw_entry->size); >> >> release_firmware(fw_entry); >> >> -- >> 2.6.3 >> >> -- >> To unsubscribe from this list: send the line "unsubscribe linux-wireless" in >> the body of a message to majordomo@vger.kernel.org >> More majordomo info at http://vger.kernel.org/majordomo-info.html > >-Souptick > >_______________________________________________ >ath6kl mailing list >ath6kl@lists.infradead.org >http://lists.infradead.org/mailman/listinfo/ath6kl - Dan Kephart ????{.n?+???????+%?????ݶ??w??{.n?+????{??G?????{ay?ʇڙ?,j??f???h?????????z_??(?階?ݢj"???m??????G????????????&???~???iO???z??v?^?m???? ????????I?