git: 4a8e4d15465c - main - net80211: fix IEEE80211_DEBUG_REFCNT builds
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Tue, 29 Nov 2022 21:21:02 UTC
The branch main has been updated by bz:
URL: https://cgit.FreeBSD.org/src/commit/?id=4a8e4d15465cbf6f1bc4c6a09f50f97ae2d5bd7d
commit 4a8e4d15465cbf6f1bc4c6a09f50f97ae2d5bd7d
Author: Bjoern A. Zeeb <bz@FreeBSD.org>
AuthorDate: 2022-11-29 18:21:05 +0000
Commit: Bjoern A. Zeeb <bz@FreeBSD.org>
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);