* [PATCH -next 00/10] wifi: cfg80211: consolidate cookie assignment for async ops
@ 2026-07-26 19:25 Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 01/10] wifi: cfg80211: pre-assign cookie for remain_on_channel, mgmt_tx, probe_peer and tx_control_port Arend van Spriel
` (9 more replies)
0 siblings, 10 replies; 16+ messages in thread
From: Arend van Spriel @ 2026-07-26 19:25 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, brcm80211, Arend van Spriel
NL80211_ATTR_COOKIE is a userspace-visible u64 that correlates an async
nl80211 operation with its completion event. Three cfg80211 ops currently
delegate cookie generation to the driver: remain_on_channel, mgmt_tx, and
probe_peer. This produces inconsistent strategies across drivers: some use
an incrementing counter, some use get_random_u32(), some use a CID cast to
u64, and brcmfmac's mgmt_tx always assigned zero - which is arguably broken
since cfg80211 treats zero as an invalid cookie.
The add_nan_func op already does this correctly: cfg80211 calls
cfg80211_assign_cookie() before invoking the driver, ensuring a unique
non-zero value without any driver involvement. This series applies the same
pattern to remain_on_channel, mgmt_tx, probe_peer, and tx_control_port.
Structure
---------
Patch 1 is the enabling change: cfg80211 pre-assigns the cookie in the
nl80211 command handlers before the rdev_* call. Drivers may still
overwrite the value at this point; subsequent patches remove the per-driver
generation. Patch 2 updates mac80211, which has its own internal cookie
counter (roc_cookie_counter) that becomes redundant. Patches 3-9 are
per-driver cleanups. Patch 10 finalises the interface by converting the
u64 *cookie output parameter to a u64 cookie input parameter, making the
direction of data flow explicit. tx_control_port is excluded from patch 10
because its cookie pointer is nullable (passed as NULL when dont_wait_for_ack
is set) and that nullable semantics cannot be expressed with a value.
Non-obvious aspects
-------------------
ath6kl (patch 3): when the destination STA is in power-save mode, ath6kl
queues the management frame in a software queue (struct ath6kl_mgmt_buff).
The cookie must survive enqueue and dequeue so that cfg80211_mgmt_tx_status()
is called with the correct value after the frame is eventually transmitted.
This means the cookie field is threaded through ath6kl_mgmt_powersave_ap()
and into the queue entry. The vif->last_roc_id and last_cancel_roc_id fields
are widened from u32 to u64 to hold the full 64-bit cookie.
Synchronous mgmt_tx (brcmfmac, wil6210): these drivers call
cfg80211_mgmt_tx_status() before the mgmt_tx callback returns. The status
event is therefore sent to userspace before the nl80211 command reply that
carries the cookie. Userspace must buffer the status event and match it
once the reply arrives. The pre-assigned cookie being consistent across both
the status event and the reply is what makes that correlation possible.
Previously brcmfmac passed cookie=0 to cfg80211_mgmt_tx_status(), which was
broken; this series fixes that as a side effect.
qtnfmac (patch 9): the qlink firmware protocol has no frame-TX-status event
type. qtnfmac never calls cfg80211_mgmt_tx_status(). The previous code
generated a random u32 short_cookie and sent it to firmware purely as a
debug identifier; it was never used for nl80211 cookie correlation. After
this series qtnfmac simply uses the pre-assigned cookie for the same debug
purpose and discards it. The absence of tx status reporting for the
wait_for_ack case is a pre-existing driver limitation not addressed here.
mac80211 0xffffffff removal (patch 2): the old code assigned *cookie =
0xffffffff for the dont_wait_for_ack + need_offchan case to ensure
roc->mgmt_tx_cookie was non-zero, which distinguishes a mgmt-tx ROC from a
regular remain-on-channel ROC internally. That dummy value is no longer
needed because cfg80211_assign_cookie() guarantees a non-zero result (it
warns and skips zero if the counter wraps). The cookie is still not sent to
userspace in the dont_wait_for_ack case.
Arend van Spriel (10):
wifi: cfg80211: pre-assign cookie for remain_on_channel, mgmt_tx,
probe_peer and tx_control_port
wifi: mac80211: stop using ieee80211_mgmt_tx_cookie()
wifi: ath6kl: use pre-assigned cookie for remain_on_channel and
mgmt_tx
wifi: wil6210: use pre-assigned cookie for remain_on_channel, mgmt_tx
and probe_peer
wifi: brcmfmac: use pre-assigned cookie for remain_on_channel and
mgmt_tx
wifi: mwifiex: use pre-assigned cookie for remain_on_channel and
mgmt_tx
wifi: wilc1000: use pre-assigned cookie for remain_on_channel and
mgmt_tx
wifi: nxpwifi: use pre-assigned cookie for remain_on_channel and
mgmt_tx
wifi: qtnfmac: use pre-assigned cookie for mgmt_tx
wifi: cfg80211: convert cookie output to input parameter
drivers/net/wireless/ath/ath6kl/cfg80211.c | 22 ++++++---------
drivers/net/wireless/ath/ath6kl/core.h | 5 ++--
drivers/net/wireless/ath/ath6kl/main.c | 1 +
drivers/net/wireless/ath/ath6kl/txrx.c | 1 +
drivers/net/wireless/ath/ath6kl/wmi.c | 2 +-
drivers/net/wireless/ath/ath6kl/wmi.h | 1 +
drivers/net/wireless/ath/wil6210/cfg80211.c | 12 ++++-----
drivers/net/wireless/ath/wil6210/p2p.c | 6 ++---
drivers/net/wireless/ath/wil6210/wil6210.h | 4 +--
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 12 ++++-----
.../broadcom/brcm80211/brcmfmac/cfg80211.h | 2 +-
.../broadcom/brcm80211/brcmfmac/cyw/core.c | 8 +++---
.../broadcom/brcm80211/brcmfmac/p2p.c | 10 +++----
.../broadcom/brcm80211/brcmfmac/p2p.h | 2 +-
.../net/wireless/marvell/mwifiex/cfg80211.c | 20 +++++++-------
.../wireless/microchip/wilc1000/cfg80211.c | 19 +++++--------
drivers/net/wireless/nxp/nxpwifi/cfg80211.c | 20 +++++++-------
.../net/wireless/quantenna/qtnfmac/cfg80211.c | 4 +--
include/net/cfg80211.h | 18 ++++++++-----
net/mac80211/cfg.c | 18 ++-----------
net/mac80211/ieee80211_i.h | 7 ++---
net/mac80211/offchannel.c | 27 +++++++------------
net/mac80211/tx.c | 4 +--
net/wireless/core.h | 2 +-
net/wireless/mlme.c | 2 +-
net/wireless/nl80211.c | 11 +++++---
net/wireless/rdev-ops.h | 12 ++++-----
27 files changed, 105 insertions(+), 147 deletions(-)
base-commit: 90883c513ca01e77c56b8d94be7de11420c1dacf
--
2.54.0
^ permalink raw reply [flat|nested] 16+ messages in thread
* [PATCH -next 01/10] wifi: cfg80211: pre-assign cookie for remain_on_channel, mgmt_tx, probe_peer and tx_control_port
2026-07-26 19:25 [PATCH -next 00/10] wifi: cfg80211: consolidate cookie assignment for async ops Arend van Spriel
@ 2026-07-26 19:25 ` Arend van Spriel
2026-07-26 19:37 ` Johannes Berg
2026-07-26 19:25 ` [PATCH -next 02/10] wifi: mac80211: stop using ieee80211_mgmt_tx_cookie() Arend van Spriel
` (8 subsequent siblings)
9 siblings, 1 reply; 16+ messages in thread
From: Arend van Spriel @ 2026-07-26 19:25 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, brcm80211, Arend van Spriel
Having a single place for cookie assignment and keeping that
responsibility in the cfg80211 subsystem is a logical choice as it
handles the userspace nl80211 API. add_nan_func already does this:
cfg80211 calls cfg80211_assign_cookie() before invoking the driver.
Apply the same pattern to remain_on_channel, mgmt_tx, probe_peer and
tx_control_port by pre-assigning the cookie in the nl80211 command
handlers before the rdev_* call. For tx_control_port the cookie is
only pre-assigned when the caller requests an ack (cookie pointer
non-NULL).
Drivers may still overwrite the value for now; subsequent patches will
remove per-driver cookie generation. Update the cfg80211_ops kerneldoc
to note that the cookie is pre-assigned and drivers must not modify it.
Assisted-by: Claude:claude-sonnet-4-6
---
include/net/cfg80211.h | 12 ++++++++----
net/wireless/nl80211.c | 5 +++++
2 files changed, 13 insertions(+), 4 deletions(-)
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index 15c08b24502f..a30550f356ab 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -5048,11 +5048,13 @@ struct mgmt_frame_regs {
* channel for the specified duration to complete an off-channel
* operation (e.g., public action frame exchange). When the driver is
* ready on the requested channel, it must indicate this with an event
- * notification by calling cfg80211_ready_on_channel().
+ * notification by calling cfg80211_ready_on_channel(). The @cookie is
+ * pre-assigned by cfg80211; drivers must not modify it.
* @cancel_remain_on_channel: Cancel an on-going remain-on-channel operation.
* This allows the operation to be terminated prior to timeout based on
* the duration value.
- * @mgmt_tx: Transmit a management frame.
+ * @mgmt_tx: Transmit a management frame. The @cookie is pre-assigned by
+ * cfg80211; drivers must not modify it.
* @mgmt_tx_cancel_wait: Cancel the wait time from transmitting a management
* frame on another channel
*
@@ -5107,7 +5109,8 @@ struct mgmt_frame_regs {
* @tdls_oper: Perform a high-level TDLS operation (e.g. TDLS link setup).
*
* @probe_peer: probe a connected peer (AP: STA MAC required; STA: no MAC),
- * must return a cookie that is later passed to cfg80211_probe_status().
+ * uses the @cookie pre-assigned by cfg80211 (drivers must not modify it)
+ * which is later passed to cfg80211_probe_status().
*
* @set_noack_map: Set the NoAck Map for the TIDs.
*
@@ -5218,7 +5221,8 @@ struct mgmt_frame_regs {
* user space
*
* @tx_control_port: TX a control port frame (EAPoL). The noencrypt parameter
- * tells the driver that the frame should not be encrypted.
+ * tells the driver that the frame should not be encrypted. When @cookie is
+ * non-NULL it is pre-assigned by cfg80211; drivers must not modify it.
*
* @get_ftm_responder_stats: Retrieve FTM responder statistics, if available.
* Statistics should be cumulative, currently no way to reset is provided.
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index ac0c0da45241..bfb3005c23a7 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -14630,6 +14630,7 @@ static int nl80211_remain_on_channel(struct sk_buff *skb,
goto free_msg;
}
+ cookie = cfg80211_assign_cookie(rdev);
err = rdev_remain_on_channel(rdev, wdev, chandef.chan,
duration, &cookie, rx_addr);
@@ -14871,6 +14872,7 @@ static int nl80211_tx_mgmt(struct sk_buff *skb, struct genl_info *info)
}
params.chan = chandef.chan;
+ cookie = cfg80211_assign_cookie(rdev);
err = cfg80211_mlme_mgmt_tx(rdev, wdev, ¶ms, &cookie);
if (err)
goto free_msg;
@@ -16359,6 +16361,7 @@ static int nl80211_probe_peer(struct sk_buff *skb, struct genl_info *info)
goto free_msg;
}
+ cookie = cfg80211_assign_cookie(rdev);
err = rdev_probe_peer(rdev, dev, addr, &cookie);
if (err)
goto free_msg;
@@ -18574,6 +18577,8 @@ static int nl80211_tx_control_port(struct sk_buff *skb, struct genl_info *info)
link_id = nl80211_link_id_or_invalid(info->attrs);
+ if (!dont_wait_for_ack)
+ cookie = cfg80211_assign_cookie(rdev);
err = rdev_tx_control_port(rdev, dev, buf, len,
dest, cpu_to_be16(proto), noencrypt, link_id,
dont_wait_for_ack ? NULL : &cookie);
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH -next 02/10] wifi: mac80211: stop using ieee80211_mgmt_tx_cookie()
2026-07-26 19:25 [PATCH -next 00/10] wifi: cfg80211: consolidate cookie assignment for async ops Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 01/10] wifi: cfg80211: pre-assign cookie for remain_on_channel, mgmt_tx, probe_peer and tx_control_port Arend van Spriel
@ 2026-07-26 19:25 ` Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 03/10] wifi: ath6kl: use pre-assigned cookie for remain_on_channel and mgmt_tx Arend van Spriel
` (7 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Arend van Spriel @ 2026-07-26 19:25 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, brcm80211, Arend van Spriel
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>
---
net/mac80211/cfg.c | 14 --------------
net/mac80211/ieee80211_i.h | 3 ---
net/mac80211/offchannel.c | 17 ++++-------------
net/mac80211/tx.c | 4 +---
4 files changed, 5 insertions(+), 33 deletions(-)
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index df68a5bdeb2f..3f9954338707 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -4827,19 +4827,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)
{
@@ -4864,7 +4851,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;
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index 11f449e8ff00..a8ea55265f93 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -1708,8 +1708,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;
@@ -1989,7 +1987,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);
diff --git a/net/mac80211/offchannel.c b/net/mac80211/offchannel.c
index 2bceb73717c6..94be6497f259 100644
--- a/net/mac80211/offchannel.c
+++ b/net/mac80211/offchannel.c
@@ -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) {
diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index eb36f1b9771b..183beae2193a 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
@@ -2605,10 +2605,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);
}
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH -next 03/10] wifi: ath6kl: use pre-assigned cookie for remain_on_channel and mgmt_tx
2026-07-26 19:25 [PATCH -next 00/10] wifi: cfg80211: consolidate cookie assignment for async ops Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 01/10] wifi: cfg80211: pre-assign cookie for remain_on_channel, mgmt_tx, probe_peer and tx_control_port Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 02/10] wifi: mac80211: stop using ieee80211_mgmt_tx_cookie() Arend van Spriel
@ 2026-07-26 19:25 ` Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 04/10] wifi: wil6210: use pre-assigned cookie for remain_on_channel, mgmt_tx and probe_peer Arend van Spriel
` (6 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Arend van Spriel @ 2026-07-26 19:25 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, brcm80211, Arend van Spriel
Stop generating cookies in ath6kl_remain_on_channel() and
ath6kl_mgmt_tx(). cfg80211 now pre-assigns the cookie before calling
into the driver.
For remain_on_channel, store the pre-assigned cookie in
vif->last_roc_id. Widen last_roc_id and last_cancel_roc_id from u32
to u64 to hold the full 64-bit cookie value.
For mgmt_tx, store the pre-assigned cookie in wmi->last_mgmt_tx_cookie
so the firmware TX status event handler can pass the correct cookie to
cfg80211_mgmt_tx_status(). Thread the cookie through the powersave
queue (ath6kl_mgmt_buff) so it is available when the frame is
eventually dequeued and sent.
Assisted-by: Claude:claude-sonnet-4-6
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
---
drivers/net/wireless/ath/ath6kl/cfg80211.c | 18 ++++++------------
drivers/net/wireless/ath/ath6kl/core.h | 5 +++--
drivers/net/wireless/ath/ath6kl/main.c | 1 +
drivers/net/wireless/ath/ath6kl/txrx.c | 1 +
drivers/net/wireless/ath/ath6kl/wmi.c | 2 +-
drivers/net/wireless/ath/ath6kl/wmi.h | 1 +
6 files changed, 13 insertions(+), 15 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index ecde91159b54..e9d6e6a53d7d 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -3038,16 +3038,10 @@ static int ath6kl_remain_on_channel(struct wiphy *wiphy,
{
struct ath6kl_vif *vif = ath6kl_vif_from_wdev(wdev);
struct ath6kl *ar = ath6kl_priv(vif->ndev);
- u32 id;
/* TODO: if already pending or ongoing remain-on-channel,
* return -EBUSY */
- id = ++vif->last_roc_id;
- if (id == 0) {
- /* Do not use 0 as the cookie value */
- id = ++vif->last_roc_id;
- }
- *cookie = id;
+ vif->last_roc_id = *cookie;
return ath6kl_wmi_remain_on_chnl_cmd(ar->wmi, vif->fw_vif_idx,
chan->center_freq, duration);
@@ -3106,6 +3100,7 @@ static int ath6kl_send_go_probe_resp(struct ath6kl_vif *vif,
static bool ath6kl_mgmt_powersave_ap(struct ath6kl_vif *vif,
u32 id,
+ u64 cookie,
u32 freq,
u32 wait,
const u8 *buf,
@@ -3138,6 +3133,7 @@ static bool ath6kl_mgmt_powersave_ap(struct ath6kl_vif *vif,
INIT_LIST_HEAD(&mgmt_buf->list);
mgmt_buf->id = id;
+ mgmt_buf->cookie = cookie;
mgmt_buf->freq = freq;
mgmt_buf->wait = wait;
mgmt_buf->len = len;
@@ -3222,7 +3218,6 @@ static int ath6kl_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
* Send Probe Response frame in GO mode using a separate WMI
* command to allow the target to fill in the generic IEs.
*/
- *cookie = 0; /* TX status not supported */
return ath6kl_send_go_probe_resp(vif, buf, len, freq);
}
@@ -3235,16 +3230,15 @@ static int ath6kl_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
id = vif->send_action_id++;
}
- *cookie = id;
-
/* AP mode Power saving processing */
if (vif->nw_type == AP_NETWORK) {
- queued = ath6kl_mgmt_powersave_ap(vif, id, freq, wait, buf, len,
- &more_data, no_cck);
+ queued = ath6kl_mgmt_powersave_ap(vif, id, *cookie, freq, wait,
+ buf, len, &more_data, no_cck);
if (queued)
return 0;
}
+ ar->wmi->last_mgmt_tx_cookie = *cookie;
return ath6kl_wmi_send_mgmt_cmd(ar->wmi, vif->fw_vif_idx, id, freq,
wait, buf, len, no_cck);
}
diff --git a/drivers/net/wireless/ath/ath6kl/core.h b/drivers/net/wireless/ath/ath6kl/core.h
index 77e052336eb5..a0b236eeeab5 100644
--- a/drivers/net/wireless/ath/ath6kl/core.h
+++ b/drivers/net/wireless/ath/ath6kl/core.h
@@ -404,6 +404,7 @@ struct ath6kl_mgmt_buff {
u32 freq;
u32 wait;
u32 id;
+ u64 cookie;
bool no_cck;
size_t len;
u8 buf[];
@@ -631,8 +632,8 @@ struct ath6kl_vif {
struct cfg80211_scan_request *scan_req;
enum sme_state sme_state;
int reconnect_flag;
- u32 last_roc_id;
- u32 last_cancel_roc_id;
+ u64 last_roc_id;
+ u64 last_cancel_roc_id;
u32 send_action_id;
bool probe_req_report;
u16 assoc_bss_beacon_int;
diff --git a/drivers/net/wireless/ath/ath6kl/main.c b/drivers/net/wireless/ath/ath6kl/main.c
index 8afc6589fc51..9c023d7ce305 100644
--- a/drivers/net/wireless/ath/ath6kl/main.c
+++ b/drivers/net/wireless/ath/ath6kl/main.c
@@ -898,6 +898,7 @@ void ath6kl_pspoll_event(struct ath6kl_vif *vif, u8 aid)
spin_unlock_bh(&conn->psq_lock);
conn->sta_flags |= STA_PS_POLLED;
+ ar->wmi->last_mgmt_tx_cookie = mgmt_buf->cookie;
ath6kl_wmi_send_mgmt_cmd(ar->wmi, vif->fw_vif_idx,
mgmt_buf->id, mgmt_buf->freq,
mgmt_buf->wait, mgmt_buf->buf,
diff --git a/drivers/net/wireless/ath/ath6kl/txrx.c b/drivers/net/wireless/ath/ath6kl/txrx.c
index 97fdac7237e2..b4d3c5cff881 100644
--- a/drivers/net/wireless/ath/ath6kl/txrx.c
+++ b/drivers/net/wireless/ath/ath6kl/txrx.c
@@ -1469,6 +1469,7 @@ void ath6kl_rx(struct htc_target *target, struct htc_packet *packet)
spin_unlock_bh(&conn->psq_lock);
idx = vif->fw_vif_idx;
+ ar->wmi->last_mgmt_tx_cookie = mgmt->cookie;
ath6kl_wmi_send_mgmt_cmd(ar->wmi,
idx,
mgmt->id,
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.c b/drivers/net/wireless/ath/ath6kl/wmi.c
index c0c455d6e2dc..888bbbb5d17a 100644
--- a/drivers/net/wireless/ath/ath6kl/wmi.c
+++ b/drivers/net/wireless/ath/ath6kl/wmi.c
@@ -584,7 +584,7 @@ static int ath6kl_wmi_tx_status_event_rx(struct wmi *wmi, u8 *datap, int len,
ath6kl_dbg(ATH6KL_DBG_WMI, "tx_status: id=%x ack_status=%u\n",
id, ev->ack_status);
if (wmi->last_mgmt_tx_frame) {
- cfg80211_mgmt_tx_status(&vif->wdev, id,
+ cfg80211_mgmt_tx_status(&vif->wdev, wmi->last_mgmt_tx_cookie,
wmi->last_mgmt_tx_frame,
wmi->last_mgmt_tx_frame_len,
!!ev->ack_status, GFP_ATOMIC);
diff --git a/drivers/net/wireless/ath/ath6kl/wmi.h b/drivers/net/wireless/ath/ath6kl/wmi.h
index 8fbece3fdad9..89ce2abbb1cd 100644
--- a/drivers/net/wireless/ath/ath6kl/wmi.h
+++ b/drivers/net/wireless/ath/ath6kl/wmi.h
@@ -125,6 +125,7 @@ struct wmi {
u8 *last_mgmt_tx_frame;
size_t last_mgmt_tx_frame_len;
+ u64 last_mgmt_tx_cookie;
u8 saved_pwr_mode;
};
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH -next 04/10] wifi: wil6210: use pre-assigned cookie for remain_on_channel, mgmt_tx and probe_peer
2026-07-26 19:25 [PATCH -next 00/10] wifi: cfg80211: consolidate cookie assignment for async ops Arend van Spriel
` (2 preceding siblings ...)
2026-07-26 19:25 ` [PATCH -next 03/10] wifi: ath6kl: use pre-assigned cookie for remain_on_channel and mgmt_tx Arend van Spriel
@ 2026-07-26 19:25 ` Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 05/10] wifi: brcmfmac: use pre-assigned cookie for remain_on_channel and mgmt_tx Arend van Spriel
` (5 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Arend van Spriel @ 2026-07-26 19:25 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, brcm80211, Arend van Spriel
Stop overwriting the pre-assigned cookie in wil_p2p_listen(),
wil_cfg80211_mgmt_tx(), and wil_cfg80211_probe_peer().
For remain_on_channel, store the pre-assigned cookie in p2p->cookie
instead of incrementing it. All cancel and expiry callbacks already
read from p2p->cookie so they pick up the correct value.
For mgmt_tx, remove the defensive "cookie ? *cookie : 0" guard;
cfg80211 guarantees a non-NULL cookie pointer.
For probe_peer, store the pre-assigned cookie in req->cookie instead
of the CID value. The CID is still available via req->cid for STA
lookup in wil_probe_client_handle().
Assisted-by: Claude:claude-sonnet-4-6
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
---
drivers/net/wireless/ath/wil6210/cfg80211.c | 6 ++----
drivers/net/wireless/ath/wil6210/p2p.c | 2 +-
2 files changed, 3 insertions(+), 5 deletions(-)
diff --git a/drivers/net/wireless/ath/wil6210/cfg80211.c b/drivers/net/wireless/ath/wil6210/cfg80211.c
index 5f2bd9a31faf..6ebd340c8ef7 100644
--- a/drivers/net/wireless/ath/wil6210/cfg80211.c
+++ b/drivers/net/wireless/ath/wil6210/cfg80211.c
@@ -1488,8 +1488,7 @@ int wil_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
*/
tx_status = (rc == 0);
rc = (rc == -EAGAIN) ? 0 : rc;
- cfg80211_mgmt_tx_status(wdev, cookie ? *cookie : 0, buf, len,
- tx_status, GFP_KERNEL);
+ cfg80211_mgmt_tx_status(wdev, *cookie, buf, len, tx_status, GFP_KERNEL);
return rc;
}
@@ -2399,13 +2398,12 @@ static int wil_cfg80211_probe_peer(struct wiphy *wiphy,
return -ENOMEM;
req->cid = cid;
- req->cookie = cid;
+ req->cookie = *cookie;
mutex_lock(&vif->probe_client_mutex);
list_add_tail(&req->list, &vif->probe_client_pending);
mutex_unlock(&vif->probe_client_mutex);
- *cookie = req->cookie;
queue_work(wil->wq_service, &vif->probe_client_worker);
return 0;
}
diff --git a/drivers/net/wireless/ath/wil6210/p2p.c b/drivers/net/wireless/ath/wil6210/p2p.c
index f20caf1a3905..6d2cadca259f 100644
--- a/drivers/net/wireless/ath/wil6210/p2p.c
+++ b/drivers/net/wireless/ath/wil6210/p2p.c
@@ -144,7 +144,7 @@ int wil_p2p_listen(struct wil6210_priv *wil, struct wireless_dev *wdev,
}
memcpy(&p2p->listen_chan, chan, sizeof(*chan));
- *cookie = ++p2p->cookie;
+ p2p->cookie = *cookie;
p2p->listen_duration = duration;
mutex_lock(&wil->vif_mutex);
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH -next 05/10] wifi: brcmfmac: use pre-assigned cookie for remain_on_channel and mgmt_tx
2026-07-26 19:25 [PATCH -next 00/10] wifi: cfg80211: consolidate cookie assignment for async ops Arend van Spriel
` (3 preceding siblings ...)
2026-07-26 19:25 ` [PATCH -next 04/10] wifi: wil6210: use pre-assigned cookie for remain_on_channel, mgmt_tx and probe_peer Arend van Spriel
@ 2026-07-26 19:25 ` Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 06/10] wifi: mwifiex: " Arend van Spriel
` (4 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Arend van Spriel @ 2026-07-26 19:25 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, brcm80211, Arend van Spriel
Stop generating cookies in brcmf_p2p_remain_on_channel() and
brcmf_cfg80211_mgmt_tx().
For remain_on_channel, remove the cookie increment from
brcmf_p2p_discover_listen() and store the pre-assigned cookie in
p2p->remain_on_channel_cookie. The expiry callback in
brcmf_p2p_notify_listen_complete() already reads from that field.
For mgmt_tx, remove the "*cookie = 0" assignments in
brcmf_cfg80211_mgmt_tx() and the cyw extension. The pre-assigned
cookie is then correctly passed to cfg80211_mgmt_tx_status() which
already uses *cookie.
Assisted-by: Claude:claude-sonnet-4-6
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
---
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c | 2 --
drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c | 1 -
drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c | 6 ++----
3 files changed, 2 insertions(+), 7 deletions(-)
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index 20f7fccd6121..7e0368f6860e 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -5573,8 +5573,6 @@ brcmf_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
brcmf_dbg(TRACE, "Enter\n");
- *cookie = 0;
-
mgmt = (const struct ieee80211_mgmt *)buf;
if (!ieee80211_is_mgmt(mgmt->frame_control)) {
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
index ce09d44fa73c..f0f3a45d7cde 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
@@ -123,7 +123,6 @@ int brcmf_cyw_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
if (!ieee80211_is_auth(mgmt->frame_control))
return brcmf_cfg80211_mgmt_tx(wiphy, wdev, params, cookie);
- *cookie = 0;
vif = container_of(wdev, struct brcmf_cfg80211_vif, wdev);
reinit_completion(&vif->mgmt_tx);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
index c7d7b35ab125..3d7bf25f1985 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
@@ -979,10 +979,8 @@ brcmf_p2p_discover_listen(struct brcmf_p2p_info *p2p, u16 channel, u32 duration)
p2p->cfg->d11inf.encchspec(&ch);
err = brcmf_p2p_set_discover_state(vif->ifp, WL_P2P_DISC_ST_LISTEN,
ch.chspec, (u16)duration);
- if (!err) {
+ if (!err)
set_bit(BRCMF_P2P_STATUS_DISCOVER_LISTEN, &p2p->status);
- p2p->remain_on_channel_cookie++;
- }
exit:
return err;
}
@@ -1020,7 +1018,7 @@ int brcmf_p2p_remain_on_channel(struct wiphy *wiphy, struct wireless_dev *wdev,
goto exit;
memcpy(&p2p->remain_on_channel, channel, sizeof(*channel));
- *cookie = p2p->remain_on_channel_cookie;
+ p2p->remain_on_channel_cookie = *cookie;
cfg80211_ready_on_channel(wdev, *cookie, channel, duration, GFP_KERNEL);
exit:
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH -next 06/10] wifi: mwifiex: use pre-assigned cookie for remain_on_channel and mgmt_tx
2026-07-26 19:25 [PATCH -next 00/10] wifi: cfg80211: consolidate cookie assignment for async ops Arend van Spriel
` (4 preceding siblings ...)
2026-07-26 19:25 ` [PATCH -next 05/10] wifi: brcmfmac: use pre-assigned cookie for remain_on_channel and mgmt_tx Arend van Spriel
@ 2026-07-26 19:25 ` Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 07/10] wifi: wilc1000: " Arend van Spriel
` (3 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Arend van Spriel @ 2026-07-26 19:25 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, brcm80211, Arend van Spriel
Stop generating cookies via get_random_u32() in
mwifiex_cfg80211_remain_on_channel() and mwifiex_cfg80211_mgmt_tx().
Use the pre-assigned cookie from cfg80211 instead.
Assisted-by: Claude:claude-sonnet-4-6
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
---
drivers/net/wireless/marvell/mwifiex/cfg80211.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
index 99d96088e364..7f446a22a370 100644
--- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
@@ -259,7 +259,6 @@ mwifiex_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
tx_info->pkt_len = pkt_len;
mwifiex_form_mgmt_frame(skb, buf, len);
- *cookie = get_random_u32() | 1;
if (ieee80211_is_action(mgmt->frame_control))
skb = mwifiex_clone_skb_for_tx_status(priv,
@@ -326,7 +325,6 @@ mwifiex_cfg80211_remain_on_channel(struct wiphy *wiphy,
duration);
if (!ret) {
- *cookie = get_random_u32() | 1;
priv->roc_cfg.cookie = *cookie;
priv->roc_cfg.chan = *chan;
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH -next 07/10] wifi: wilc1000: use pre-assigned cookie for remain_on_channel and mgmt_tx
2026-07-26 19:25 [PATCH -next 00/10] wifi: cfg80211: consolidate cookie assignment for async ops Arend van Spriel
` (5 preceding siblings ...)
2026-07-26 19:25 ` [PATCH -next 06/10] wifi: mwifiex: " Arend van Spriel
@ 2026-07-26 19:25 ` Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 08/10] wifi: nxpwifi: " Arend van Spriel
` (2 subsequent siblings)
9 siblings, 0 replies; 16+ messages in thread
From: Arend van Spriel @ 2026-07-26 19:25 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, brcm80211, Arend van Spriel
Stop generating cookies by incrementing inc_roc_cookie in
remain_on_channel() and via get_random_u32() in mgmt_tx(). Use the
pre-assigned cookie from cfg80211 instead. Remove the now-unused id
local variable from remain_on_channel().
Assisted-by: Claude:claude-sonnet-4-6
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
---
drivers/net/wireless/microchip/wilc1000/cfg80211.c | 11 ++---------
1 file changed, 2 insertions(+), 9 deletions(-)
diff --git a/drivers/net/wireless/microchip/wilc1000/cfg80211.c b/drivers/net/wireless/microchip/wilc1000/cfg80211.c
index 6654fce4ded8..7c19ad34fda5 100644
--- a/drivers/net/wireless/microchip/wilc1000/cfg80211.c
+++ b/drivers/net/wireless/microchip/wilc1000/cfg80211.c
@@ -1106,18 +1106,13 @@ static int remain_on_channel(struct wiphy *wiphy,
int ret = 0;
struct wilc_vif *vif = netdev_priv(wdev->netdev);
struct wilc_priv *priv = &vif->priv;
- u64 id;
if (wdev->iftype == NL80211_IFTYPE_AP) {
netdev_dbg(vif->ndev, "Required while in AP mode\n");
return ret;
}
- id = ++priv->inc_roc_cookie;
- if (id == 0)
- id = ++priv->inc_roc_cookie;
-
- ret = wilc_remain_on_channel(vif, id, chan->hw_value,
+ ret = wilc_remain_on_channel(vif, *cookie, chan->hw_value,
wilc_wfi_remain_on_channel_expired);
if (ret)
return ret;
@@ -1125,8 +1120,7 @@ static int remain_on_channel(struct wiphy *wiphy,
vif->wilc->op_ch = chan->hw_value;
priv->remain_on_ch_params.listen_ch = chan;
- priv->remain_on_ch_params.listen_cookie = id;
- *cookie = id;
+ priv->remain_on_ch_params.listen_cookie = *cookie;
priv->p2p_listen_state = true;
priv->remain_on_ch_params.listen_duration = duration;
@@ -1170,7 +1164,6 @@ static int mgmt_tx(struct wiphy *wiphy,
const u8 *vendor_ie;
int ret = 0;
- *cookie = get_random_u32();
priv->tx_cookie = *cookie;
mgmt = (const struct ieee80211_mgmt *)buf;
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH -next 08/10] wifi: nxpwifi: use pre-assigned cookie for remain_on_channel and mgmt_tx
2026-07-26 19:25 [PATCH -next 00/10] wifi: cfg80211: consolidate cookie assignment for async ops Arend van Spriel
` (6 preceding siblings ...)
2026-07-26 19:25 ` [PATCH -next 07/10] wifi: wilc1000: " Arend van Spriel
@ 2026-07-26 19:25 ` Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 09/10] wifi: qtnfmac: use pre-assigned cookie for mgmt_tx Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 10/10] wifi: cfg80211: convert cookie output to input parameter Arend van Spriel
9 siblings, 0 replies; 16+ messages in thread
From: Arend van Spriel @ 2026-07-26 19:25 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, brcm80211, Arend van Spriel
Stop calling nxpwifi_roc_cookie() to generate cookies in
nxpwifi_cfg80211_remain_on_channel() and nxpwifi_cfg80211_mgmt_tx().
Use the pre-assigned cookie from cfg80211 instead.
Assisted-by: Claude:claude-sonnet-4-6
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
---
drivers/net/wireless/nxp/nxpwifi/cfg80211.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/net/wireless/nxp/nxpwifi/cfg80211.c b/drivers/net/wireless/nxp/nxpwifi/cfg80211.c
index 4f9e20f72811..198174ac754e 100644
--- a/drivers/net/wireless/nxp/nxpwifi/cfg80211.c
+++ b/drivers/net/wireless/nxp/nxpwifi/cfg80211.c
@@ -212,7 +212,6 @@ nxpwifi_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
tx_info->pkt_len = pkt_len;
nxpwifi_form_mgmt_frame(skb, buf, len);
- *cookie = nxpwifi_roc_cookie(priv->adapter);
if (ieee80211_is_action(mgmt->frame_control))
skb = nxpwifi_clone_skb_for_tx_status(priv,
@@ -277,7 +276,6 @@ nxpwifi_cfg80211_remain_on_channel(struct wiphy *wiphy,
duration);
if (!ret) {
- *cookie = nxpwifi_roc_cookie(adapter);
priv->roc_cfg.cookie = *cookie;
priv->roc_cfg.chan = *chan;
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH -next 09/10] wifi: qtnfmac: use pre-assigned cookie for mgmt_tx
2026-07-26 19:25 [PATCH -next 00/10] wifi: cfg80211: consolidate cookie assignment for async ops Arend van Spriel
` (7 preceding siblings ...)
2026-07-26 19:25 ` [PATCH -next 08/10] wifi: nxpwifi: " Arend van Spriel
@ 2026-07-26 19:25 ` Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 10/10] wifi: cfg80211: convert cookie output to input parameter Arend van Spriel
9 siblings, 0 replies; 16+ messages in thread
From: Arend van Spriel @ 2026-07-26 19:25 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, brcm80211, Arend van Spriel
Stop overwriting *cookie with a random value in qtnf_mgmt_tx(). The
internal firmware frame identifier (short_cookie) is unchanged.
Assisted-by: Claude:claude-sonnet-4-6
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
---
drivers/net/wireless/quantenna/qtnfmac/cfg80211.c | 2 --
1 file changed, 2 deletions(-)
diff --git a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
index 9e44c85d2051..284bc61c46d0 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
@@ -454,8 +454,6 @@ qtnf_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
u16 flags = 0;
u16 freq;
- *cookie = short_cookie;
-
if (params->offchan)
flags |= QLINK_FRAME_TX_FLAG_OFFCHAN;
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* [PATCH -next 10/10] wifi: cfg80211: convert cookie output to input parameter
2026-07-26 19:25 [PATCH -next 00/10] wifi: cfg80211: consolidate cookie assignment for async ops Arend van Spriel
` (8 preceding siblings ...)
2026-07-26 19:25 ` [PATCH -next 09/10] wifi: qtnfmac: use pre-assigned cookie for mgmt_tx Arend van Spriel
@ 2026-07-26 19:25 ` Arend van Spriel
2026-07-26 19:37 ` Johannes Berg
9 siblings, 1 reply; 16+ messages in thread
From: Arend van Spriel @ 2026-07-26 19:25 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, brcm80211, Arend van Spriel
The remain_on_channel, mgmt_tx, and probe_peer ops previously used
a u64 *cookie output parameter. Now that cfg80211 pre-assigns the
cookie value before invoking drivers, the parameter conveys a value
from caller to driver, not the other way around. Convert it to a
plain u64 input parameter across the ops struct (cfg80211.h),
rdev-ops.h wrappers, nl80211.c/mlme.c call sites, mac80211, and
all driver implementations.
The tx_control_port op is excluded: its cookie pointer is nullable
(passed as NULL when dont_wait_for_ack is set), so the nullable
pointer semantics are still required.
Internal mac80211 helpers ieee80211_start_roc_work() and
ieee80211_attach_ack_skb() still take u64 *cookie because they
assign to the pointee; their callers now pass &cookie to take the
address of the local value parameter.
wil6210's internal wil_p2p_listen() is also updated to take u64
cookie since it is called directly from the remain_on_channel
callback.
Assisted-by: Claude:claude-sonnet-4-6
Signed-off-by: Arend van Spriel <arend.vanspriel@broadcom.com>
---
drivers/net/wireless/ath/ath6kl/cfg80211.c | 10 +++++-----
drivers/net/wireless/ath/wil6210/cfg80211.c | 10 +++++-----
drivers/net/wireless/ath/wil6210/p2p.c | 6 +++---
drivers/net/wireless/ath/wil6210/wil6210.h | 4 ++--
.../broadcom/brcm80211/brcmfmac/cfg80211.c | 10 +++++-----
.../broadcom/brcm80211/brcmfmac/cfg80211.h | 2 +-
.../broadcom/brcm80211/brcmfmac/cyw/core.c | 7 +++----
.../wireless/broadcom/brcm80211/brcmfmac/p2p.c | 6 +++---
.../wireless/broadcom/brcm80211/brcmfmac/p2p.h | 2 +-
.../net/wireless/marvell/mwifiex/cfg80211.c | 18 +++++++++---------
.../net/wireless/microchip/wilc1000/cfg80211.c | 12 ++++++------
drivers/net/wireless/nxp/nxpwifi/cfg80211.c | 18 +++++++++---------
.../net/wireless/quantenna/qtnfmac/cfg80211.c | 2 +-
include/net/cfg80211.h | 6 +++---
net/mac80211/cfg.c | 4 ++--
net/mac80211/ieee80211_i.h | 4 ++--
net/mac80211/offchannel.c | 10 +++++-----
net/wireless/core.h | 2 +-
net/wireless/mlme.c | 2 +-
net/wireless/nl80211.c | 6 +++---
net/wireless/rdev-ops.h | 12 ++++++------
21 files changed, 76 insertions(+), 77 deletions(-)
diff --git a/drivers/net/wireless/ath/ath6kl/cfg80211.c b/drivers/net/wireless/ath/ath6kl/cfg80211.c
index e9d6e6a53d7d..34025d64d615 100644
--- a/drivers/net/wireless/ath/ath6kl/cfg80211.c
+++ b/drivers/net/wireless/ath/ath6kl/cfg80211.c
@@ -3034,14 +3034,14 @@ static int ath6kl_remain_on_channel(struct wiphy *wiphy,
struct wireless_dev *wdev,
struct ieee80211_channel *chan,
unsigned int duration,
- u64 *cookie, const u8 *rx_addr)
+ u64 cookie, const u8 *rx_addr)
{
struct ath6kl_vif *vif = ath6kl_vif_from_wdev(wdev);
struct ath6kl *ar = ath6kl_priv(vif->ndev);
/* TODO: if already pending or ongoing remain-on-channel,
* return -EBUSY */
- vif->last_roc_id = *cookie;
+ vif->last_roc_id = cookie;
return ath6kl_wmi_remain_on_chnl_cmd(ar->wmi, vif->fw_vif_idx,
chan->center_freq, duration);
@@ -3186,7 +3186,7 @@ static bool ath6kl_is_p2p_go_ssid(const u8 *buf, size_t len)
}
static int ath6kl_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
- struct cfg80211_mgmt_tx_params *params, u64 *cookie)
+ struct cfg80211_mgmt_tx_params *params, u64 cookie)
{
struct ath6kl_vif *vif = ath6kl_vif_from_wdev(wdev);
struct ath6kl *ar = ath6kl_priv(vif->ndev);
@@ -3232,13 +3232,13 @@ static int ath6kl_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
/* AP mode Power saving processing */
if (vif->nw_type == AP_NETWORK) {
- queued = ath6kl_mgmt_powersave_ap(vif, id, *cookie, freq, wait,
+ queued = ath6kl_mgmt_powersave_ap(vif, id, cookie, freq, wait,
buf, len, &more_data, no_cck);
if (queued)
return 0;
}
- ar->wmi->last_mgmt_tx_cookie = *cookie;
+ ar->wmi->last_mgmt_tx_cookie = cookie;
return ath6kl_wmi_send_mgmt_cmd(ar->wmi, vif->fw_vif_idx, id, freq,
wait, buf, len, no_cck);
}
diff --git a/drivers/net/wireless/ath/wil6210/cfg80211.c b/drivers/net/wireless/ath/wil6210/cfg80211.c
index 6ebd340c8ef7..9ac33d827f80 100644
--- a/drivers/net/wireless/ath/wil6210/cfg80211.c
+++ b/drivers/net/wireless/ath/wil6210/cfg80211.c
@@ -1432,7 +1432,7 @@ static int wil_cfg80211_set_wiphy_params(struct wiphy *wiphy, int radio_idx,
int wil_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
struct cfg80211_mgmt_tx_params *params,
- u64 *cookie)
+ u64 cookie)
{
const u8 *buf = params->buf;
size_t len = params->len;
@@ -1488,7 +1488,7 @@ int wil_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
*/
tx_status = (rc == 0);
rc = (rc == -EAGAIN) ? 0 : rc;
- cfg80211_mgmt_tx_status(wdev, *cookie, buf, len, tx_status, GFP_KERNEL);
+ cfg80211_mgmt_tx_status(wdev, cookie, buf, len, tx_status, GFP_KERNEL);
return rc;
}
@@ -1734,7 +1734,7 @@ static int wil_remain_on_channel(struct wiphy *wiphy,
struct wireless_dev *wdev,
struct ieee80211_channel *chan,
unsigned int duration,
- u64 *cookie, const u8 *rx_addr)
+ u64 cookie, const u8 *rx_addr)
{
struct wil6210_priv *wil = wiphy_to_wil(wiphy);
int rc;
@@ -2380,7 +2380,7 @@ void wil_probe_client_flush(struct wil6210_vif *vif)
static int wil_cfg80211_probe_peer(struct wiphy *wiphy,
struct net_device *dev,
- const u8 *peer, u64 *cookie)
+ const u8 *peer, u64 cookie)
{
struct wil6210_priv *wil = wiphy_to_wil(wiphy);
struct wil6210_vif *vif = ndev_to_vif(dev);
@@ -2398,7 +2398,7 @@ static int wil_cfg80211_probe_peer(struct wiphy *wiphy,
return -ENOMEM;
req->cid = cid;
- req->cookie = *cookie;
+ req->cookie = cookie;
mutex_lock(&vif->probe_client_mutex);
list_add_tail(&req->list, &vif->probe_client_pending);
diff --git a/drivers/net/wireless/ath/wil6210/p2p.c b/drivers/net/wireless/ath/wil6210/p2p.c
index 6d2cadca259f..acd8a2e35103 100644
--- a/drivers/net/wireless/ath/wil6210/p2p.c
+++ b/drivers/net/wireless/ath/wil6210/p2p.c
@@ -124,7 +124,7 @@ int wil_p2p_search(struct wil6210_vif *vif,
int wil_p2p_listen(struct wil6210_priv *wil, struct wireless_dev *wdev,
unsigned int duration, struct ieee80211_channel *chan,
- u64 *cookie)
+ u64 cookie)
{
struct wil6210_vif *vif = wdev_to_vif(wil, wdev);
struct wil_p2p_info *p2p = &vif->p2p;
@@ -144,7 +144,7 @@ int wil_p2p_listen(struct wil6210_priv *wil, struct wireless_dev *wdev,
}
memcpy(&p2p->listen_chan, chan, sizeof(*chan));
- p2p->cookie = *cookie;
+ p2p->cookie = cookie;
p2p->listen_duration = duration;
mutex_lock(&wil->vif_mutex);
@@ -166,7 +166,7 @@ int wil_p2p_listen(struct wil6210_priv *wil, struct wireless_dev *wdev,
if (vif->mid == 0)
wil->radio_wdev = wdev;
- cfg80211_ready_on_channel(wdev, *cookie, chan, duration,
+ cfg80211_ready_on_channel(wdev, cookie, chan, duration,
GFP_KERNEL);
out:
diff --git a/drivers/net/wireless/ath/wil6210/wil6210.h b/drivers/net/wireless/ath/wil6210/wil6210.h
index 31e107c81e2d..f8e60be631ca 100644
--- a/drivers/net/wireless/ath/wil6210/wil6210.h
+++ b/drivers/net/wireless/ath/wil6210/wil6210.h
@@ -1301,7 +1301,7 @@ int wil_p2p_search(struct wil6210_vif *vif,
struct cfg80211_scan_request *request);
int wil_p2p_listen(struct wil6210_priv *wil, struct wireless_dev *wdev,
unsigned int duration, struct ieee80211_channel *chan,
- u64 *cookie);
+ u64 cookie);
u8 wil_p2p_stop_discovery(struct wil6210_vif *vif);
int wil_p2p_cancel_listen(struct wil6210_vif *vif, u64 cookie);
void wil_p2p_listen_expired(struct work_struct *work);
@@ -1317,7 +1317,7 @@ int wmi_stop_discovery(struct wil6210_vif *vif);
int wil_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
struct cfg80211_mgmt_tx_params *params,
- u64 *cookie);
+ u64 cookie);
void wil_cfg80211_ap_recovery(struct wil6210_priv *wil);
int wil_cfg80211_iface_combinations_from_fw(
struct wil6210_priv *wil,
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
index 7e0368f6860e..8093724e6d22 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.c
@@ -5554,7 +5554,7 @@ brcmf_cfg80211_update_mgmt_frame_registrations(struct wiphy *wiphy,
int
brcmf_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
- struct cfg80211_mgmt_tx_params *params, u64 *cookie)
+ struct cfg80211_mgmt_tx_params *params, u64 cookie)
{
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
struct ieee80211_channel *chan = params->chan;
@@ -5603,7 +5603,7 @@ brcmf_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
BRCMF_VNDR_IE_PRBRSP_FLAG,
&buf[ie_offset],
ie_len);
- cfg80211_mgmt_tx_status(wdev, *cookie, buf, len, true,
+ cfg80211_mgmt_tx_status(wdev, cookie, buf, len, true,
GFP_KERNEL);
} else if (ieee80211_is_action(mgmt->frame_control)) {
if (len > BRCMF_FIL_ACTION_FRAME_SIZE + DOT11_MGMT_HDR_LEN) {
@@ -5619,7 +5619,7 @@ brcmf_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
}
action_frame = &af_params->action_frame;
/* Add the packet Id */
- action_frame->packet_id = cpu_to_le32(*cookie);
+ action_frame->packet_id = cpu_to_le32(cookie);
/* Add BSSID */
memcpy(&action_frame->da[0], &mgmt->da[0], ETH_ALEN);
memcpy(&af_params->bssid[0], &mgmt->bssid[0], ETH_ALEN);
@@ -5647,12 +5647,12 @@ brcmf_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
le16_to_cpu(action_frame->len));
brcmf_dbg(TRACE, "Action frame, cookie=%lld, len=%d, channel=%d\n",
- *cookie, le16_to_cpu(action_frame->len),
+ cookie, le16_to_cpu(action_frame->len),
le32_to_cpu(af_params->channel));
ack = brcmf_p2p_send_action_frame(vif->ifp, af_params);
- cfg80211_mgmt_tx_status(wdev, *cookie, buf, len, ack,
+ cfg80211_mgmt_tx_status(wdev, cookie, buf, len, ack,
GFP_KERNEL);
free:
kfree(af_params);
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
index 6ceb30142905..63e534523f51 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cfg80211.h
@@ -497,6 +497,6 @@ void brcmf_cfg80211_free_vif(struct net_device *ndev);
int brcmf_set_wsec(struct brcmf_if *ifp, const u8 *key, u16 key_len, u16 flags);
int brcmf_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
- struct cfg80211_mgmt_tx_params *params, u64 *cookie);
+ struct cfg80211_mgmt_tx_params *params, u64 cookie);
#endif /* BRCMFMAC_CFG80211_H */
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
index f0f3a45d7cde..49b33efe22b4 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/cyw/core.c
@@ -100,7 +100,7 @@ static int brcmf_cyw_activate_events(struct brcmf_if *ifp)
static
int brcmf_cyw_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
- struct cfg80211_mgmt_tx_params *params, u64 *cookie)
+ struct cfg80211_mgmt_tx_params *params, u64 cookie)
{
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
struct ieee80211_channel *chan = params->chan;
@@ -154,7 +154,7 @@ int brcmf_cyw_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
memcpy(&mf_params->da[0], &mgmt->da[0], ETH_ALEN);
memcpy(&mf_params->bssid[0], &mgmt->bssid[0], ETH_ALEN);
- mf_params->packet_id = cpu_to_le32(*cookie);
+ mf_params->packet_id = cpu_to_le32(cookie);
memcpy(mf_params->data, &buf[DOT11_MGMT_HDR_LEN],
le16_to_cpu(mf_params->len));
@@ -186,8 +186,7 @@ int brcmf_cyw_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
}
tx_status:
- cfg80211_mgmt_tx_status(wdev, *cookie, buf, len, ack,
- GFP_KERNEL);
+ cfg80211_mgmt_tx_status(wdev, cookie, buf, len, ack, GFP_KERNEL);
free:
kfree(mf_params);
return err;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
index 3d7bf25f1985..32a015d6b769 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.c
@@ -998,7 +998,7 @@ brcmf_p2p_discover_listen(struct brcmf_p2p_info *p2p, u16 channel, u32 duration)
*/
int brcmf_p2p_remain_on_channel(struct wiphy *wiphy, struct wireless_dev *wdev,
struct ieee80211_channel *channel,
- unsigned int duration, u64 *cookie,
+ unsigned int duration, u64 cookie,
const u8 *rx_addr)
{
struct brcmf_cfg80211_info *cfg = wiphy_to_cfg(wiphy);
@@ -1018,8 +1018,8 @@ int brcmf_p2p_remain_on_channel(struct wiphy *wiphy, struct wireless_dev *wdev,
goto exit;
memcpy(&p2p->remain_on_channel, channel, sizeof(*channel));
- p2p->remain_on_channel_cookie = *cookie;
- cfg80211_ready_on_channel(wdev, *cookie, channel, duration, GFP_KERNEL);
+ p2p->remain_on_channel_cookie = cookie;
+ cfg80211_ready_on_channel(wdev, cookie, channel, duration, GFP_KERNEL);
exit:
return err;
diff --git a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h
index 9f3f01ade2b7..707800949170 100644
--- a/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h
+++ b/drivers/net/wireless/broadcom/brcm80211/brcmfmac/p2p.h
@@ -157,7 +157,7 @@ int brcmf_p2p_scan_prep(struct wiphy *wiphy,
struct brcmf_cfg80211_vif *vif);
int brcmf_p2p_remain_on_channel(struct wiphy *wiphy, struct wireless_dev *wdev,
struct ieee80211_channel *channel,
- unsigned int duration, u64 *cookie,
+ unsigned int duration, u64 cookie,
const u8 *rx_addr);
int brcmf_p2p_notify_listen_complete(struct brcmf_if *ifp,
const struct brcmf_event_msg *e,
diff --git a/drivers/net/wireless/marvell/mwifiex/cfg80211.c b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
index 7f446a22a370..de9953ecbefd 100644
--- a/drivers/net/wireless/marvell/mwifiex/cfg80211.c
+++ b/drivers/net/wireless/marvell/mwifiex/cfg80211.c
@@ -196,7 +196,7 @@ mwifiex_form_mgmt_frame(struct sk_buff *skb, const u8 *buf, size_t len)
*/
static int
mwifiex_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
- struct cfg80211_mgmt_tx_params *params, u64 *cookie)
+ struct cfg80211_mgmt_tx_params *params, u64 cookie)
{
const u8 *buf = params->buf;
size_t len = params->len;
@@ -263,9 +263,9 @@ mwifiex_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
if (ieee80211_is_action(mgmt->frame_control))
skb = mwifiex_clone_skb_for_tx_status(priv,
skb,
- MWIFIEX_BUF_FLAG_ACTION_TX_STATUS, cookie);
+ MWIFIEX_BUF_FLAG_ACTION_TX_STATUS, &cookie);
else
- cfg80211_mgmt_tx_status(wdev, *cookie, buf, len, true,
+ cfg80211_mgmt_tx_status(wdev, cookie, buf, len, true,
GFP_ATOMIC);
mwifiex_queue_tx_pkt(priv, skb);
@@ -303,13 +303,13 @@ static int
mwifiex_cfg80211_remain_on_channel(struct wiphy *wiphy,
struct wireless_dev *wdev,
struct ieee80211_channel *chan,
- unsigned int duration, u64 *cookie,
+ unsigned int duration, u64 cookie,
const u8 *rx_addr)
{
struct mwifiex_private *priv = mwifiex_netdev_get_priv(wdev->netdev);
int ret;
- if (!chan || !cookie) {
+ if (!chan) {
mwifiex_dbg(priv->adapter, ERROR, "Invalid parameter for ROC\n");
return -EINVAL;
}
@@ -325,14 +325,14 @@ mwifiex_cfg80211_remain_on_channel(struct wiphy *wiphy,
duration);
if (!ret) {
- priv->roc_cfg.cookie = *cookie;
+ priv->roc_cfg.cookie = cookie;
priv->roc_cfg.chan = *chan;
- cfg80211_ready_on_channel(wdev, *cookie, chan,
+ cfg80211_ready_on_channel(wdev, cookie, chan,
duration, GFP_ATOMIC);
mwifiex_dbg(priv->adapter, INFO,
- "info: ROC, cookie = 0x%llx\n", *cookie);
+ "info: ROC, cookie = 0x%llx\n", cookie);
}
return ret;
@@ -4558,7 +4558,7 @@ mwifiex_cfg80211_disassociate(struct wiphy *wiphy,
static int
mwifiex_cfg80211_probe_peer(struct wiphy *wiphy,
struct net_device *dev, const u8 *peer,
- u64 *cookie)
+ u64 cookie)
{
/* hostapd looks for NL80211_CMD_PROBE_CLIENT support; otherwise,
* it requires monitor-mode support (which mwifiex doesn't support).
diff --git a/drivers/net/wireless/microchip/wilc1000/cfg80211.c b/drivers/net/wireless/microchip/wilc1000/cfg80211.c
index 7c19ad34fda5..bb2748a19329 100644
--- a/drivers/net/wireless/microchip/wilc1000/cfg80211.c
+++ b/drivers/net/wireless/microchip/wilc1000/cfg80211.c
@@ -1100,7 +1100,7 @@ static void wilc_wfi_remain_on_channel_expired(struct wilc_vif *vif, u64 cookie)
static int remain_on_channel(struct wiphy *wiphy,
struct wireless_dev *wdev,
struct ieee80211_channel *chan,
- unsigned int duration, u64 *cookie,
+ unsigned int duration, u64 cookie,
const u8 *rx_addr)
{
int ret = 0;
@@ -1112,7 +1112,7 @@ static int remain_on_channel(struct wiphy *wiphy,
return ret;
}
- ret = wilc_remain_on_channel(vif, *cookie, chan->hw_value,
+ ret = wilc_remain_on_channel(vif, cookie, chan->hw_value,
wilc_wfi_remain_on_channel_expired);
if (ret)
return ret;
@@ -1120,11 +1120,11 @@ static int remain_on_channel(struct wiphy *wiphy,
vif->wilc->op_ch = chan->hw_value;
priv->remain_on_ch_params.listen_ch = chan;
- priv->remain_on_ch_params.listen_cookie = *cookie;
+ priv->remain_on_ch_params.listen_cookie = cookie;
priv->p2p_listen_state = true;
priv->remain_on_ch_params.listen_duration = duration;
- cfg80211_ready_on_channel(wdev, *cookie, chan, duration, GFP_KERNEL);
+ cfg80211_ready_on_channel(wdev, cookie, chan, duration, GFP_KERNEL);
mod_timer(&vif->hif_drv->remain_on_ch_timer,
jiffies + msecs_to_jiffies(duration + 1000));
@@ -1147,7 +1147,7 @@ static int cancel_remain_on_channel(struct wiphy *wiphy,
static int mgmt_tx(struct wiphy *wiphy,
struct wireless_dev *wdev,
struct cfg80211_mgmt_tx_params *params,
- u64 *cookie)
+ u64 cookie)
{
struct ieee80211_channel *chan = params->chan;
unsigned int wait = params->wait;
@@ -1164,7 +1164,7 @@ static int mgmt_tx(struct wiphy *wiphy,
const u8 *vendor_ie;
int ret = 0;
- priv->tx_cookie = *cookie;
+ priv->tx_cookie = cookie;
mgmt = (const struct ieee80211_mgmt *)buf;
if (!ieee80211_is_mgmt(mgmt->frame_control))
diff --git a/drivers/net/wireless/nxp/nxpwifi/cfg80211.c b/drivers/net/wireless/nxp/nxpwifi/cfg80211.c
index 198174ac754e..c820f08d2835 100644
--- a/drivers/net/wireless/nxp/nxpwifi/cfg80211.c
+++ b/drivers/net/wireless/nxp/nxpwifi/cfg80211.c
@@ -150,7 +150,7 @@ nxpwifi_form_mgmt_frame(struct sk_buff *skb, const u8 *buf, size_t len)
/* cfg80211 operation handler to transmit a management frame. */
static int
nxpwifi_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
- struct cfg80211_mgmt_tx_params *params, u64 *cookie)
+ struct cfg80211_mgmt_tx_params *params, u64 cookie)
{
const u8 *buf = params->buf;
size_t len = params->len;
@@ -216,9 +216,9 @@ nxpwifi_cfg80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
if (ieee80211_is_action(mgmt->frame_control))
skb = nxpwifi_clone_skb_for_tx_status(priv,
skb,
- NXPWIFI_BUF_FLAG_ACTION_TX_STATUS, cookie);
+ NXPWIFI_BUF_FLAG_ACTION_TX_STATUS, &cookie);
else
- cfg80211_mgmt_tx_status(wdev, *cookie, buf, len, true,
+ cfg80211_mgmt_tx_status(wdev, cookie, buf, len, true,
GFP_ATOMIC);
nxpwifi_queue_tx_pkt(priv, skb);
@@ -253,14 +253,14 @@ static int
nxpwifi_cfg80211_remain_on_channel(struct wiphy *wiphy,
struct wireless_dev *wdev,
struct ieee80211_channel *chan,
- unsigned int duration, u64 *cookie,
+ unsigned int duration, u64 cookie,
const u8 *rx_addr)
{
struct nxpwifi_private *priv = nxpwifi_netdev_get_priv(wdev->netdev);
struct nxpwifi_adapter *adapter = priv->adapter;
int ret;
- if (!chan || !cookie) {
+ if (!chan) {
nxpwifi_dbg(adapter, ERROR, "Invalid parameter for ROC\n");
return -EINVAL;
}
@@ -276,14 +276,14 @@ nxpwifi_cfg80211_remain_on_channel(struct wiphy *wiphy,
duration);
if (!ret) {
- priv->roc_cfg.cookie = *cookie;
+ priv->roc_cfg.cookie = cookie;
priv->roc_cfg.chan = *chan;
- cfg80211_ready_on_channel(wdev, *cookie, chan,
+ cfg80211_ready_on_channel(wdev, cookie, chan,
duration, GFP_ATOMIC);
nxpwifi_dbg(adapter, INFO,
- "info: ROC, cookie = 0x%llx\n", *cookie);
+ "info: ROC, cookie = 0x%llx\n", cookie);
}
return ret;
@@ -3616,7 +3616,7 @@ nxpwifi_cfg80211_disassociate(struct wiphy *wiphy,
static int
nxpwifi_cfg80211_probe_peer(struct wiphy *wiphy,
struct net_device *dev, const u8 *peer,
- u64 *cookie)
+ u64 cookie)
{
/*
* hostapd looks for NL80211_CMD_PROBE_CLIENT support; otherwise,
diff --git a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
index 284bc61c46d0..45e2b7ae9633 100644
--- a/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
+++ b/drivers/net/wireless/quantenna/qtnfmac/cfg80211.c
@@ -446,7 +446,7 @@ qtnf_update_mgmt_frame_registrations(struct wiphy *wiphy,
static int
qtnf_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
- struct cfg80211_mgmt_tx_params *params, u64 *cookie)
+ struct cfg80211_mgmt_tx_params *params, u64 cookie)
{
struct qtnf_vif *vif = qtnf_netdev_get_priv(wdev->netdev);
const struct ieee80211_mgmt *mgmt_frame = (void *)params->buf;
diff --git a/include/net/cfg80211.h b/include/net/cfg80211.h
index a30550f356ab..56132a122298 100644
--- a/include/net/cfg80211.h
+++ b/include/net/cfg80211.h
@@ -5459,14 +5459,14 @@ struct cfg80211_ops {
struct wireless_dev *wdev,
struct ieee80211_channel *chan,
unsigned int duration,
- u64 *cookie, const u8 *rx_addr);
+ u64 cookie, const u8 *rx_addr);
int (*cancel_remain_on_channel)(struct wiphy *wiphy,
struct wireless_dev *wdev,
u64 cookie);
int (*mgmt_tx)(struct wiphy *wiphy, struct wireless_dev *wdev,
struct cfg80211_mgmt_tx_params *params,
- u64 *cookie);
+ u64 cookie);
int (*mgmt_tx_cancel_wait)(struct wiphy *wiphy,
struct wireless_dev *wdev,
u64 cookie);
@@ -5513,7 +5513,7 @@ struct cfg80211_ops {
const u8 *peer, enum nl80211_tdls_operation oper);
int (*probe_peer)(struct wiphy *wiphy, struct net_device *dev,
- const u8 *peer, u64 *cookie);
+ const u8 *peer, u64 cookie);
int (*set_noack_map)(struct wiphy *wiphy,
struct net_device *dev,
diff --git a/net/mac80211/cfg.c b/net/mac80211/cfg.c
index 3f9954338707..310c14560065 100644
--- a/net/mac80211/cfg.c
+++ b/net/mac80211/cfg.c
@@ -4936,7 +4936,7 @@ static int ieee80211_set_rekey_data(struct wiphy *wiphy,
}
static int ieee80211_probe_peer(struct wiphy *wiphy, struct net_device *dev,
- const u8 *peer, u64 *cookie)
+ const u8 *peer, u64 cookie)
{
struct ieee80211_sub_if_data *sdata = IEEE80211_DEV_TO_SUB_IF(dev);
struct ieee80211_local *local = sdata->local;
@@ -5043,7 +5043,7 @@ static int ieee80211_probe_peer(struct wiphy *wiphy, struct net_device *dev,
if (qos)
nullfunc->qos_ctrl = cpu_to_le16(7);
- ret = ieee80211_attach_ack_skb(local, skb, cookie, GFP_ATOMIC);
+ ret = ieee80211_attach_ack_skb(local, skb, &cookie, GFP_ATOMIC);
if (ret) {
kfree_skb(skb);
return ret;
diff --git a/net/mac80211/ieee80211_i.h b/net/mac80211/ieee80211_i.h
index a8ea55265f93..eecaaa2752db 100644
--- a/net/mac80211/ieee80211_i.h
+++ b/net/mac80211/ieee80211_i.h
@@ -2148,12 +2148,12 @@ void ieee80211_roc_purge(struct ieee80211_local *local,
struct ieee80211_sub_if_data *sdata);
int ieee80211_remain_on_channel(struct wiphy *wiphy, struct wireless_dev *wdev,
struct ieee80211_channel *chan,
- unsigned int duration, u64 *cookie,
+ unsigned int duration, u64 cookie,
const u8 *rx_addr);
int ieee80211_cancel_remain_on_channel(struct wiphy *wiphy,
struct wireless_dev *wdev, u64 cookie);
int ieee80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
- struct cfg80211_mgmt_tx_params *params, u64 *cookie);
+ struct cfg80211_mgmt_tx_params *params, u64 cookie);
int ieee80211_mgmt_tx_cancel_wait(struct wiphy *wiphy,
struct wireless_dev *wdev, u64 cookie);
diff --git a/net/mac80211/offchannel.c b/net/mac80211/offchannel.c
index 94be6497f259..7acef80d5f1f 100644
--- a/net/mac80211/offchannel.c
+++ b/net/mac80211/offchannel.c
@@ -702,7 +702,7 @@ static int ieee80211_start_roc_work(struct ieee80211_local *local,
int ieee80211_remain_on_channel(struct wiphy *wiphy, struct wireless_dev *wdev,
struct ieee80211_channel *chan,
- unsigned int duration, u64 *cookie,
+ unsigned int duration, u64 cookie,
const u8 *rx_addr)
{
struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
@@ -711,7 +711,7 @@ int ieee80211_remain_on_channel(struct wiphy *wiphy, struct wireless_dev *wdev,
lockdep_assert_wiphy(local->hw.wiphy);
return ieee80211_start_roc_work(local, sdata, chan,
- duration, cookie, NULL,
+ duration, &cookie, NULL,
IEEE80211_ROC_TYPE_NORMAL);
}
@@ -808,7 +808,7 @@ int ieee80211_cancel_remain_on_channel(struct wiphy *wiphy,
}
int ieee80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
- struct cfg80211_mgmt_tx_params *params, u64 *cookie)
+ struct cfg80211_mgmt_tx_params *params, u64 cookie)
{
struct ieee80211_sub_if_data *sdata = IEEE80211_WDEV_TO_SUB_IF(wdev);
struct ieee80211_local *local = sdata->local;
@@ -1014,7 +1014,7 @@ int ieee80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
/* make a copy to preserve the frame contents
* in case of encryption.
*/
- ret = ieee80211_attach_ack_skb(local, skb, cookie, GFP_KERNEL);
+ ret = ieee80211_attach_ack_skb(local, skb, &cookie, GFP_KERNEL);
if (ret) {
kfree_skb(skb);
goto out_unlock;
@@ -1035,7 +1035,7 @@ int ieee80211_mgmt_tx(struct wiphy *wiphy, struct wireless_dev *wdev,
/* This will handle all kinds of coalescing and immediate TX */
ret = ieee80211_start_roc_work(local, sdata, params->chan,
- params->wait, cookie, skb,
+ params->wait, &cookie, skb,
IEEE80211_ROC_TYPE_MGMT_TX);
if (ret)
ieee80211_free_txskb(&local->hw, skb);
diff --git a/net/wireless/core.h b/net/wireless/core.h
index 399037514943..b3ead98aee07 100644
--- a/net/wireless/core.h
+++ b/net/wireless/core.h
@@ -402,7 +402,7 @@ void cfg80211_mlme_purge_registrations(struct wireless_dev *wdev);
int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev,
struct wireless_dev *wdev,
struct cfg80211_mgmt_tx_params *params,
- u64 *cookie);
+ u64 cookie);
void cfg80211_oper_and_ht_capa(struct ieee80211_ht_cap *ht_capa,
const struct ieee80211_ht_cap *ht_capa_mask);
void cfg80211_oper_and_vht_capa(struct ieee80211_vht_cap *vht_capa,
diff --git a/net/wireless/mlme.c b/net/wireless/mlme.c
index 2a2c173058ba..34f9003d5c54 100644
--- a/net/wireless/mlme.c
+++ b/net/wireless/mlme.c
@@ -851,7 +851,7 @@ static bool cfg80211_allowed_random_address(struct wireless_dev *wdev,
int cfg80211_mlme_mgmt_tx(struct cfg80211_registered_device *rdev,
struct wireless_dev *wdev,
- struct cfg80211_mgmt_tx_params *params, u64 *cookie)
+ struct cfg80211_mgmt_tx_params *params, u64 cookie)
{
const struct ieee80211_mgmt *mgmt;
u16 stype;
diff --git a/net/wireless/nl80211.c b/net/wireless/nl80211.c
index bfb3005c23a7..cf2fece5a1e1 100644
--- a/net/wireless/nl80211.c
+++ b/net/wireless/nl80211.c
@@ -14632,7 +14632,7 @@ static int nl80211_remain_on_channel(struct sk_buff *skb,
cookie = cfg80211_assign_cookie(rdev);
err = rdev_remain_on_channel(rdev, wdev, chandef.chan,
- duration, &cookie, rx_addr);
+ duration, cookie, rx_addr);
if (err)
goto free_msg;
@@ -14873,7 +14873,7 @@ static int nl80211_tx_mgmt(struct sk_buff *skb, struct genl_info *info)
params.chan = chandef.chan;
cookie = cfg80211_assign_cookie(rdev);
- err = cfg80211_mlme_mgmt_tx(rdev, wdev, ¶ms, &cookie);
+ err = cfg80211_mlme_mgmt_tx(rdev, wdev, ¶ms, cookie);
if (err)
goto free_msg;
@@ -16362,7 +16362,7 @@ static int nl80211_probe_peer(struct sk_buff *skb, struct genl_info *info)
}
cookie = cfg80211_assign_cookie(rdev);
- err = rdev_probe_peer(rdev, dev, addr, &cookie);
+ err = rdev_probe_peer(rdev, dev, addr, cookie);
if (err)
goto free_msg;
diff --git a/net/wireless/rdev-ops.h b/net/wireless/rdev-ops.h
index 6c3bad8b2d6f..c46e97c90fdc 100644
--- a/net/wireless/rdev-ops.h
+++ b/net/wireless/rdev-ops.h
@@ -736,14 +736,14 @@ static inline int
rdev_remain_on_channel(struct cfg80211_registered_device *rdev,
struct wireless_dev *wdev,
struct ieee80211_channel *chan,
- unsigned int duration, u64 *cookie, const u8 *rx_addr)
+ unsigned int duration, u64 cookie, const u8 *rx_addr)
{
int ret;
trace_rdev_remain_on_channel(&rdev->wiphy, wdev, chan, duration,
rx_addr);
ret = rdev->ops->remain_on_channel(&rdev->wiphy, wdev, chan,
duration, cookie, rx_addr);
- trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
+ trace_rdev_return_int_cookie(&rdev->wiphy, ret, cookie);
return ret;
}
@@ -761,12 +761,12 @@ rdev_cancel_remain_on_channel(struct cfg80211_registered_device *rdev,
static inline int rdev_mgmt_tx(struct cfg80211_registered_device *rdev,
struct wireless_dev *wdev,
struct cfg80211_mgmt_tx_params *params,
- u64 *cookie)
+ u64 cookie)
{
int ret;
trace_rdev_mgmt_tx(&rdev->wiphy, wdev, params);
ret = rdev->ops->mgmt_tx(&rdev->wiphy, wdev, params, cookie);
- trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
+ trace_rdev_return_int_cookie(&rdev->wiphy, ret, cookie);
return ret;
}
@@ -950,12 +950,12 @@ static inline int rdev_tdls_oper(struct cfg80211_registered_device *rdev,
static inline int rdev_probe_peer(struct cfg80211_registered_device *rdev,
struct net_device *dev, const u8 *peer,
- u64 *cookie)
+ u64 cookie)
{
int ret;
trace_rdev_probe_peer(&rdev->wiphy, dev, peer);
ret = rdev->ops->probe_peer(&rdev->wiphy, dev, peer, cookie);
- trace_rdev_return_int_cookie(&rdev->wiphy, ret, *cookie);
+ trace_rdev_return_int_cookie(&rdev->wiphy, ret, cookie);
return ret;
}
--
2.54.0
^ permalink raw reply related [flat|nested] 16+ messages in thread
* Re: [PATCH -next 01/10] wifi: cfg80211: pre-assign cookie for remain_on_channel, mgmt_tx, probe_peer and tx_control_port
2026-07-26 19:25 ` [PATCH -next 01/10] wifi: cfg80211: pre-assign cookie for remain_on_channel, mgmt_tx, probe_peer and tx_control_port Arend van Spriel
@ 2026-07-26 19:37 ` Johannes Berg
2026-07-26 20:29 ` Jeff Johnson
0 siblings, 1 reply; 16+ messages in thread
From: Johannes Berg @ 2026-07-26 19:37 UTC (permalink / raw)
To: Arend van Spriel; +Cc: linux-wireless, brcm80211
On Sun, 2026-07-26 at 21:25 +0200, Arend van Spriel wrote:
> Having a single place for cookie assignment and keeping that
> responsibility in the cfg80211 subsystem is a logical choice as it
> handles the userspace nl80211 API. add_nan_func already does this:
> cfg80211 calls cfg80211_assign_cookie() before invoking the driver.
> Apply the same pattern to remain_on_channel, mgmt_tx, probe_peer and
> tx_control_port by pre-assigning the cookie in the nl80211 command
> handlers before the rdev_* call. For tx_control_port the cookie is
> only pre-assigned when the caller requests an ack (cookie pointer
> non-NULL).
>
> Drivers may still overwrite the value for now; subsequent patches will
> remove per-driver cookie generation. Update the cfg80211_ops kerneldoc
> to note that the cookie is pre-assigned and drivers must not modify it.
>
> Assisted-by: Claude:claude-sonnet-4-6
Hah, I _knew_ it, just based on the text style, before even reading
beyond the cover letter ... I'm starting to even be able to tell the
companies apart (not models yet, i.e. you could've told me this was
Opus). E.g. "Patch 1 is the enabling change: [...]", "Non-obvious
aspects" or "This means the cookie field is threaded through" etc.
Fun. What weird times we live in.
But you forgot S-o-b.
johannes
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH -next 10/10] wifi: cfg80211: convert cookie output to input parameter
2026-07-26 19:25 ` [PATCH -next 10/10] wifi: cfg80211: convert cookie output to input parameter Arend van Spriel
@ 2026-07-26 19:37 ` Johannes Berg
2026-07-26 22:12 ` Arend van Spriel
0 siblings, 1 reply; 16+ messages in thread
From: Johannes Berg @ 2026-07-26 19:37 UTC (permalink / raw)
To: Arend van Spriel; +Cc: linux-wireless, brcm80211
On Sun, 2026-07-26 at 21:25 +0200, Arend van Spriel wrote:
> The tx_control_port op is excluded: its cookie pointer is nullable
> (passed as NULL when dont_wait_for_ack is set), so the nullable
> pointer semantics are still required.
Well, kind of? Since we guarantee non-zero cookies, we could just pass
zero for this case, maybe that'd be nicer here?
johannes
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH -next 01/10] wifi: cfg80211: pre-assign cookie for remain_on_channel, mgmt_tx, probe_peer and tx_control_port
2026-07-26 19:37 ` Johannes Berg
@ 2026-07-26 20:29 ` Jeff Johnson
2026-07-26 22:11 ` Arend van Spriel
0 siblings, 1 reply; 16+ messages in thread
From: Jeff Johnson @ 2026-07-26 20:29 UTC (permalink / raw)
To: Johannes Berg, Arend van Spriel; +Cc: linux-wireless, brcm80211
On 7/26/2026 12:37 PM, Johannes Berg wrote:
> On Sun, 2026-07-26 at 21:25 +0200, Arend van Spriel wrote:
>> Having a single place for cookie assignment and keeping that
>> responsibility in the cfg80211 subsystem is a logical choice as it
>> handles the userspace nl80211 API. add_nan_func already does this:
>> cfg80211 calls cfg80211_assign_cookie() before invoking the driver.
>> Apply the same pattern to remain_on_channel, mgmt_tx, probe_peer and
>> tx_control_port by pre-assigning the cookie in the nl80211 command
>> handlers before the rdev_* call. For tx_control_port the cookie is
>> only pre-assigned when the caller requests an ack (cookie pointer
>> non-NULL).
>>
>> Drivers may still overwrite the value for now; subsequent patches will
>> remove per-driver cookie generation. Update the cfg80211_ops kerneldoc
>> to note that the cookie is pre-assigned and drivers must not modify it.
>>
>> Assisted-by: Claude:claude-sonnet-4-6
>
> Hah, I _knew_ it, just based on the text style, before even reading
> beyond the cover letter ... I'm starting to even be able to tell the
> companies apart (not models yet, i.e. you could've told me this was
> Opus). E.g. "Patch 1 is the enabling change: [...]", "Non-obvious
> aspects" or "This means the cookie field is threaded through" etc.
>
> Fun. What weird times we live in.
Indeed. And yes, I tend to edit the LLM commit text since the tense is often
wrong and the vocabulary often isn't want I'd use.
>
> But you forgot S-o-b.
also wrong branch tag: s/-next/wireless-next/
>
> johannes
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH -next 01/10] wifi: cfg80211: pre-assign cookie for remain_on_channel, mgmt_tx, probe_peer and tx_control_port
2026-07-26 20:29 ` Jeff Johnson
@ 2026-07-26 22:11 ` Arend van Spriel
0 siblings, 0 replies; 16+ messages in thread
From: Arend van Spriel @ 2026-07-26 22:11 UTC (permalink / raw)
To: Jeff Johnson, Johannes Berg; +Cc: linux-wireless, brcm80211
Op 26 juli 2026 22:29:09 schreef Jeff Johnson <jeff.johnson@oss.qualcomm.com>:
> On 7/26/2026 12:37 PM, Johannes Berg wrote:
>> On Sun, 2026-07-26 at 21:25 +0200, Arend van Spriel wrote:
>>> Having a single place for cookie assignment and keeping that
>>> responsibility in the cfg80211 subsystem is a logical choice as it
>>> handles the userspace nl80211 API. add_nan_func already does this:
>>> cfg80211 calls cfg80211_assign_cookie() before invoking the driver.
>>> Apply the same pattern to remain_on_channel, mgmt_tx, probe_peer and
>>> tx_control_port by pre-assigning the cookie in the nl80211 command
>>> handlers before the rdev_* call. For tx_control_port the cookie is
>>> only pre-assigned when the caller requests an ack (cookie pointer
>>> non-NULL).
>>>
>>> Drivers may still overwrite the value for now; subsequent patches will
>>> remove per-driver cookie generation. Update the cfg80211_ops kerneldoc
>>> to note that the cookie is pre-assigned and drivers must not modify it.
>>>
>>> Assisted-by: Claude:claude-sonnet-4-6
>>
>> Hah, I _knew_ it, just based on the text style, before even reading
>> beyond the cover letter ... I'm starting to even be able to tell the
>> companies apart (not models yet, i.e. you could've told me this was
>> Opus). E.g. "Patch 1 is the enabling change: [...]", "Non-obvious
>> aspects" or "This means the cookie field is threaded through" etc.
>>
>> Fun. What weird times we live in.
>
> Indeed. And yes, I tend to edit the LLM commit text since the tense is often
> wrong and the vocabulary often isn't want I'd use.
@Johannes: Glad you can see the fun of it ;-)
Agree that LLM text show some typical choice of words and phrasing. I only
edit (or prompt to correct) the text when I do not understand what is
written, too much words are used, or missing details I care about.
>
>
>>
>> But you forgot S-o-b.
>
> also wrong branch tag: s/-next/wireless-next/
Patchwork seems to have no problem determining the branch/repo.
Will repost with the S-o-B in place.
Gr. AvS
>
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [PATCH -next 10/10] wifi: cfg80211: convert cookie output to input parameter
2026-07-26 19:37 ` Johannes Berg
@ 2026-07-26 22:12 ` Arend van Spriel
0 siblings, 0 replies; 16+ messages in thread
From: Arend van Spriel @ 2026-07-26 22:12 UTC (permalink / raw)
To: Johannes Berg; +Cc: linux-wireless, brcm80211
Op 26 juli 2026 21:38:03 schreef Johannes Berg <johannes@sipsolutions.net>:
> On Sun, 2026-07-26 at 21:25 +0200, Arend van Spriel wrote:
>> The tx_control_port op is excluded: its cookie pointer is nullable
>> (passed as NULL when dont_wait_for_ack is set), so the nullable
>> pointer semantics are still required.
>
> Well, kind of? Since we guarantee non-zero cookies, we could just pass
> zero for this case, maybe that'd be nicer here?
Crossed my mind as well. Will look into it.
Gr. AvS
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2026-07-26 22:12 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-07-26 19:25 [PATCH -next 00/10] wifi: cfg80211: consolidate cookie assignment for async ops Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 01/10] wifi: cfg80211: pre-assign cookie for remain_on_channel, mgmt_tx, probe_peer and tx_control_port Arend van Spriel
2026-07-26 19:37 ` Johannes Berg
2026-07-26 20:29 ` Jeff Johnson
2026-07-26 22:11 ` Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 02/10] wifi: mac80211: stop using ieee80211_mgmt_tx_cookie() Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 03/10] wifi: ath6kl: use pre-assigned cookie for remain_on_channel and mgmt_tx Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 04/10] wifi: wil6210: use pre-assigned cookie for remain_on_channel, mgmt_tx and probe_peer Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 05/10] wifi: brcmfmac: use pre-assigned cookie for remain_on_channel and mgmt_tx Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 06/10] wifi: mwifiex: " Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 07/10] wifi: wilc1000: " Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 08/10] wifi: nxpwifi: " Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 09/10] wifi: qtnfmac: use pre-assigned cookie for mgmt_tx Arend van Spriel
2026-07-26 19:25 ` [PATCH -next 10/10] wifi: cfg80211: convert cookie output to input parameter Arend van Spriel
2026-07-26 19:37 ` Johannes Berg
2026-07-26 22:12 ` Arend van Spriel
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox