From: Christophe JAILLET <christophe.jail...@wanadoo.fr>

[ Upstream commit d2ab7f00f4321370a8ee14e5630d4349fdacc42e ]

A possible call chain is as follow:
  mwifiex_sdio_interrupt                            (sdio.c)
    --> mwifiex_main_process                        (main.c)
      --> mwifiex_process_cmdresp                   (cmdevt.c)
        --> mwifiex_process_sta_cmdresp             (sta_cmdresp.c)
          --> mwifiex_ret_802_11_scan               (scan.c)
            --> mwifiex_parse_single_response_buf   (scan.c)

'mwifiex_sdio_interrupt()' is an interrupt function.

Also note that 'mwifiex_ret_802_11_scan()' already uses GFP_ATOMIC.

So use GFP_ATOMIC instead of GFP_KERNEL when memory is allocated in
'mwifiex_parse_single_response_buf()'.

Fixes: 7c6fa2a843c5 ("mwifiex: use cfg80211 dynamic scan table and 
cfg80211_get_bss API")
or
Fixes: 601216e12c65e ("mwifiex: process RX packets in SDIO IRQ thread directly")
Signed-off-by: Christophe JAILLET <christophe.jail...@wanadoo.fr>
Signed-off-by: Kalle Valo <kv...@codeaurora.org>
Link: 
https://lore.kernel.org/r/20200809092906.744621-1-christophe.jail...@wanadoo.fr
Signed-off-by: Sasha Levin <sas...@kernel.org>
---
 drivers/net/wireless/marvell/mwifiex/scan.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/net/wireless/marvell/mwifiex/scan.c 
b/drivers/net/wireless/marvell/mwifiex/scan.c
index 85d6d5f3dce5b..c9f6cd2919699 100644
--- a/drivers/net/wireless/marvell/mwifiex/scan.c
+++ b/drivers/net/wireless/marvell/mwifiex/scan.c
@@ -1895,7 +1895,7 @@ mwifiex_parse_single_response_buf(struct mwifiex_private 
*priv, u8 **bss_info,
                                            chan, CFG80211_BSS_FTYPE_UNKNOWN,
                                            bssid, timestamp,
                                            cap_info_bitmap, beacon_period,
-                                           ie_buf, ie_len, rssi, GFP_KERNEL);
+                                           ie_buf, ie_len, rssi, GFP_ATOMIC);
                        if (bss) {
                                bss_priv = (struct mwifiex_bss_priv *)bss->priv;
                                bss_priv->band = band;
-- 
2.25.1



Reply via email to