[DragonFlyBSD - Bug #2458] ath: ran out of descriptors
Johannes Hofmann via Redmine
bugtracker-admin at leaf.dragonflybsd.org
Thu Nov 22 12:55:09 PST 2012
Issue #2458 has been updated by Johannes Hofmann.
With some wlan_assert_serialized() added I found that ath_start is called without serializer held via ieee80211_handoff->ifq_dispatch->ath_start.
With following changes I didn't see the problem so far:
diff --git a/sys/dev/netif/ath/ath/if_ath.c b/sys/dev/netif/ath/ath/if_ath.c
index 2f22372..9b1ca66 100644
--- a/sys/dev/netif/ath/ath/if_ath.c
+++ b/sys/dev/netif/ath/ath/if_ath.c
@@ -452,9 +452,7 @@ ath_attach(u_int16_t devid, struct ath_softc *sc)
* Allocate tx+rx descriptors and populate the lists.
*/
wlan_assert_serialized();
- wlan_serialize_exit();
error = ath_desc_alloc(sc);
- wlan_serialize_enter();
if (error != 0) {
if_printf(ifp, "failed to allocate descriptors: %d\n", error);
goto bad;
diff --git a/sys/netproto/802_11/wlan/ieee80211_dragonfly.c b/sys/netproto/802_11/wlan/ieee80211_dragonfly.c
index 098598e..302a189 100644
--- a/sys/netproto/802_11/wlan/ieee80211_dragonfly.c
+++ b/sys/netproto/802_11/wlan/ieee80211_dragonfly.c
@@ -812,7 +812,6 @@ ieee80211_handoff(struct ifnet *dst_ifp, struct mbuf *m)
/* We may be sending a fragment so traverse the mbuf */
wlan_assert_serialized();
- wlan_serialize_exit();
for (; m; m = m0) {
struct altq_pktattr pktattr;
@@ -824,7 +823,6 @@ ieee80211_handoff(struct ifnet *dst_ifp, struct mbuf *m)
ifq_dispatch(dst_ifp, m, &pktattr);
}
- wlan_serialize_enter();
return (0);
}
I don't know whether this might create issues with other drivers and I'm not yet 100% certain
that it really fixes the problem in my case.
----------------------------------------
Bug #2458: ath: ran out of descriptors
http://bugs.dragonflybsd.org/issues/2458
Author: Johannes Hofmann
Status: New
Priority: Normal
Assignee:
Category:
Target version:
After running for a while in a WPA secured WLAN with an ath(4) card, I get:
ath: ran out of descriptors
and the network stops working.
Sometimes destroying wlan0 and kldunload if_ath; kldload if_ath
restores network, but in some cases I get
Nov 18 12:45:06 plop kernel: Trace beginning at frame 0xd6264ca8
Nov 18 12:45:06 plop kernel: m_free(ffffffff,d47f1c00,0,d936dc00,d5a94400) at m_free+0xc6 0x
c01f26ed
Nov 18 12:45:06 plop kernel: m_free(d47f7800,d6264cfc,c09c8846,d47f7800,c47576f0) at m_free+
0xc6 0xc01f26ed
Nov 18 12:45:06 plop kernel: m_freem(d47f7800,c47576f0,d6264cfc,c09e8e58,d5cf9f80) at m_free
m+0x15 0xc01f29c6
Nov 18 12:45:06 plop kernel: ieee80211_flush_ifq(d5a94400,d4c46500,ffffffff,d5e35478,c47576f
0) at ieee80211_flush_ifq+0x70 0xc09c8846
Nov 18 12:45:06 plop kernel: ieee80211_newstate_task(d4c46500,1,c47576f4,1,c475770c) at ieee
80211_newstate_task+0x231 0xc09e74e3
Nov 18 12:45:06 plop kernel: taskqueue_run(c47576f0,c475770c,0,c03d27b3,0) at taskqueue_run+
0x93 0xc01dd304
Nov 18 12:45:06 plop kernel: taskqueue_thread_loop(d5e3544c,0,0,0,0) at taskqueue_thread_loo
p+0x4b 0xc01dd5ed
Nov 18 12:45:06 plop kernel: lwkt_exit() at lwkt_exit 0xc01bbab3
and the system freezes on kldunload if_ath
--
You have received this notification because you have either subscribed to it, or are involved in it.
To change your notification preferences, please click here: http://bugs.dragonflybsd.org/my/account
More information about the Bugs
mailing list