Re: ath0_node_lock ath0_com_lock lor

2012-09-28 Thread Adrian Chadd
On 28 September 2012 07:03, PseudoCylon  wrote:

>> Hm, that's odd. Who wants to go digging to figure out which code paths
>> are causing this? :)

> A suggestion
>
> in setmlme_dropsta()
> http://fxr.watson.org/fxr/source/net80211/ieee80211_ioctl.c#L1331
>
> Just forget about node lock and call ieee80211_find_node() instead of
> ieee80211_find_node_locked(). (I believe this lor occurs only in AP
> mode.)

Right, it's in the wiki, but I don't know what the two code paths are
that have inverted locks.

So would someone please map out the two code paths and where the locks
are grabbed, so I/we can think about how this should be better fixed?

Thanks,




Adrian
___
freebsd-wireless@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-wireless
To unsubscribe, send any mail to "freebsd-wireless-unsubscr...@freebsd.org"


Re: ath0_node_lock ath0_com_lock lor

2012-09-28 Thread PseudoCylon
> --
>
> Message: 1
> Date: Thu, 27 Sep 2012 12:44:04 -0700
> From: Adrian Chadd 
> Subject: Re: ath0_node_lock ath0_com_lock lor
> To: Kim Culhan 
> Cc: freebsd-wireless@freebsd.org
> Message-ID:
> 
> Content-Type: text/plain; charset=ISO-8859-1
>
> Hm, that's odd. Who wants to go digging to figure out which code paths
> are causing this? :)
>

A suggestion

in setmlme_dropsta()
http://fxr.watson.org/fxr/source/net80211/ieee80211_ioctl.c#L1331

Just forget about node lock and call ieee80211_find_node() instead of
ieee80211_find_node_locked(). (I believe this lor occurs only in AP
mode.)


AK

PS
This lor is already documented in wifi debug wiki.

>
>
> On 26 September 2012 12:49, Kim Culhan  wrote:
>> Have not seen an lor in some time, this noted today fyi
>>
>> lock order reversal:
>>  1st 0xff80009267f0 ath0_node_lock (ath0_node_lock) @
>> /usr/src/sys/net80211/ieee80211_ioctl.c:1341
>>  2nd 0xff8000925018 ath0_com_lock (ath0_com_lock) @
>> /usr/src/sys/net80211/ieee80211_node.c:2619
>> KDB: stack backtrace:
>> db_trace_self_wrapper() at db_trace_self_wrapper+0x2b
>> kdb_backtrace() at kdb_backtrace+0x39
>> witness_checkorder() at witness_checkorder+0xc37
>> _mtx_lock_flags() at _mtx_lock_flags+0x83
>> ieee80211_node_leave() at ieee80211_node_leave+0x97
>> setmlme_common() at setmlme_common+0x3f7
>> ieee80211_ioctl_setmlme() at ieee80211_ioctl_setmlme+0x87
>> ieee80211_ioctl_set80211() at ieee80211_ioctl_set80211+0x5a5
>> in_control() at in_control+0x216
>> ifioctl() at ifioctl+0x1020
>> kern_ioctl() at kern_ioctl+0x1b0
>> sys_ioctl() at sys_ioctl+0x11f
>> amd64_syscall() at amd64_syscall+0x25a
>> Xfast_syscall() at Xfast_syscall+0xfb
>> --- syscall (54, FreeBSD ELF64, sys_ioctl), rip = 0x801203b8a, rsp =
>> 0x7fffd9b8, rbp = 0x7fffda20 ---
>>
>>
>> --
>> thanks
>> -kim
___
freebsd-wireless@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-wireless
To unsubscribe, send any mail to "freebsd-wireless-unsubscr...@freebsd.org"


Re: ath0_node_lock ath0_com_lock lor

2012-09-27 Thread Adrian Chadd
Hm, that's odd. Who wants to go digging to figure out which code paths
are causing this? :)

I'm knee deep in ANI at the moment. :)



Adrian


On 26 September 2012 12:49, Kim Culhan  wrote:
> Have not seen an lor in some time, this noted today fyi
>
> lock order reversal:
>  1st 0xff80009267f0 ath0_node_lock (ath0_node_lock) @
> /usr/src/sys/net80211/ieee80211_ioctl.c:1341
>  2nd 0xff8000925018 ath0_com_lock (ath0_com_lock) @
> /usr/src/sys/net80211/ieee80211_node.c:2619
> KDB: stack backtrace:
> db_trace_self_wrapper() at db_trace_self_wrapper+0x2b
> kdb_backtrace() at kdb_backtrace+0x39
> witness_checkorder() at witness_checkorder+0xc37
> _mtx_lock_flags() at _mtx_lock_flags+0x83
> ieee80211_node_leave() at ieee80211_node_leave+0x97
> setmlme_common() at setmlme_common+0x3f7
> ieee80211_ioctl_setmlme() at ieee80211_ioctl_setmlme+0x87
> ieee80211_ioctl_set80211() at ieee80211_ioctl_set80211+0x5a5
> in_control() at in_control+0x216
> ifioctl() at ifioctl+0x1020
> kern_ioctl() at kern_ioctl+0x1b0
> sys_ioctl() at sys_ioctl+0x11f
> amd64_syscall() at amd64_syscall+0x25a
> Xfast_syscall() at Xfast_syscall+0xfb
> --- syscall (54, FreeBSD ELF64, sys_ioctl), rip = 0x801203b8a, rsp =
> 0x7fffd9b8, rbp = 0x7fffda20 ---
>
>
> --
> thanks
> -kim
___
freebsd-wireless@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/freebsd-wireless
To unsubscribe, send any mail to "freebsd-wireless-unsubscr...@freebsd.org"