Commit 03895c84 authored by Lorenzo Bianconi's avatar Lorenzo Bianconi Committed by Johannes Berg

wifi: mac80211: add gfp_t parameter to ieeee80211_obss_color_collision_notify

Introduce the capability to specify gfp_t parameter to
ieeee80211_obss_color_collision_notify routine since it runs in
interrupt context in ieee80211_rx_check_bss_color_collision().

Fixes: 6d945a33 ("mac80211: introduce BSS color collision detection")
Co-developed-by: default avatarRyder Lee <ryder.lee@mediatek.com>
Signed-off-by: default avatarRyder Lee <ryder.lee@mediatek.com>
Signed-off-by: default avatarLorenzo Bianconi <lorenzo@kernel.org>
Link: https://lore.kernel.org/r/02c990fb3fbd929c8548a656477d20d6c0427a13.1655419135.git.lorenzo@kernel.orgSigned-off-by: default avatarJohannes Berg <johannes.berg@intel.com>
parent 3f3558c8
...@@ -3822,7 +3822,8 @@ ath11k_wmi_obss_color_collision_event(struct ath11k_base *ab, struct sk_buff *sk ...@@ -3822,7 +3822,8 @@ ath11k_wmi_obss_color_collision_event(struct ath11k_base *ab, struct sk_buff *sk
switch (ev->evt_type) { switch (ev->evt_type) {
case WMI_BSS_COLOR_COLLISION_DETECTION: case WMI_BSS_COLOR_COLLISION_DETECTION:
ieeee80211_obss_color_collision_notify(arvif->vif, ev->obss_color_bitmap); ieeee80211_obss_color_collision_notify(arvif->vif, ev->obss_color_bitmap,
GFP_KERNEL);
ath11k_dbg(ab, ATH11K_DBG_WMI, ath11k_dbg(ab, ATH11K_DBG_WMI,
"OBSS color collision detected vdev:%d, event:%d, bitmap:%08llx\n", "OBSS color collision detected vdev:%d, event:%d, bitmap:%08llx\n",
ev->vdev_id, ev->evt_type, ev->obss_color_bitmap); ev->vdev_id, ev->evt_type, ev->obss_color_bitmap);
......
...@@ -8462,11 +8462,12 @@ int cfg80211_bss_color_notify(struct net_device *dev, gfp_t gfp, ...@@ -8462,11 +8462,12 @@ int cfg80211_bss_color_notify(struct net_device *dev, gfp_t gfp,
* cfg80211_obss_color_collision_notify - notify about bss color collision * cfg80211_obss_color_collision_notify - notify about bss color collision
* @dev: network device * @dev: network device
* @color_bitmap: representations of the colors that the local BSS is aware of * @color_bitmap: representations of the colors that the local BSS is aware of
* @gfp: allocation flags
*/ */
static inline int cfg80211_obss_color_collision_notify(struct net_device *dev, static inline int cfg80211_obss_color_collision_notify(struct net_device *dev,
u64 color_bitmap) u64 color_bitmap, gfp_t gfp)
{ {
return cfg80211_bss_color_notify(dev, GFP_KERNEL, return cfg80211_bss_color_notify(dev, gfp,
NL80211_CMD_OBSS_COLOR_COLLISION, NL80211_CMD_OBSS_COLOR_COLLISION,
0, color_bitmap); 0, color_bitmap);
} }
......
...@@ -6960,10 +6960,11 @@ ieee80211_get_unsol_bcast_probe_resp_tmpl(struct ieee80211_hw *hw, ...@@ -6960,10 +6960,11 @@ ieee80211_get_unsol_bcast_probe_resp_tmpl(struct ieee80211_hw *hw,
* @vif: &struct ieee80211_vif pointer from the add_interface callback. * @vif: &struct ieee80211_vif pointer from the add_interface callback.
* @color_bitmap: a 64 bit bitmap representing the colors that the local BSS is * @color_bitmap: a 64 bit bitmap representing the colors that the local BSS is
* aware of. * aware of.
* @gfp: allocation flags
*/ */
void void
ieeee80211_obss_color_collision_notify(struct ieee80211_vif *vif, ieeee80211_obss_color_collision_notify(struct ieee80211_vif *vif,
u64 color_bitmap); u64 color_bitmap, gfp_t gfp);
/** /**
* ieee80211_is_tx_data - check if frame is a data frame * ieee80211_is_tx_data - check if frame is a data frame
......
...@@ -4468,14 +4468,14 @@ EXPORT_SYMBOL_GPL(ieee80211_color_change_finish); ...@@ -4468,14 +4468,14 @@ EXPORT_SYMBOL_GPL(ieee80211_color_change_finish);
void void
ieeee80211_obss_color_collision_notify(struct ieee80211_vif *vif, ieeee80211_obss_color_collision_notify(struct ieee80211_vif *vif,
u64 color_bitmap) u64 color_bitmap, gfp_t gfp)
{ {
struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif); struct ieee80211_sub_if_data *sdata = vif_to_sdata(vif);
if (sdata->vif.color_change_active || sdata->vif.csa_active) if (sdata->vif.color_change_active || sdata->vif.csa_active)
return; return;
cfg80211_obss_color_collision_notify(sdata->dev, color_bitmap); cfg80211_obss_color_collision_notify(sdata->dev, color_bitmap, gfp);
} }
EXPORT_SYMBOL_GPL(ieeee80211_obss_color_collision_notify); EXPORT_SYMBOL_GPL(ieeee80211_obss_color_collision_notify);
......
...@@ -3217,7 +3217,8 @@ ieee80211_rx_check_bss_color_collision(struct ieee80211_rx_data *rx) ...@@ -3217,7 +3217,8 @@ ieee80211_rx_check_bss_color_collision(struct ieee80211_rx_data *rx)
IEEE80211_HE_OPERATION_BSS_COLOR_MASK); IEEE80211_HE_OPERATION_BSS_COLOR_MASK);
if (color == bss_conf->he_bss_color.color) if (color == bss_conf->he_bss_color.color)
ieeee80211_obss_color_collision_notify(&rx->sdata->vif, ieeee80211_obss_color_collision_notify(&rx->sdata->vif,
BIT_ULL(color)); BIT_ULL(color),
GFP_ATOMIC);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment