In the cfg80211_rx_mgmt(), parameter @gfp was used for the memory allocation.
But, memory get allocated under spin_lock_bh(), this implies atomic context.
So, one can't use GFP_KERNEL, only variants with no __GFP_WAIT. Actually, in all
occurrences GFP_ATOMIC is used (wil6210 use GFP_KERNEL by mistake),
and it should be this way or warning triggered in the memory allocation code.
Remove @gfp parameter as no actual choice exist, and use hard coded
GFP_ATOMIC for memory allocation.
Signed-off-by: Vladimir Kondratiev <qca_vkondrat@qca.qualcomm.com>
Signed-off-by: Johannes Berg <johannes.berg@intel.com>
                   dlen, freq, vif->probe_req_report);
 
        if (vif->probe_req_report || vif->nw_type == AP_NETWORK)
-               cfg80211_rx_mgmt(&vif->wdev, freq, 0, ev->data, dlen, 0,
-                                GFP_ATOMIC);
+               cfg80211_rx_mgmt(&vif->wdev, freq, 0, ev->data, dlen, 0);
 
        return 0;
 }
                return -EINVAL;
        }
        ath6kl_dbg(ATH6KL_DBG_WMI, "rx_action: len=%u freq=%u\n", dlen, freq);
-       cfg80211_rx_mgmt(&vif->wdev, freq, 0, ev->data, dlen, 0, GFP_ATOMIC);
+       cfg80211_rx_mgmt(&vif->wdev, freq, 0, ev->data, dlen, 0);
 
        return 0;
 }
 
                }
        } else {
                cfg80211_rx_mgmt(wil->wdev, freq, signal,
-                                (void *)rx_mgmt_frame, d_len, 0, GFP_KERNEL);
+                                (void *)rx_mgmt_frame, d_len, 0);
        }
 }
 
 
                                              IEEE80211_BAND_5GHZ);
 
        wdev = &ifp->vif->wdev;
-       cfg80211_rx_mgmt(wdev, freq, 0, (u8 *)mgmt_frame, mgmt_frame_len, 0,
-                        GFP_ATOMIC);
+       cfg80211_rx_mgmt(wdev, freq, 0, (u8 *)mgmt_frame, mgmt_frame_len, 0);
 
        kfree(mgmt_frame);
        return 0;
                                              IEEE80211_BAND_2GHZ :
                                              IEEE80211_BAND_5GHZ);
 
-       cfg80211_rx_mgmt(&vif->wdev, freq, 0, mgmt_frame, mgmt_frame_len, 0,
-                        GFP_ATOMIC);
+       cfg80211_rx_mgmt(&vif->wdev, freq, 0, mgmt_frame, mgmt_frame_len, 0);
 
        brcmf_dbg(INFO, "mgmt_frame_len (%d) , e->datalen (%d), chanspec (%04x), freq (%d)\n",
                  mgmt_frame_len, e->datalen, chanspec, freq);
 
 
        cfg80211_rx_mgmt(priv->wdev, priv->roc_cfg.chan.center_freq,
                         CAL_RSSI(rx_pd->snr, rx_pd->nf), skb->data, pkt_len,
-                        0, GFP_ATOMIC);
+                        0);
 
        return 0;
 }
 
                                                      IEEE80211_BAND_5GHZ);
 
        if (cfg80211_rx_mgmt(padapter->rtw_wdev, freq, 0, pframe,
-                            skb->len, 0, GFP_ATOMIC))
+                            skb->len, 0))
                return _SUCCESS;
 
        return _FAIL;
 
                                                      IEEE80211_BAND_5GHZ);
 
        cfg80211_rx_mgmt(padapter->rtw_wdev, freq, 0, pmgmt_frame, frame_len,
-                        0, GFP_ATOMIC);
+                        0);
 #endif /* defined(RTW_USE_CFG80211_STA_EVENT) */
 }
 
        frame_len = sizeof(struct ieee80211_hdr_3addr) + 2;
 
        cfg80211_rx_mgmt(padapter->rtw_wdev, freq, 0, (u8 *)&mgmt, frame_len,
-                        0, GFP_ATOMIC);
+                        0);
 #endif /* defined(RTW_USE_CFG80211_STA_EVENT) */
 }
 
 
  * @buf: Management frame (header + body)
  * @len: length of the frame data
  * @flags: flags, as defined in enum nl80211_rxmgmt_flags
- * @gfp: context flags
  *
  * This function is called whenever an Action frame is received for a station
  * mode interface, but is not processed in kernel.
  * driver is responsible for rejecting the frame.
  */
 bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_dbm,
-                     const u8 *buf, size_t len, u32 flags, gfp_t gfp);
+                     const u8 *buf, size_t len, u32 flags);
 
 /**
  * cfg80211_mgmt_tx_status - notification of TX status for management frame
 
                sig = status->signal;
 
        if (cfg80211_rx_mgmt(&rx->sdata->wdev, status->freq, sig,
-                            rx->skb->data, rx->skb->len, 0, GFP_ATOMIC)) {
+                            rx->skb->data, rx->skb->len, 0)) {
                if (rx->sta)
                        rx->sta->rx_packets++;
                dev_kfree_skb(rx->skb);
 
 }
 
 bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_mbm,
-                     const u8 *buf, size_t len, u32 flags, gfp_t gfp)
+                     const u8 *buf, size_t len, u32 flags)
 {
        struct wiphy *wiphy = wdev->wiphy;
        struct cfg80211_registered_device *rdev = wiphy_to_rdev(wiphy);
                /* Indicate the received Action frame to user space */
                if (nl80211_send_mgmt(rdev, wdev, reg->nlportid,
                                      freq, sig_mbm,
-                                     buf, len, flags, gfp))
+                                     buf, len, flags, GFP_ATOMIC))
                        continue;
 
                result = true;