mirror of
https://github.com/torvalds/linux.git
synced 2026-09-22 12:44:03 +02:00
wifi: mac80211: stop using ieee80211_mgmt_tx_cookie()
Now that cfg80211 pre-assigns the cookie before calling into mac80211, stop calling ieee80211_mgmt_tx_cookie() in all affected paths: - ieee80211_start_roc_work(): for normal ROC use the pre-assigned value directly instead of generating a new one. - ieee80211_attach_ack_skb(): the cookie is already set by the caller; remove the ieee80211_mgmt_tx_cookie() call and store it in the ack SKB as-is. This covers both mgmt_tx and probe_peer since both call ieee80211_attach_ack_skb(). - ieee80211_mgmt_tx(): the dummy 0xffffffff assignment for the dont_wait_for_ack case is no longer needed; cfg80211_assign_cookie() guarantees a non-zero value which is sufficient for the internal ROC vs mgmt-tx distinction. - ieee80211_store_ack_skb(): same fix for the tx_control_port path. With no remaining callers, remove ieee80211_mgmt_tx_cookie() and the roc_cookie_counter field from struct ieee80211_local. Assisted-by: Claude:claude-sonnet-4-6 Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com> Link: https://patch.msgid.link/20260731123509.1975281-3-arend.vanspriel@broadcom.com Signed-off-by: Johannes Berg <johannes.berg@intel.com>
This commit is contained in:
parent
9967538044
commit
fd6856890f
|
|
@ -4831,19 +4831,6 @@ int ieee80211_channel_switch(struct wiphy *wiphy, struct net_device *dev,
|
|||
return __ieee80211_channel_switch(wiphy, dev, params);
|
||||
}
|
||||
|
||||
u64 ieee80211_mgmt_tx_cookie(struct ieee80211_local *local)
|
||||
{
|
||||
lockdep_assert_wiphy(local->hw.wiphy);
|
||||
|
||||
local->roc_cookie_counter++;
|
||||
|
||||
/* wow, you wrapped 64 bits ... more likely a bug */
|
||||
if (WARN_ON(local->roc_cookie_counter == 0))
|
||||
local->roc_cookie_counter++;
|
||||
|
||||
return local->roc_cookie_counter;
|
||||
}
|
||||
|
||||
int ieee80211_attach_ack_skb(struct ieee80211_local *local, struct sk_buff *skb,
|
||||
u64 *cookie, gfp_t gfp)
|
||||
{
|
||||
|
|
@ -4868,7 +4855,6 @@ int ieee80211_attach_ack_skb(struct ieee80211_local *local, struct sk_buff *skb,
|
|||
IEEE80211_SKB_CB(skb)->status_data_idr = 1;
|
||||
IEEE80211_SKB_CB(skb)->status_data = id;
|
||||
|
||||
*cookie = ieee80211_mgmt_tx_cookie(local);
|
||||
IEEE80211_SKB_CB(ack_skb)->ack.cookie = *cookie;
|
||||
|
||||
return 0;
|
||||
|
|
|
|||
|
|
@ -1710,8 +1710,6 @@ struct ieee80211_local {
|
|||
struct list_head roc_list;
|
||||
struct wiphy_work hw_roc_start, hw_roc_done;
|
||||
unsigned long hw_roc_start_time;
|
||||
u64 roc_cookie_counter;
|
||||
|
||||
struct idr ack_status_frames;
|
||||
spinlock_t ack_status_lock;
|
||||
|
||||
|
|
@ -1991,7 +1989,6 @@ u64 ieee80211_reset_erp_info(struct ieee80211_sub_if_data *sdata);
|
|||
|
||||
void ieee80211_handle_queued_frames(struct ieee80211_local *local);
|
||||
|
||||
u64 ieee80211_mgmt_tx_cookie(struct ieee80211_local *local);
|
||||
int ieee80211_attach_ack_skb(struct ieee80211_local *local, struct sk_buff *skb,
|
||||
u64 *cookie, gfp_t gfp);
|
||||
|
||||
|
|
|
|||
|
|
@ -602,14 +602,12 @@ static int ieee80211_start_roc_work(struct ieee80211_local *local,
|
|||
|
||||
/*
|
||||
* cookie is either the roc cookie (for normal roc)
|
||||
* or the SKB (for mgmt TX)
|
||||
* or the mgmt_tx cookie; both are pre-assigned by cfg80211
|
||||
*/
|
||||
if (!txskb) {
|
||||
roc->cookie = ieee80211_mgmt_tx_cookie(local);
|
||||
*cookie = roc->cookie;
|
||||
} else {
|
||||
if (!txskb)
|
||||
roc->cookie = *cookie;
|
||||
else
|
||||
roc->mgmt_tx_cookie = *cookie;
|
||||
}
|
||||
|
||||
req = wiphy_dereference(local->hw.wiphy, local->scan_req);
|
||||
|
||||
|
|
@ -1021,13 +1019,6 @@ int ieee80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
|
|||
kfree_skb(skb);
|
||||
goto out_unlock;
|
||||
}
|
||||
} else {
|
||||
/* Assign a dummy non-zero cookie, it's not sent to
|
||||
* userspace in this case but we rely on its value
|
||||
* internally in the need_offchan case to distinguish
|
||||
* mgmt-tx from remain-on-channel.
|
||||
*/
|
||||
*cookie = 0xffffffff;
|
||||
}
|
||||
|
||||
if (!need_offchan) {
|
||||
|
|
|
|||
|
|
@ -2602,10 +2602,8 @@ static u16 ieee80211_store_ack_skb(struct ieee80211_local *local,
|
|||
if (id >= 0) {
|
||||
info_id = id;
|
||||
*info_flags |= IEEE80211_TX_CTL_REQ_TX_STATUS;
|
||||
if (cookie) {
|
||||
*cookie = ieee80211_mgmt_tx_cookie(local);
|
||||
if (cookie)
|
||||
IEEE80211_SKB_CB(ack_skb)->ack.cookie = *cookie;
|
||||
}
|
||||
} else {
|
||||
kfree_skb(ack_skb);
|
||||
}
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user