LOR - COM LOCK

Edgar Martinez emartinez at kbcnetworks.com
Fri Oct 7 21:02:19 UTC 2011


Jan  1 00:00:36 wlanmon: (RTM_IEEE80211_ASSOC) [wlan3] [00:80:81:8d:9d:83]
ath1: stuck beacon; resetting (bmiss count 4) 
Jan  1 00:01:32 wlanmon: (RTM_IEEE80211_JOIN) [wlan1] [00:c0:c1:cb:6c:c2] 
Expensive timeout(9) function: 0xc05aa150(0xc58c3b80) 0.013488188 s 
Jan  1 00:16:45 wlanmon: (RTM_IEEE80211_ASSOC) [wlan2] [00:c0:c1:cb:6c:c3] 
lock order reversal:
 1st 0xc59126c0 ath1_node_lock (ath1_node_lock) @ /usr/src/sys/net80211/ieee80211_ioctl.c:1326
 2nd 0xc5911014 ath1_com_lock (ath1_com_lock) @ /usr/src/sys/net80211/ieee80211_node.c:2510
KDB: stack backtrace:
X_db_sym_numargs(c079c78c) at 0xc047bb55 = X_db_sym_numargs+0x135
kdb_backtrace(c0966138,c5810320,cead294c,c05b3942,0,...) at 0xc059f6b8 = kdb_backtrace+0x28
witness_display_spinlock(0,0,c0966138,c096613c,c0800798,...) at 0xc05b2a8e = witness_display_spinlock+0x6e
witness_checkorder(c5911014,9,c07b7246,9ce,0,...) at 0xc05b3942 = witness_checkorder+0x6f2
_mtx_lock_flags(c5911014,0,c07b7246,9ce,c5911014,...) at 0xc0567c82 = _mtx_lock_flags+0x82
ieee80211_node_leave(c61e4000) at 0xc065712b = ieee80211_node_leave+0x8b
ieee80211_parse_beacon(cead29d0,c61e4000,cead29fa,c59126ac,c5a6b000,...) at 0xc064db3b = ieee80211_parse_beacon+0x22cb
ieee80211_parse_beacon(2) at 0xc064e6de = ieee80211_parse_beacon+0x2e6e
ieee80211_parse_beacon(c5a40a14,0,c5a6b000,c070cc66,cead2a54,...) at 0xc064efed = ieee80211_parse_beacon+0x377d
ieee80211_parse_beacon(c5911000,c07acd14,c078e45a,c60b01a0,c5abe320,...) at 0xc064f7a3 = ieee80211_parse_beacon+0x3f33
ieee80211_ioctl(c594dc00,801c69ea,c5abe320) at 0xc0651263 = ieee80211_ioctl+0x273
in_control(c60b01a0,801c69ea,c5abe320,c594dc00,c5a0d2e0,...) at 0xc0673755 = in_control+0x1b5
ifioctl(c60b01a0,801c69ea,c5abe320,c5a0d2e0) at 0xc0616824 = ifioctl+0x14a4
soo_ioctl(c5a326c8,801c69ea,c5abe320,c5846800,c5a0d2e0) at 0xc05baa73 = soo_ioctl+0x343
kern_ioctl(c5a0d2e0,8,801c69ea,c5abe320) at 0xc05b5bce = kern_ioctl+0x1ae
sys_ioctl(c5a0d2e0,cead2cec,282,0,0,...) at 0xc05b5d15 = sys_ioctl+0x105
syscall(cead2d28) at 0xc073fffb = syscall+0x21b
Xint0x80_syscall() at 0xc072e311 = Xint0x80_syscall+0x21
--- syscall (54, FreeBSD ELF32, sys_ioctl), eip = 0x28226c57, esp = 0xbfbfeb6c, ebp = 0xbfbfebb8 --- Jan  1 00:20:17 wlanmon: (RTM_IEEE80211_LEAVE) [wlan1] [00:c0:c1:cb:6c:c2] stray irq7
ath1: stuck beacon; resetting (bmiss count 4)
ath1: stuck beacon; resetting (bmiss count 4)
ath1: stuck beacon; resetting (bmiss count 4)
ath1: stuck beacon; resetting (bmiss count 4) stray irq7
ath1: stuck beacon; resetting (bmiss count 148)
ath1: stuck beacon; resetting (bmiss count 4)
ath1: stuck beacon; resetting (bmiss count 4)
ath1: stuck beacon; resetting (bmiss count 4)
ath1: stuck beacon; resetting (bmiss count 242) stray irq7
ath1: stuck beacon; resetting (bmiss count 4)
ath1: stuck beacon; resetting (bmiss count 4)

0xc065712b is in ieee80211_node_leave (/usr/src/sys/net80211/ieee80211_node.c:2511).
2506             */
2507            if (vap->iv_auth->ia_node_leave != NULL)
2508                    vap->iv_auth->ia_node_leave(ni);
2509
2510            IEEE80211_LOCK(ic);
2511            IEEE80211_AID_CLR(vap, ni->ni_associd);
2512            ni->ni_associd = 0;
2513            vap->iv_sta_assoc--;
2514            ic->ic_sta_assoc--;
2515

