[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_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_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

Author: Johannes Hofmann
Status: New
Priority: Normal
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
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