The branch main has been updated by bz:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=4a8e4d15465cbf6f1bc4c6a09f50f97ae2d5bd7d

commit 4a8e4d15465cbf6f1bc4c6a09f50f97ae2d5bd7d
Author:     Bjoern A. Zeeb <[email protected]>
AuthorDate: 2022-11-29 18:21:05 +0000
Commit:     Bjoern A. Zeeb <[email protected]>
CommitDate: 2022-11-29 21:20:37 +0000

    net80211: fix IEEE80211_DEBUG_REFCNT builds
    
    Remove the KPI/KBI changes from ieee80211_node.h and always use the
    macros to pass in __func__ and __LINE__ to the functions.
    The actual implementations are prefixed by "_" rather than suffixed
    by "_debug" as they no longer are "debug"-specific.
    
    Some of the select functions were not actually using the passed in
    func, line options; however they are calling other functions which
    use them.  Directly call the internal implementation in those cases
    passing the arguments on.
    
    Use a file-local __debrefcnt_used define to mark the arguments __unused
    in cases when we compile without IEEE80211_DEBUG_REFCNT and hope the
    toolchain is intelligent enough to not pass them at all in those cases.
    
    Also _ieee80211_free_node() now has a conflict so make the previous
    _ieee80211_free_node() the new __ieee80211_free_node().
    
    Add IEEE80211_DEBUG_REFCNT to the NOTES file on amd64 to keep exercising
    the option.
    
    Sponsored by:   The FreeBSD Foundation
    X-MFC:          never
    Discussed on:   freebsd-wireless
    Reviewed by:    adrian
    Differential Revision: https://reviews.freebsd.org/D37529
---
 sys/amd64/conf/NOTES          |   3 ++
 sys/net80211/ieee80211_node.c | 120 ++++++++++++++++--------------------------
 sys/net80211/ieee80211_node.h |  55 +++++++------------
 3 files changed, 67 insertions(+), 111 deletions(-)

diff --git a/sys/amd64/conf/NOTES b/sys/amd64/conf/NOTES
index 42cc23d076b9..0781d03900ca 100644
--- a/sys/amd64/conf/NOTES
+++ b/sys/amd64/conf/NOTES
@@ -380,6 +380,9 @@ device              iwn6000g2bfw
 device         iwn6050fw
 device         wpifw
 
+# net80211 options
+options        IEEE80211_DEBUG_REFCNT
+
 #
 # Non-Transparent Bridge (NTB) drivers
 #
diff --git a/sys/net80211/ieee80211_node.c b/sys/net80211/ieee80211_node.c
index bc8a240811de..8a31a4576b3f 100644
--- a/sys/net80211/ieee80211_node.c
+++ b/sys/net80211/ieee80211_node.c
@@ -59,6 +59,12 @@ __FBSDID("$FreeBSD$");
 
 #include <net/bpf.h>
 
+#ifdef IEEE80211_DEBUG_REFCNT
+#define        __debrefcnt_used
+#else
+#define        __debrefcnt_used        __unused
+#endif
+
 /*
  * IEEE80211_NODE_HASHSIZE must be a power of 2.
  */
@@ -89,7 +95,7 @@ static void node_getsignal(const struct ieee80211_node *, 
int8_t *, int8_t *);
 static void node_getmimoinfo(const struct ieee80211_node *,
        struct ieee80211_mimo_info *);
 
-static void _ieee80211_free_node(struct ieee80211_node *);
+static void __ieee80211_free_node(struct ieee80211_node *);
 
 static void node_reclaim(struct ieee80211_node_table *nt,
        struct ieee80211_node *ni);
@@ -1436,7 +1442,7 @@ ieee80211_alloc_node(struct ieee80211_node_table *nt,
                vap->iv_stats.is_rx_nodealloc++;
                ieee80211_psq_cleanup(&ni->ni_psq);
                ieee80211_ratectl_node_deinit(ni);
-               _ieee80211_free_node(ni);
+               __ieee80211_free_node(ni);
                return NULL;
        }
 
@@ -1488,7 +1494,7 @@ ieee80211_tmp_node(struct ieee80211vap *vap,
                        vap->iv_stats.is_rx_nodealloc++;
                        ieee80211_psq_cleanup(&ni->ni_psq);
                        ieee80211_ratectl_node_deinit(ni);
-                       _ieee80211_free_node(ni);
+                       __ieee80211_free_node(ni);
                        return NULL;
                }
 
