#1918: WDS ageout deadlock
----------------------------------+-----------------------------------------
Reporter: [EMAIL PROTECTED] | Type: defect
Status: new | Priority: minor
Component: madwifi: other | Version: v0.9.4
Keywords: | Patch_attached: 0
----------------------------------+-----------------------------------------
Here is another stack trace for a panic in 0.9.4. I don't understand this
yet. I think the nmi_watchdog fired. Again typed by hand, not cut and
paste:
{{{
ieee802_node_wds_ageout
tick_handle_oneshot_broadcast
ieee80211_node_wds_ageout
_do_softirq
}}}
Im guessing here, but i think it is unsafe usage of LIST_FOREACH()
{{{
ieee80211_node_wds_ageout(unsigned long data)
{
struct ieee80211_node_table *nt = (struct ieee80211_node_table
*)data;
int hash;
struct ieee80211_wds_addr *wds;
IEEE80211_NODE_LOCK_IRQ(nt);
for (hash = 0; hash < IEEE80211_NODE_HASHSIZE; hash++) {
LIST_FOREACH(wds, &nt->nt_wds_hash[hash], wds_hash) {
if (wds->wds_agingcount != WDS_AGING_STATIC) {
if (!wds->wds_agingcount) {
if
(ieee80211_node_dectestref(wds->wds_n
i)) {
_ieee80211_free_node(wds->wds_ni
);
LIST_REMOVE(wds,
wds_hash);
FREE(wds, M_80211_WDS);
}
} else
wds->wds_agingcount--;
}
}
}}}
Since the code can remove the head of the list, shouldn't it be using
LIST_FOREACH_SAFE() not LIST_FOREACH()?
--
Ticket URL: <http://madwifi.org/ticket/1918>
madwifi.org <http://madwifi.org/>
Multiband Atheros Driver for Wireless Fidelity
-------------------------------------------------------------------------
This SF.net email is sponsored by the 2008 JavaOne(SM) Conference
Don't miss this year's exciting event. There's still time to save $100.
Use priority code J8TL2D2.
http://ad.doubleclick.net/clk;198757673;13503038;p?http://java.sun.com/javaone
_______________________________________________
Madwifi-tickets mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/madwifi-tickets