From owner-p4-projects@FreeBSD.ORG Mon Nov 1 22:54:47 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id E56AE16A4D0; Mon, 1 Nov 2004 22:54:46 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 9608B16A4CE for ; Mon, 1 Nov 2004 22:54:46 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 7845843D39 for ; Mon, 1 Nov 2004 22:54:46 +0000 (GMT) (envelope-from sam@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.11/8.12.11) with ESMTP id iA1Mskhq066239 for ; Mon, 1 Nov 2004 22:54:46 GMT (envelope-from sam@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.11/8.12.11/Submit) id iA1MskAE066236 for perforce@freebsd.org; Mon, 1 Nov 2004 22:54:46 GMT (envelope-from sam@freebsd.org) Date: Mon, 1 Nov 2004 22:54:46 GMT Message-Id: <200411012254.iA1MskAE066236@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to sam@freebsd.org using -f From: Sam Leffler To: Perforce Change Reviews Subject: PERFORCE change 64071 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 01 Nov 2004 22:54:47 -0000 http://perforce.freebsd.org/chv.cgi?CH=64071 Change 64071 by sam@sam_ebb on 2004/11/01 22:54:04 save refcnt debugging stuff; may not want to keep this longterm Affected files ... .. //depot/projects/wifi/sys/net80211/ieee80211_node.c#7 edit .. //depot/projects/wifi/sys/net80211/ieee80211_node.h#6 edit .. //depot/projects/wifi/sys/net80211/ieee80211_output.c#6 edit .. //depot/projects/wifi/sys/net80211/ieee80211_var.h#5 edit Differences ... ==== //depot/projects/wifi/sys/net80211/ieee80211_node.c#7 (text+ko) ==== @@ -716,7 +716,12 @@ } static struct ieee80211_node * +#ifdef IEEE80211_DEBUG_REFCNT +_ieee80211_find_node_debug(struct ieee80211com *ic, u_int8_t *macaddr, + const char *func, int line) +#else _ieee80211_find_node(struct ieee80211com *ic, u_int8_t *macaddr) +#endif { struct ieee80211_node *ni; int hash; @@ -727,14 +732,31 @@ LIST_FOREACH(ni, &ic->ic_hash[hash], ni_hash) { if (IEEE80211_ADDR_EQ(ni->ni_macaddr, macaddr)) { ieee80211_ref_node(ni); /* mark referenced */ + IEEE80211_DPRINTF(ic, IEEE80211_MSG_NODE, +#ifdef IEEE80211_DEBUG_REFCNT + "%s (%s:%u) %s refcnt %d\n", __func__, func, line, +#else + "%s %s refcnt %d\n", __func__, +#endif + ether_sprintf(ni->ni_macaddr), + ieee80211_node_refcnt(ni)); return ni; } } return NULL; } +#ifdef IEEE80211_DEBUG_REFCNT +#define _ieee80211_find_node(ic, mac) \ + _ieee80211_find_node_debug(ic, mac, func, line) +#endif struct ieee80211_node * +#ifdef IEEE80211_DEBUG_REFCNT +ieee80211_find_node_debug(struct ieee80211com *ic, u_int8_t *macaddr, + const char *func, int line) +#else ieee80211_find_node(struct ieee80211com *ic, u_int8_t *macaddr) +#endif { struct ieee80211_node *ni; @@ -749,7 +771,12 @@ * a data frame. This handles node discovery in adhoc networks. */ struct ieee80211_node * +#ifdef IEEE80211_DEBUG_REFCNT +ieee80211_find_txnode_debug(struct ieee80211com *ic, u_int8_t *macaddr, + const char *func, int line) +#else ieee80211_find_txnode(struct ieee80211com *ic, u_int8_t *macaddr) +#endif { struct ieee80211_node *ni; @@ -794,8 +821,14 @@ * Like find but search based on the channel too. */ struct ieee80211_node * -ieee80211_find_node_with_channel(struct ieee80211com *ic, u_int8_t *macaddr, - struct ieee80211_channel *chan) +#ifdef IEEE80211_DEBUG_REFCNT +ieee80211_find_node_with_channel_debug(struct ieee80211com *ic, + u_int8_t *macaddr, struct ieee80211_channel *chan, + const char *func, int line) +#else +ieee80211_find_node_with_channel(struct ieee80211com *ic, + u_int8_t *macaddr, struct ieee80211_channel *chan) +#endif { struct ieee80211_node *ni; int hash; @@ -806,6 +839,14 @@ if (IEEE80211_ADDR_EQ(ni->ni_macaddr, macaddr) && ni->ni_chan == chan) { ieee80211_ref_node(ni); /* mark referenced */ + IEEE80211_DPRINTF(ic, IEEE80211_MSG_NODE, +#ifdef IEEE80211_DEBUG_REFCNT + "%s (%s:%u) %s refcnt %d\n", __func__, func, line, +#else + "%s %s refcnt %d\n", __func__, +#endif + ether_sprintf(ni->ni_macaddr), + ieee80211_node_refcnt(ni)); break; } } @@ -817,8 +858,13 @@ * Like find but search based on the ssid too. */ struct ieee80211_node * +#ifdef IEEE80211_DEBUG_REFCNT +ieee80211_find_node_with_ssid_debug(struct ieee80211com *ic, u_int8_t *macaddr, + u_int ssidlen, const u_int8_t *ssid, const char *func, int line) +#else ieee80211_find_node_with_ssid(struct ieee80211com *ic, u_int8_t *macaddr, u_int ssidlen, const u_int8_t *ssid) +#endif { struct ieee80211_node *ni; int hash; @@ -830,6 +876,14 @@ ni->ni_esslen == ic->ic_des_esslen && memcmp(ni->ni_essid, ic->ic_des_essid, ni->ni_esslen) == 0) { ieee80211_ref_node(ni); /* mark referenced */ + IEEE80211_DPRINTF(ic, IEEE80211_MSG_NODE, +#ifdef IEEE80211_DEBUG_REFCNT + "%s (%s:%u) %s refcnt %d\n", __func__, func, line, +#else + "%s %s refcnt %d\n", __func__, +#endif + ether_sprintf(ni->ni_macaddr), + ieee80211_node_refcnt(ni)); break; } } @@ -863,13 +917,22 @@ } void +#ifdef IEEE80211_DEBUG_REFCNT +ieee80211_free_node_debug(struct ieee80211com *ic, struct ieee80211_node *ni, + const char *func, int line) +#else ieee80211_free_node(struct ieee80211com *ic, struct ieee80211_node *ni) +#endif { KASSERT(ni != ic->ic_bss, ("freeing ic_bss")); IEEE80211_DPRINTF(ic, IEEE80211_MSG_NODE, +#ifdef IEEE80211_DEBUG_REFCNT + "%s (%s:%u) %s refcnt %d\n", __func__, func, line, +#else "%s %s refcnt %d\n", __func__, - ether_sprintf(ni->ni_macaddr), ieee80211_node_refcnt(ni)); +#endif + ether_sprintf(ni->ni_macaddr), ieee80211_node_refcnt(ni)-1); if (ieee80211_node_dectestref(ni)) { IEEE80211_NODE_LOCK(ic); _ieee80211_free_node(ic, ni); @@ -1185,6 +1248,10 @@ ieee80211_node_leave(struct ieee80211com *ic, struct ieee80211_node *ni) { + IEEE80211_DPRINTF(ic, IEEE80211_MSG_ASSOC | IEEE80211_MSG_DEBUG, + "station %s with aid %d leaves\n", + ether_sprintf(ni->ni_macaddr), IEEE80211_NODE_AID(ni)); + KASSERT(ic->ic_opmode == IEEE80211_M_HOSTAP, ("not in ap mode, mode %u", ic->ic_opmode)); /* ==== //depot/projects/wifi/sys/net80211/ieee80211_node.h#6 (text+ko) ==== @@ -208,6 +208,30 @@ u_int8_t *); extern struct ieee80211_node *ieee80211_dup_bss(struct ieee80211com *, u_int8_t *); +#ifdef IEEE80211_DEBUG_REFCNT +extern void ieee80211_free_node_debug(struct ieee80211com *, + struct ieee80211_node *, const char *func, int line); +extern struct ieee80211_node *ieee80211_find_node_debug(struct ieee80211com *, + u_int8_t *, const char *func, int line); +extern struct ieee80211_node *ieee80211_find_txnode_debug( + struct ieee80211com *, u_int8_t *, const char *func, int line); +extern struct ieee80211_node *ieee80211_find_node_with_channel_debug( + struct ieee80211com *, u_int8_t *macaddr, + struct ieee80211_channel *, const char *func, int line); +extern struct ieee80211_node *ieee80211_find_node_with_ssid_debug( + struct ieee80211com *, u_int8_t *macaddr, u_int ssidlen, + const u_int8_t *ssid, const char *func, int line); +#define ieee80211_free_node(ic, ni) \ + ieee80211_free_node_debug(ic, ni, __func__, __LINE__) +#define ieee80211_find_node(ic, mac) \ + ieee80211_find_node_debug(ic, mac, __func__, __LINE__) +#define ieee80211_find_txnode(ic, mac) \ + ieee80211_find_txnode_debug(ic, mac, __func__, __LINE__) +#define ieee80211_find_node_with_channel(ic, mac, c) \ + ieee80211_find_node_with_channel_debug(ic, mac, c, __func__, __LINE__) +#define ieee80211_find_node_with_ssid(ic, mac, sl, ss) \ + ieee80211_find_node_with_ssid_debug(ic, mac, sl, ss, __func__, __LINE__) +#else extern struct ieee80211_node *ieee80211_find_node(struct ieee80211com *, u_int8_t *); extern struct ieee80211_node *ieee80211_find_txnode(struct ieee80211com *, @@ -220,6 +244,8 @@ const u_int8_t *ssid); extern void ieee80211_free_node(struct ieee80211com *, struct ieee80211_node *); +#endif + extern void ieee80211_free_allnodes(struct ieee80211com *); typedef void ieee80211_iter_func(void *, struct ieee80211_node *); ==== //depot/projects/wifi/sys/net80211/ieee80211_output.c#6 (text+ko) ==== @@ -776,8 +776,14 @@ * the xmit is complete all the way in the driver. On error we * will remove our reference. */ - if (ni != ic->ic_bss) + if (ni != ic->ic_bss) { + IEEE80211_DPRINTF(ic, IEEE80211_MSG_NODE, + "ieee80211_ref_node (%s:%u) %s refcnt %d\n", + __func__, __LINE__, + ether_sprintf(ni->ni_macaddr), + ieee80211_node_refcnt(ni)+1); ieee80211_ref_node(ni); + } timer = 0; switch (type) { case IEEE80211_FC0_SUBTYPE_PROBE_REQ: ==== //depot/projects/wifi/sys/net80211/ieee80211_var.h#5 (text+ko) ==== @@ -38,6 +38,7 @@ * Definitions for IEEE 802.11 drivers. */ #define IEEE80211_DEBUG +#undef IEEE80211_DEBUG_REFCNT /* node refcnt stuff */ /* NB: portability glue must go first */ #ifdef __NetBSD__