@@ -1586,13 +1592,9 @@ ieee80211_node_create_wds(struct ieee80211vap *vap,
 }
 
 struct ieee80211_node *
-#ifdef IEEE80211_DEBUG_REFCNT
-ieee80211_find_node_locked_debug(struct ieee80211_node_table *nt,
-       const uint8_t macaddr[IEEE80211_ADDR_LEN], const char *func, int line)
-#else
-ieee80211_find_node_locked(struct ieee80211_node_table *nt,
-       const uint8_t macaddr[IEEE80211_ADDR_LEN])
-#endif
+_ieee80211_find_node_locked(struct ieee80211_node_table *nt,
+    const uint8_t macaddr[IEEE80211_ADDR_LEN],
+    const char *func __debrefcnt_used, int line __debrefcnt_used)
 {
        struct ieee80211_node *ni;
        int hash;
@@ -1617,32 +1619,22 @@ ieee80211_find_node_locked(struct ieee80211_node_table 
*nt,
 }
 
 struct ieee80211_node *
-#ifdef IEEE80211_DEBUG_REFCNT
-ieee80211_find_node_debug(struct ieee80211_node_table *nt,
-       const uint8_t macaddr[IEEE80211_ADDR_LEN], const char *func, int line)
-#else
-ieee80211_find_node(struct ieee80211_node_table *nt,
-       const uint8_t macaddr[IEEE80211_ADDR_LEN])
-#endif
+_ieee80211_find_node(struct ieee80211_node_table *nt,
+    const uint8_t macaddr[IEEE80211_ADDR_LEN],
+    const char *func __debrefcnt_used, int line __debrefcnt_used)
 {
        struct ieee80211_node *ni;
 
        IEEE80211_NODE_LOCK(nt);
-       ni = ieee80211_find_node_locked(nt, macaddr);
+       ni = _ieee80211_find_node_locked(nt, macaddr, func, line);
        IEEE80211_NODE_UNLOCK(nt);
        return ni;
 }
 
 struct ieee80211_node *
-#ifdef IEEE80211_DEBUG_REFCNT
-ieee80211_find_vap_node_locked_debug(struct ieee80211_node_table *nt,
-       const struct ieee80211vap *vap,
-       const uint8_t macaddr[IEEE80211_ADDR_LEN], const char *func, int line)
-#else
-ieee80211_find_vap_node_locked(struct ieee80211_node_table *nt,
-       const struct ieee80211vap *vap,
-       const uint8_t macaddr[IEEE80211_ADDR_LEN])
-#endif
+_ieee80211_find_vap_node_locked(struct ieee80211_node_table *nt,
+    const struct ieee80211vap *vap, const uint8_t macaddr[IEEE80211_ADDR_LEN],
+    const char *func __debrefcnt_used, int line __debrefcnt_used)
 {
        struct ieee80211_node *ni;
        int hash;
@@ -1668,20 +1660,14 @@ ieee80211_find_vap_node_locked(struct 
ieee80211_node_table *nt,
 }
 
 struct ieee80211_node *
-#ifdef IEEE80211_DEBUG_REFCNT
-ieee80211_find_vap_node_debug(struct ieee80211_node_table *nt,
-       const struct ieee80211vap *vap,
-       const uint8_t macaddr[IEEE80211_ADDR_LEN], const char *func, int line)
-#else
-ieee80211_find_vap_node(struct ieee80211_node_table *nt,
-       const struct ieee80211vap *vap,
-       const uint8_t macaddr[IEEE80211_ADDR_LEN])
-#endif
+_ieee80211_find_vap_node(struct ieee80211_node_table *nt,
+    const struct ieee80211vap *vap, const uint8_t macaddr[IEEE80211_ADDR_LEN],
+    const char *func __debrefcnt_used, int line __debrefcnt_used)
 {
        struct ieee80211_node *ni;
 
        IEEE80211_NODE_LOCK(nt);
-       ni = ieee80211_find_vap_node_locked(nt, vap, macaddr);
+       ni = _ieee80211_find_vap_node_locked(nt, vap, macaddr, func, line);
        IEEE80211_NODE_UNLOCK(nt);
        return ni;
 }
@@ -1933,11 +1919,12 @@ ieee80211_add_neighbor(struct ieee80211vap *vap,
 
 static __inline struct ieee80211_node *
 _find_rxnode(struct ieee80211_node_table *nt,
-    const struct ieee80211_frame_min *wh)
+    const struct ieee80211_frame_min *wh,
+    const char *func __debrefcnt_used, int line __debrefcnt_used)
 {
        if (IS_BCAST_PROBEREQ(wh))
                return NULL;            /* spam bcast probe req to all vap's */
-       return ieee80211_find_node_locked(nt, wh->i_addr2);
+       return _ieee80211_find_node_locked(nt, wh->i_addr2, func, line);
 }
 
 /*
@@ -1946,20 +1933,16 @@ _find_rxnode(struct ieee80211_node_table *nt,
  * we can return NULL if the sender is not in the table.
  */
 struct ieee80211_node *
-#ifdef IEEE80211_DEBUG_REFCNT
-ieee80211_find_rxnode_debug(struct ieee80211com *ic,
-       const struct ieee80211_frame_min *wh, const char *func, int line)
-#else
-ieee80211_find_rxnode(struct ieee80211com *ic,
-       const struct ieee80211_frame_min *wh)
-#endif
+_ieee80211_find_rxnode(struct ieee80211com *ic,
+    const struct ieee80211_frame_min *wh,
+    const char *func __debrefcnt_used, int line __debrefcnt_used)
 {
        struct ieee80211_node_table *nt;
        struct ieee80211_node *ni;
 
        nt = &ic->ic_sta;
        IEEE80211_NODE_LOCK(nt);
-       ni = _find_rxnode(nt, wh);
+       ni = _find_rxnode(nt, wh, func, line);
        IEEE80211_NODE_UNLOCK(nt);
 
        return ni;
@@ -1974,14 +1957,9 @@ ieee80211_find_rxnode(struct ieee80211com *ic,
  * key assigned to it.
  */
 struct ieee80211_node *
-#ifdef IEEE80211_DEBUG_REFCNT
-ieee80211_find_rxnode_withkey_debug(struct ieee80211com *ic,
-       const struct ieee80211_frame_min *wh, ieee80211_keyix keyix,
-       const char *func, int line)
-#else
-ieee80211_find_rxnode_withkey(struct ieee80211com *ic,
-       const struct ieee80211_frame_min *wh, ieee80211_keyix keyix)
-#endif
+_ieee80211_find_rxnode_withkey(struct ieee80211com *ic,
+    const struct ieee80211_frame_min *wh, ieee80211_keyix keyix,
+    const char *func __debrefcnt_used, int line __debrefcnt_used)
 {
        struct ieee80211_node_table *nt;
        struct ieee80211_node *ni;
@@ -1993,7 +1971,7 @@ ieee80211_find_rxnode_withkey(struct ieee80211com *ic,
        else
                ni = NULL;
        if (ni == NULL) {
-               ni = _find_rxnode(nt, wh);
+               ni = _find_rxnode(nt, wh, func, line);
                if (ni != NULL && nt->nt_keyixmap != NULL) {
                        /*
                         * If the station has a unicast key cache slot
@@ -2029,14 +2007,9 @@ ieee80211_find_rxnode_withkey(struct ieee80211com *ic,
  * a data frame.  This handles node discovery in adhoc networks.
  */
 struct ieee80211_node *
-#ifdef IEEE80211_DEBUG_REFCNT
-ieee80211_find_txnode_debug(struct ieee80211vap *vap,
-       const uint8_t macaddr[IEEE80211_ADDR_LEN],
-       const char *func, int line)
-#else
-ieee80211_find_txnode(struct ieee80211vap *vap,
-       const uint8_t macaddr[IEEE80211_ADDR_LEN])
-#endif
+_ieee80211_find_txnode(struct ieee80211vap *vap,
+    const uint8_t macaddr[IEEE80211_ADDR_LEN],
+    const char *func __debrefcnt_used, int line __debrefcnt_used)
 {
        struct ieee80211_node_table *nt = &vap->iv_ic->ic_sta;
        struct ieee80211_node *ni;
@@ -2054,7 +2027,7 @@ ieee80211_find_txnode(struct ieee80211vap *vap,
            IEEE80211_IS_MULTICAST(macaddr))
                ni = ieee80211_ref_node(vap->iv_bss);
        else
-               ni = ieee80211_find_node_locked(nt, macaddr);
+               ni = _ieee80211_find_node_locked(nt, macaddr, func, line);
        IEEE80211_NODE_UNLOCK(nt);
 
        if (ni == NULL) {
@@ -2083,7 +2056,7 @@ ieee80211_find_txnode(struct ieee80211vap *vap,
 }
 
 static void
-_ieee80211_free_node(struct ieee80211_node *ni)
+__ieee80211_free_node(struct ieee80211_node *ni)
 {
        struct ieee80211_node_table *nt = ni->ni_table;
 
@@ -2132,11 +2105,8 @@ node_clear_keyixmap(struct ieee80211_node_table *nt, 
struct ieee80211_node *ni)
 }
 
 void
-#ifdef IEEE80211_DEBUG_REFCNT
-ieee80211_free_node_debug(struct ieee80211_node *ni, const char *func, int 
line)
-#else
-ieee80211_free_node(struct ieee80211_node *ni)
-#endif
+_ieee80211_free_node(struct ieee80211_node *ni,
+    const char *func __debrefcnt_used, int line __debrefcnt_used)
 {
        struct ieee80211_node_table *nt = ni->ni_table;
 
@@ -2151,14 +2121,14 @@ ieee80211_free_node(struct ieee80211_node *ni)
                        /*
                         * Last reference, reclaim state.
                         */
-                       _ieee80211_free_node(ni);
+                       __ieee80211_free_node(ni);
                } else if (ieee80211_node_refcnt(ni) == 1)
                        if (node_clear_keyixmap(nt, ni))
-                               _ieee80211_free_node(ni);
+                               __ieee80211_free_node(ni);
                IEEE80211_NODE_UNLOCK(nt);
        } else {
                if (ieee80211_node_dectestref(ni))
-                       _ieee80211_free_node(ni);
+                       __ieee80211_free_node(ni);
        }
 }
 
@@ -2246,7 +2216,7 @@ node_reclaim(struct ieee80211_node_table *nt, struct 
ieee80211_node *ni)
                 */
                ieee80211_del_node_nt(nt, ni);
        } else
-               _ieee80211_free_node(ni);
+               __ieee80211_free_node(ni);
 }
 
 /*
diff --git a/sys/net80211/ieee80211_node.h b/sys/net80211/ieee80211_node.h
index 0e885440687c..2d237c3d597f 100644
--- a/sys/net80211/ieee80211_node.h
+++ b/sys/net80211/ieee80211_node.h
@@ -407,71 +407,54 @@ struct ieee80211_node *ieee80211_dup_bss(struct 
ieee80211vap *,
 struct ieee80211_node *ieee80211_node_create_wds(struct ieee80211vap *,
                const uint8_t bssid[IEEE80211_ADDR_LEN],
                struct ieee80211_channel *);
-#ifdef IEEE80211_DEBUG_REFCNT
-void   ieee80211_free_node_debug(struct ieee80211_node *,
+
+/* These functions are taking __func__, __LINE__ for IEEE80211_DEBUG_REFCNT */
+void   _ieee80211_free_node(struct ieee80211_node *,
                const char *func, int line);
-struct ieee80211_node *ieee80211_find_node_locked_debug(
+struct ieee80211_node *_ieee80211_find_node_locked(
                struct ieee80211_node_table *,
                const uint8_t macaddr[IEEE80211_ADDR_LEN],
                const char *func, int line);
-struct ieee80211_node *ieee80211_find_node_debug(struct ieee80211_node_table *,
+struct ieee80211_node *_ieee80211_find_node(struct ieee80211_node_table *,
                const uint8_t macaddr[IEEE80211_ADDR_LEN],
                const char *func, int line);
-struct ieee80211_node *ieee80211_find_vap_node_locked_debug(
+struct ieee80211_node *_ieee80211_find_vap_node_locked(
                struct ieee80211_node_table *,
                const struct ieee80211vap *vap,
                const uint8_t macaddr[IEEE80211_ADDR_LEN],
                const char *func, int line);
-struct ieee80211_node *ieee80211_find_vap_node_debug(
+struct ieee80211_node *_ieee80211_find_vap_node(
                struct ieee80211_node_table *,
                const struct ieee80211vap *vap,
                const uint8_t macaddr[IEEE80211_ADDR_LEN],
                const char *func, int line);
-struct ieee80211_node * ieee80211_find_rxnode_debug(struct ieee80211com *,
+struct ieee80211_node *_ieee80211_find_rxnode(struct ieee80211com *,
                const struct ieee80211_frame_min *,
                const char *func, int line);
-struct ieee80211_node * ieee80211_find_rxnode_withkey_debug(
+struct ieee80211_node *_ieee80211_find_rxnode_withkey(
                struct ieee80211com *,
                const struct ieee80211_frame_min *, uint16_t keyix,
                const char *func, int line);
-struct ieee80211_node *ieee80211_find_txnode_debug(struct ieee80211vap *,
+struct ieee80211_node *_ieee80211_find_txnode(struct ieee80211vap *,
                const uint8_t *,
                const char *func, int line);
 #define        ieee80211_free_node(ni) \
-       ieee80211_free_node_debug(ni, __func__, __LINE__)
+       _ieee80211_free_node(ni, __func__, __LINE__)
 #define        ieee80211_find_node_locked(nt, mac) \
-       ieee80211_find_node_locked_debug(nt, mac, __func__, __LINE__)
+       _ieee80211_find_node_locked(nt, mac, __func__, __LINE__)
 #define        ieee80211_find_node(nt, mac) \
-       ieee80211_find_node_debug(nt, mac, __func__, __LINE__)
+       _ieee80211_find_node(nt, mac, __func__, __LINE__)
 #define        ieee80211_find_vap_node_locked(nt, vap, mac) \
-       ieee80211_find_vap_node_locked_debug(nt, vap, mac, __func__, __LINE__)
+       _ieee80211_find_vap_node_locked(nt, vap, mac, __func__, __LINE__)
 #define        ieee80211_find_vap_node(nt, vap, mac) \
-       ieee80211_find_vap_node_debug(nt, vap, mac, __func__, __LINE__)
+       _ieee80211_find_vap_node(nt, vap, mac, __func__, __LINE__)
 #define        ieee80211_find_rxnode(ic, wh) \
-       ieee80211_find_rxnode_debug(ic, wh, __func__, __LINE__)
+       _ieee80211_find_rxnode(ic, wh, __func__, __LINE__)
 #define        ieee80211_find_rxnode_withkey(ic, wh, keyix) \
-       ieee80211_find_rxnode_withkey_debug(ic, wh, keyix, __func__, __LINE__)
+       _ieee80211_find_rxnode_withkey(ic, wh, keyix, __func__, __LINE__)
 #define        ieee80211_find_txnode(vap, mac) \
-       ieee80211_find_txnode_debug(vap, mac, __func__, __LINE__)
-#else
-void   ieee80211_free_node(struct ieee80211_node *);
-struct ieee80211_node *ieee80211_find_node_locked(struct ieee80211_node_table 
*,
-               const uint8_t macaddr[IEEE80211_ADDR_LEN]);
-struct ieee80211_node *ieee80211_find_node(struct ieee80211_node_table *,
-               const uint8_t macaddr[IEEE80211_ADDR_LEN]);
-struct ieee80211_node *ieee80211_find_vap_node_locked(
-               struct ieee80211_node_table *, const struct ieee80211vap *,
-               const uint8_t macaddr[IEEE80211_ADDR_LEN]);
-struct ieee80211_node *ieee80211_find_vap_node(
-               struct ieee80211_node_table *, const struct ieee80211vap *,
-               const uint8_t macaddr[IEEE80211_ADDR_LEN]);
-struct ieee80211_node * ieee80211_find_rxnode(struct ieee80211com *,
-               const struct ieee80211_frame_min *);
-struct ieee80211_node * ieee80211_find_rxnode_withkey(struct ieee80211com *,
-               const struct ieee80211_frame_min *, uint16_t keyix);
-struct ieee80211_node *ieee80211_find_txnode(struct ieee80211vap *,
-               const uint8_t macaddr[IEEE80211_ADDR_LEN]);
-#endif
+       _ieee80211_find_txnode(vap, mac, __func__, __LINE__)
+
 int    ieee80211_node_delucastkey(struct ieee80211_node *);
 void   ieee80211_node_timeout(void *arg);
 

Reply via email to