git: 90b6a9ac0c1f - main - LinuxKPI: 802.11: implement mtx support for ieee80211_iterate_interfaces

From: Bjoern A. Zeeb <bz_at_FreeBSD.org>
Date: Wed, 19 Nov 2025 02:27:30 UTC
The branch main has been updated by bz:

URL: https://cgit.FreeBSD.org/src/commit/?id=90b6a9ac0c1f4333f87f4b172482f40979324d7c

commit 90b6a9ac0c1f4333f87f4b172482f40979324d7c
Author:     Bjoern A. Zeeb <bz@FreeBSD.org>
AuthorDate: 2025-11-19 02:18:43 +0000
Commit:     Bjoern A. Zeeb <bz@FreeBSD.org>
CommitDate: 2025-11-19 02:25:38 +0000

    LinuxKPI: 802.11: implement mtx support for ieee80211_iterate_interfaces
    
    Implement the lockdep_assert_wiphy call for
    ieee80211_iterate_active_interfaces_mtx() to avoid a warning when
    used and to make sure callers comply with assumptions.
    
    Leave an "IMPROVE" note as we can likely switch another of the multiple
    callers to RCU.
    
    Sponsored by:   The FreeBSD Foundation
    MFC after:      3 days
---
 sys/compat/linuxkpi/common/src/linux_80211.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/sys/compat/linuxkpi/common/src/linux_80211.c b/sys/compat/linuxkpi/common/src/linux_80211.c
index f025f191a3bd..c68ed4491c3b 100644
--- a/sys/compat/linuxkpi/common/src/linux_80211.c
+++ b/sys/compat/linuxkpi/common/src/linux_80211.c
@@ -6906,17 +6906,23 @@ linuxkpi_ieee80211_iterate_interfaces(struct ieee80211_hw *hw,
 	if (flags & ~(IEEE80211_IFACE_ITER_NORMAL|
 	    IEEE80211_IFACE_ITER_RESUME_ALL|
 	    IEEE80211_IFACE_SKIP_SDATA_NOT_IN_DRIVER|
-	    IEEE80211_IFACE_ITER_ACTIVE|IEEE80211_IFACE_ITER__ATOMIC)) {
+	    IEEE80211_IFACE_ITER_ACTIVE|IEEE80211_IFACE_ITER__ATOMIC|
+	    IEEE80211_IFACE_ITER__MTX)) {
 		ic_printf(lhw->ic, "XXX TODO %s flags(%#x) not yet supported.\n",
 		    __func__, flags);
 	}
 
+	if ((flags & IEEE80211_IFACE_ITER__MTX) != 0)
+		lockdep_assert_wiphy(hw->wiphy);
+
 	active = (flags & IEEE80211_IFACE_ITER_ACTIVE) != 0;
 	atomic = (flags & IEEE80211_IFACE_ITER__ATOMIC) != 0;
 	nin_drv = (flags & IEEE80211_IFACE_SKIP_SDATA_NOT_IN_DRIVER) != 0;
 
-	if (atomic)
+	if (atomic) {
+		IMPROVE("LKPI_80211_LHW_LVIF_LOCK atomic assume to be rcu?");
 		LKPI_80211_LHW_LVIF_LOCK(lhw);
+	}
 	TAILQ_FOREACH(lvif, &lhw->lvif_head, lvif_entry) {
 		struct ieee80211vap *vap;