mirror of
https://github.com/outbackdingo/mt76.git
synced 2026-10-24 13:26:48 +00:00
wifi: mt76: mt7925: support deferred NAN schedule update and cluster events
Send the is_deferred flag in the availability control TLV so FW
applies a deferred schedule change at the next DW boundary, and report
the NAN_UNI_EVENT_ID_SCHED_UPDATE_DONE and STARTED_CLUSTER events to
mac80211 via ieee80211_nan_sched_update_done() and
ieee80211_nan_cluster_joined().
Both events arrive on the BH-disabled MCU RX path, where notifying
mac80211 inline is wrong: ieee80211_nan_sched_update_done() needs the
wiphy mutex and may sleep, and ieee80211_nan_cluster_joined() would
fire during NAN_START before mac80211 sets sdata->u.nan.started and
before the supplicant subscribes to NL80211_MCGRP_NAN, so the
self-anchor cluster-join is lost and a solo anchor master can never
publish a service.
Deliver both events from a shared nan_deferred_work selected by a
pending bitmap instead. The bitmap spinlock is taken with
spin_lock_bh() on the RX side, the work re-checks nan_vif under the
wiphy mutex, and the stop path clears the bitmap. STARTED_CLUSTER
signals new_cluster=true, and JOINED_CLUSTER is corrected to
new_cluster=false.
Fixes: a5487a682406 ("wifi: mt76: mt7925: add NAN MCU helpers")
Co-developed-by: Sean Wang <[email protected]>
Signed-off-by: Sean Wang <[email protected]>
Co-developed-by: Stella Liu <[email protected]>
Signed-off-by: Stella Liu <[email protected]>
Signed-off-by: Jacobs Wu <[email protected]>
Link: https://patch.msgid.link/[email protected]
Signed-off-by: Felix Fietkau <[email protected]>
This commit is contained in:
@@ -342,6 +342,14 @@ struct mt792x_dev {
|
||||
struct ieee80211_vif *nan_vif;
|
||||
const struct ieee80211_iface_combination *iface_combinations;
|
||||
int n_iface_combinations;
|
||||
/* deferred NAN MCU events run out of the atomic RX path on one shared
|
||||
* work; see mt7925_nan_deferred_work() and enum mt7925_nan_deferred_event
|
||||
*/
|
||||
struct work_struct nan_deferred_work;
|
||||
/* protects @nan_deferred_pending */
|
||||
spinlock_t nan_deferred_lock;
|
||||
unsigned long nan_deferred_pending;
|
||||
u8 nan_started_cluster_id[ETH_ALEN];
|
||||
};
|
||||
|
||||
static inline struct mt792x_bss_conf *
|
||||
|
||||
Reference in New Issue
Block a user