0xc064db3b is in domlme (/usr/src/sys/net80211/ieee80211_ioctl.c:1312).
1307                        mop->reason);
1308            } else {
1309                    IEEE80211_SEND_MGMT(ni, IEEE80211_FC0_SUBTYPE_DISASSOC,
1310                        mop->reason);
1311            }
1312            ieee80211_node_leave(ni);
1313    }
1314
1315    static int
1316    setmlme_dropsta(struct ieee80211vap *vap,

0xc064e6de is in setmlme_common (/usr/src/sys/net80211/ieee80211_ioctl.c:1330).
1325            if (!IEEE80211_ADDR_EQ(mac, ic->ic_ifp->if_broadcastaddr)) {
1326                    IEEE80211_NODE_LOCK(nt);
1327                    ni = ieee80211_find_node_locked(nt, mac);
1328                    if (ni != NULL) {
1329                            domlme(mlmeop, ni);
1330                            ieee80211_free_node(ni);
1331                    } else
1332                            error = ENOENT;
1333                    IEEE80211_NODE_UNLOCK(nt);
1334            } else {

0xc064efed is in ieee80211_ioctl_setmlme (/usr/src/sys/net80211/ieee80211_ioctl.c:1550).
1545                        vap->iv_des_ssid[0].len, vap->iv_des_ssid[0].ssid);
1546            else if (mlme.im_op == IEEE80211_MLME_ASSOC)
1547                    return setmlme_assoc_adhoc(vap, mlme.im_macaddr,
1548                        mlme.im_ssid_len, mlme.im_ssid);
1549            else
1550                    return setmlme_common(vap, mlme.im_op,
1551                        mlme.im_macaddr, mlme.im_reason);
1552    }
1553
1554    static __noinline int

0xc064f7a3 is in ieee80211_ioctl_set80211 (/usr/src/sys/net80211/ieee80211_ioctl.c:2769).
2764                    break;
2765            case IEEE80211_IOC_DELKEY:
2766                    error = ieee80211_ioctl_delkey(vap, ireq);
2767                    break;
2768            case IEEE80211_IOC_MLME:
2769                    error = ieee80211_ioctl_setmlme(vap, ireq);
2770                    break;
2771            case IEEE80211_IOC_COUNTERMEASURES:
2772                    if (ireq->i_val) {
2773                            if ((vap->iv_flags & IEEE80211_F_WPA) == 0)

0xc0651263 is in ieee80211_ioctl (/usr/src/sys/net80211/ieee80211_ioctl.c:3322).
3317                                    (struct ieee80211req *) data);
3318                    break;
3319            case SIOCS80211:
3320                    error = priv_check(curthread, PRIV_NET80211_MANAGE);
3321                    if (error == 0)
3322                            error = ieee80211_ioctl_set80211(vap, cmd,
3323                                            (struct ieee80211req *) data);
3324                    break;
3325            case SIOCG80211STATS:
3326                    ifr = (struct ifreq *)data;

0xc0673755 is in in_control (/usr/src/sys/netinet/in.c:293).
288                     return in_lifaddr_ioctl(so, cmd, data, ifp, td);
289
290             default:
291                     if (ifp == NULL || ifp->if_ioctl == NULL)
292                             return (EOPNOTSUPP);
293                     return ((*ifp->if_ioctl)(ifp, cmd, data));
294             }
295
296             if (ifp == NULL)
297                     return (EADDRNOTAVAIL);

0xc0616824 is in ifioctl (/usr/src/sys/net/if.c:2550).
2545                    if_rele(ifp);
2546                    CURVNET_RESTORE();
2547                    return (EOPNOTSUPP);
2548            }
2549    #ifndef COMPAT_43
2550            error = ((*so->so_proto->pr_usrreqs->pru_control)(so, cmd,
2551                                                                     data,
2552                                                                     ifp, td));
2553            if (error == EOPNOTSUPP && ifp != NULL && ifp->if_ioctl != NULL)
2554                    error = (*ifp->if_ioctl)(ifp, cmd, data);

0xc05baa73 is in soo_ioctl (/usr/src/sys/kern/sys_socket.c:211).
206                      * Interface/routing/protocol specific ioctls: interface and
207                      * routing ioctls should have a different entry since a
208                      * socket is unnecessary.
209                      */
210                     if (IOCGROUP(cmd) == 'i')
211                             error = ifioctl(so, cmd, data, td);
212                     else if (IOCGROUP(cmd) == 'r') {
213                             CURVNET_SET(so->so_vnet);
214                             error = rtioctl_fib(cmd, data, so->so_fibnum);
215                             CURVNET_RESTORE();

0xc05b5bce is in kern_ioctl (file.h:278).
273     static __inline int
274     fo_ioctl(struct file *fp, u_long com, void *data, struct ucred *active_cred,
275         struct thread *td)
276     {
277
278             return ((*fp->f_ops->fo_ioctl)(fp, com, data, active_cred, td));
279     }
280
281     static __inline int
282     fo_poll(struct file *fp, int events, struct ucred *active_cred,

0xc05b5d15 is in sys_ioctl (/usr/src/sys/kern/sys_generic.c:681).
676                      * gets back something deterministic.
677                      */
678                     bzero(data, size);
679             }
680
681             error = kern_ioctl(td, uap->fd, com, data);
682
683             if (error == 0 && (com & IOC_OUT))
684                     error = copyout(data, uap->data, (u_int)size);
685


More information about the freebsd-wireless mailing list