cfg80211: remove @gfp parameter from cfg80211_rx_mgmt()
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>
This commit is contained in:
Родитель
649b2a4da5
Коммит
970fdfa89b
|
@ -619,8 +619,7 @@ static int ath6kl_wmi_rx_probe_req_event_rx(struct wmi *wmi, u8 *datap, int len,
|
|||
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;
|
||||
}
|
||||
|
@ -659,7 +658,7 @@ static int ath6kl_wmi_rx_action_event_rx(struct wmi *wmi, u8 *datap, int len,
|
|||
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;
|
||||
}
|
||||
|
|
|
@ -350,7 +350,7 @@ static void wmi_evt_rx_mgmt(struct wil6210_priv *wil, int id, void *d, int len)
|
|||
}
|
||||
} else {
|
||||
cfg80211_rx_mgmt(wil->wdev, freq, signal,
|
||||
(void *)rx_mgmt_frame, d_len, 0, GFP_KERNEL);
|
||||
(void *)rx_mgmt_frame, d_len, 0);
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -1431,8 +1431,7 @@ int brcmf_p2p_notify_action_frame_rx(struct brcmf_if *ifp,
|
|||
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;
|
||||
|
@ -1896,8 +1895,7 @@ s32 brcmf_p2p_notify_rx_mgmt_p2p_probereq(struct brcmf_if *ifp,
|
|||
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);
|
||||
|
|
|
@ -172,7 +172,7 @@ mwifiex_process_mgmt_packet(struct mwifiex_private *priv,
|
|||
|
||||
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;
|
||||
}
|
||||
|
|
|
@ -2128,7 +2128,7 @@ static int on_action_public23a(struct rtw_adapter *padapter,
|
|||
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;
|
||||
|
|
|
@ -2379,7 +2379,7 @@ void rtw_cfg80211_indicate_sta_assoc(struct rtw_adapter *padapter,
|
|||
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) */
|
||||
}
|
||||
|
||||
|
@ -2425,7 +2425,7 @@ void rtw_cfg80211_indicate_sta_disassoc(struct rtw_adapter *padapter,
|
|||
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) */
|
||||
}
|
||||
|
||||
|
|
|
@ -4412,7 +4412,6 @@ void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr,
|
|||
* @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.
|
||||
|
@ -4423,7 +4422,7 @@ void cfg80211_conn_failed(struct net_device *dev, const u8 *mac_addr,
|
|||
* 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
|
||||
|
|
|
@ -2725,7 +2725,7 @@ ieee80211_rx_h_userspace_mgmt(struct ieee80211_rx_data *rx)
|
|||
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);
|
||||
|
|
|
@ -605,7 +605,7 @@ int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev,
|
|||
}
|
||||
|
||||
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);
|
||||
|
@ -648,7 +648,7 @@ bool cfg80211_rx_mgmt(struct wireless_dev *wdev, int freq, int sig_mbm,
|
|||
/* 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;
|
||||
|
|
Загрузка…
Ссылка в новой задаче