<feed xmlns='http://www.w3.org/2005/Atom'>
<title>linux.git/net/mac80211, branch v2.6.31</title>
<subtitle>Linux kernel source tree</subtitle>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/'/>
<entry>
<title>mac80211: fix todo lock</title>
<updated>2009-08-17T17:38:34+00:00</updated>
<author>
<name>Johannes Berg</name>
<email>johannes@sipsolutions.net</email>
</author>
<published>2009-07-01T19:26:43+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=523d2f6982136d332c9b7dd00e9e16da1091f060'/>
<id>523d2f6982136d332c9b7dd00e9e16da1091f060</id>
<content type='text'>
The key todo lock can be taken from different locks
that require it to be _bh to avoid lock inversion
due to (soft)irqs.

This should fix the two problems reported by Bob and
Gabor:
http://mid.gmane.org/20090619113049.GB18956@hash.localnet
http://mid.gmane.org/4A3FA376.8020307@openwrt.org

Signed-off-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Cc: Bob Copeland &lt;me@bobcopeland.com&gt;
Cc: Gabor Juhos &lt;juhosg@openwrt.org&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The key todo lock can be taken from different locks
that require it to be _bh to avoid lock inversion
due to (soft)irqs.

This should fix the two problems reported by Bob and
Gabor:
http://mid.gmane.org/20090619113049.GB18956@hash.localnet
http://mid.gmane.org/4A3FA376.8020307@openwrt.org

Signed-off-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Cc: Bob Copeland &lt;me@bobcopeland.com&gt;
Cc: Gabor Juhos &lt;juhosg@openwrt.org&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: fix panic when splicing unprepared TIDs</title>
<updated>2009-08-13T18:47:42+00:00</updated>
<author>
<name>Luis R. Rodriguez</name>
<email>lrodriguez@atheros.com</email>
</author>
<published>2009-08-11T20:10:33+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=416fbdff2137e8d8cc8f23f517bee3a26b11526f'/>
<id>416fbdff2137e8d8cc8f23f517bee3a26b11526f</id>
<content type='text'>
We splice skbs from the pending queue for a TID
onto the local pending queue when tearing down a
block ack request. This is not necessary unless we
actually have received a request to start a block ack
request (rate control, for example). If we never received
that request we should not be splicing the tid pending
queue as it would be null, causing a panic.

Not sure yet how exactly we allowed through a call when the
tid state does not have at least HT_ADDBA_REQUESTED_MSK set,
that will require some further review as it is not quite
obvious.

For more information see the bug report:

http://bugzilla.kernel.org/show_bug.cgi?id=13922

This fixes this oops:

BUG: unable to handle kernel NULL pointer dereference at 00000030
IP: [&lt;f8806c70&gt;] ieee80211_agg_splice_packets+0x40/0xc0 [mac80211]
*pdpt = 0000000002d1e001 *pde = 0000000000000000
Thread overran stack, or stack corrupted
Oops: 0000 [#1] SMP
last sysfs file: /sys/module/aes_generic/initstate
Modules linked in: &lt;bleh&gt;

Pid: 0, comm: swapper Not tainted (2.6.31-rc5-wl #2) Dell DV051
EIP: 0060:[&lt;f8806c70&gt;] EFLAGS: 00010292 CPU: 0
EIP is at ieee80211_agg_splice_packets+0x40/0xc0 [mac80211]
EAX: 00000030 EBX: 0000004c ECX: 00000003 EDX: 00000000
ESI: c1c98000 EDI: f745a1c0 EBP: c076be58 ESP: c076be38
 DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
Process swapper (pid: 0, ti=c076a000 task=c0709160 task.ti=c076a000)
Stack: &lt;bleh2&gt;
Call Trace:
 [&lt;f8806edb&gt;] ? ieee80211_stop_tx_ba_cb+0xab/0x150 [mac80211]
 [&lt;f8802f1e&gt;] ? ieee80211_tasklet_handler+0xce/0x110 [mac80211]
 [&lt;c04862ff&gt;] ? net_rx_action+0xef/0x1d0
 [&lt;c0149378&gt;] ? tasklet_action+0x58/0xc0
 [&lt;c014a0f2&gt;] ? __do_softirq+0xc2/0x190
 [&lt;c018eb48&gt;] ? handle_IRQ_event+0x58/0x140
 [&lt;c01205fe&gt;] ? ack_apic_level+0x7e/0x270
 [&lt;c014a1fd&gt;] ? do_softirq+0x3d/0x40
 [&lt;c014a345&gt;] ? irq_exit+0x65/0x90
 [&lt;c010a6af&gt;] ? do_IRQ+0x4f/0xc0
 [&lt;c014a35d&gt;] ? irq_exit+0x7d/0x90
 [&lt;c011d547&gt;] ? smp_apic_timer_interrupt+0x57/0x90
 [&lt;c01094a9&gt;] ? common_interrupt+0x29/0x30
 [&lt;c010fd9e&gt;] ? mwait_idle+0xbe/0x100
 [&lt;c0107e42&gt;] ? cpu_idle+0x52/0x90
 [&lt;c054b1a5&gt;] ? rest_init+0x55/0x60
 [&lt;c077492d&gt;] ? start_kernel+0x315/0x37d
 [&lt;c07743ce&gt;] ? unknown_bootoption+0x0/0x1f9
 [&lt;c0774099&gt;] ? i386_start_kernel+0x79/0x81
Code: &lt;bleh3&gt;
EIP: [&lt;f8806c70&gt;] ieee80211_agg_splice_packets+0x40/0xc0 [mac80211] SS:ESP 0068:c076be38
CR2: 0000000000000030

Cc: stable@kernel.org
Testedy-by: Jack Lau &lt;jackelectronics@hotmail.com&gt;
Signed-off-by: Luis R. Rodriguez &lt;lrodriguez@atheros.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We splice skbs from the pending queue for a TID
onto the local pending queue when tearing down a
block ack request. This is not necessary unless we
actually have received a request to start a block ack
request (rate control, for example). If we never received
that request we should not be splicing the tid pending
queue as it would be null, causing a panic.

Not sure yet how exactly we allowed through a call when the
tid state does not have at least HT_ADDBA_REQUESTED_MSK set,
that will require some further review as it is not quite
obvious.

For more information see the bug report:

http://bugzilla.kernel.org/show_bug.cgi?id=13922

This fixes this oops:

BUG: unable to handle kernel NULL pointer dereference at 00000030
IP: [&lt;f8806c70&gt;] ieee80211_agg_splice_packets+0x40/0xc0 [mac80211]
*pdpt = 0000000002d1e001 *pde = 0000000000000000
Thread overran stack, or stack corrupted
Oops: 0000 [#1] SMP
last sysfs file: /sys/module/aes_generic/initstate
Modules linked in: &lt;bleh&gt;

Pid: 0, comm: swapper Not tainted (2.6.31-rc5-wl #2) Dell DV051
EIP: 0060:[&lt;f8806c70&gt;] EFLAGS: 00010292 CPU: 0
EIP is at ieee80211_agg_splice_packets+0x40/0xc0 [mac80211]
EAX: 00000030 EBX: 0000004c ECX: 00000003 EDX: 00000000
ESI: c1c98000 EDI: f745a1c0 EBP: c076be58 ESP: c076be38
 DS: 007b ES: 007b FS: 00d8 GS: 0000 SS: 0068
Process swapper (pid: 0, ti=c076a000 task=c0709160 task.ti=c076a000)
Stack: &lt;bleh2&gt;
Call Trace:
 [&lt;f8806edb&gt;] ? ieee80211_stop_tx_ba_cb+0xab/0x150 [mac80211]
 [&lt;f8802f1e&gt;] ? ieee80211_tasklet_handler+0xce/0x110 [mac80211]
 [&lt;c04862ff&gt;] ? net_rx_action+0xef/0x1d0
 [&lt;c0149378&gt;] ? tasklet_action+0x58/0xc0
 [&lt;c014a0f2&gt;] ? __do_softirq+0xc2/0x190
 [&lt;c018eb48&gt;] ? handle_IRQ_event+0x58/0x140
 [&lt;c01205fe&gt;] ? ack_apic_level+0x7e/0x270
 [&lt;c014a1fd&gt;] ? do_softirq+0x3d/0x40
 [&lt;c014a345&gt;] ? irq_exit+0x65/0x90
 [&lt;c010a6af&gt;] ? do_IRQ+0x4f/0xc0
 [&lt;c014a35d&gt;] ? irq_exit+0x7d/0x90
 [&lt;c011d547&gt;] ? smp_apic_timer_interrupt+0x57/0x90
 [&lt;c01094a9&gt;] ? common_interrupt+0x29/0x30
 [&lt;c010fd9e&gt;] ? mwait_idle+0xbe/0x100
 [&lt;c0107e42&gt;] ? cpu_idle+0x52/0x90
 [&lt;c054b1a5&gt;] ? rest_init+0x55/0x60
 [&lt;c077492d&gt;] ? start_kernel+0x315/0x37d
 [&lt;c07743ce&gt;] ? unknown_bootoption+0x0/0x1f9
 [&lt;c0774099&gt;] ? i386_start_kernel+0x79/0x81
Code: &lt;bleh3&gt;
EIP: [&lt;f8806c70&gt;] ieee80211_agg_splice_packets+0x40/0xc0 [mac80211] SS:ESP 0068:c076be38
CR2: 0000000000000030

Cc: stable@kernel.org
Testedy-by: Jack Lau &lt;jackelectronics@hotmail.com&gt;
Signed-off-by: Luis R. Rodriguez &lt;lrodriguez@atheros.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: fix suspend</title>
<updated>2009-07-29T18:52:01+00:00</updated>
<author>
<name>Johannes Berg</name>
<email>johannes@sipsolutions.net</email>
</author>
<published>2009-07-28T16:10:17+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=89c3a8aca28e6d57f2ae945d97858a372d624b81'/>
<id>89c3a8aca28e6d57f2ae945d97858a372d624b81</id>
<content type='text'>
Jan reported that his b43-based laptop hangs during suspend.
The problem turned out to be mac80211 asking the driver to
stop the hardware before removing interfaces, and interface
removal caused b43 to touch the hardware (while down, which
causes the hang).

This patch fixes mac80211 to do reorder these operations to
have them in the correct order -- first remove interfaces
and then stop the hardware. Some more code is necessary to
be able to do so in a race-free manner, in particular it is
necessary to not process frames received during quiescing.

Fixes http://bugzilla.kernel.org/show_bug.cgi?id=13337.

Reported-by: Jan Scholz &lt;scholz@fias.uni-frankfurt.de&gt;
Signed-off-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Jan reported that his b43-based laptop hangs during suspend.
The problem turned out to be mac80211 asking the driver to
stop the hardware before removing interfaces, and interface
removal caused b43 to touch the hardware (while down, which
causes the hang).

This patch fixes mac80211 to do reorder these operations to
have them in the correct order -- first remove interfaces
and then stop the hardware. Some more code is necessary to
be able to do so in a race-free manner, in particular it is
necessary to not process frames received during quiescing.

Fixes http://bugzilla.kernel.org/show_bug.cgi?id=13337.

Reported-by: Jan Scholz &lt;scholz@fias.uni-frankfurt.de&gt;
Signed-off-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: do not queue work after suspend in the dynamic ps timer</title>
<updated>2009-07-27T19:19:38+00:00</updated>
<author>
<name>Luis R. Rodriguez</name>
<email>lrodriguez@atheros.com</email>
</author>
<published>2009-07-27T15:38:25+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=78f1a8b758d57c2d2c9f3db7199cd30803854c82'/>
<id>78f1a8b758d57c2d2c9f3db7199cd30803854c82</id>
<content type='text'>
Signed-off-by: Luis R. Rodriguez &lt;lrodriguez@atheros.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Signed-off-by: Luis R. Rodriguez &lt;lrodriguez@atheros.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: use correct address for mesh Path Error</title>
<updated>2009-07-21T16:07:40+00:00</updated>
<author>
<name>Javier Cardona</name>
<email>javier@cozybit.com</email>
</author>
<published>2009-07-14T00:00:10+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=35946a571099a50d2595c8866f07617d29558f53'/>
<id>35946a571099a50d2595c8866f07617d29558f53</id>
<content type='text'>
For forwarded frames, we save the precursor address in addr1 in case it
needs to be used to send a Path Error.  mesh_path_discard_frame,
however, was using addr2 instead of addr1 to send Path Error frames, so
correct that and also make the comment regarding this more clear.

Signed-off-by: Andrey Yurovsky &lt;andrey@cozybit.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
For forwarded frames, we save the precursor address in addr1 in case it
needs to be used to send a Path Error.  mesh_path_discard_frame,
however, was using addr2 instead of addr1 to send Path Error frames, so
correct that and also make the comment regarding this more clear.

Signed-off-by: Andrey Yurovsky &lt;andrey@cozybit.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: fix injection in monitor mode</title>
<updated>2009-07-21T16:07:38+00:00</updated>
<author>
<name>Pavel Roskin</name>
<email>proski@gnu.org</email>
</author>
<published>2009-07-10T20:42:29+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=8ef86c7bfac5b44529b73b84bc50d3cf574bfb4b'/>
<id>8ef86c7bfac5b44529b73b84bc50d3cf574bfb4b</id>
<content type='text'>
The location of the 802.11 header is calculated incorrectly due to a
wrong placement of parentheses.  Found by kmemcheck.

Signed-off-by: Pavel Roskin &lt;proski@gnu.org&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The location of the 802.11 header is calculated incorrectly due to a
wrong placement of parentheses.  Found by kmemcheck.

Signed-off-by: Pavel Roskin &lt;proski@gnu.org&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: disable mesh</title>
<updated>2009-07-21T16:07:35+00:00</updated>
<author>
<name>Johannes Berg</name>
<email>johannes@sipsolutions.net</email>
</author>
<published>2009-07-10T09:38:14+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=e2e414d92397c366396d13f627a98a20be92e509'/>
<id>e2e414d92397c366396d13f627a98a20be92e509</id>
<content type='text'>
My kvm instance was complaining a lot about sleeping
in atomic contexts in the mesh code, and it turns out
that both mesh_path_add() and mpp_path_add() need to
be able to sleep (they even use synchronize_rcu()!).
I put in a might_sleep() to annotate that, but I see
no way, at least right now, of actually making sure
those functions are only called from process context
since they are both called during TX and RX and the
mesh code itself even calls them with rcu_read_lock()
"held".

Therefore, let's disable it completely for now.

It's possible that I'm only seeing this because the
hwsim's beaconing is broken and thus the peers aren't
discovered right away, but it is possible that this
happens even if beaconing is working, for a peer that
doesn't exist or so.

It should be possible to solve this by deferring the
freeing of the tables to call_rcu() instead of using
synchronize_rcu(), and also using atomic allocations,
but maybe it makes more sense to rework the code to
not call these from atomic contexts and defer more of
the work to the workqueue. Right now, I can't work on
either of those solutions though.

Signed-off-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
My kvm instance was complaining a lot about sleeping
in atomic contexts in the mesh code, and it turns out
that both mesh_path_add() and mpp_path_add() need to
be able to sleep (they even use synchronize_rcu()!).
I put in a might_sleep() to annotate that, but I see
no way, at least right now, of actually making sure
those functions are only called from process context
since they are both called during TX and RX and the
mesh code itself even calls them with rcu_read_lock()
"held".

Therefore, let's disable it completely for now.

It's possible that I'm only seeing this because the
hwsim's beaconing is broken and thus the peers aren't
discovered right away, but it is possible that this
happens even if beaconing is working, for a peer that
doesn't exist or so.

It should be possible to solve this by deferring the
freeing of the tables to call_rcu() instead of using
synchronize_rcu(), and also using atomic allocations,
but maybe it makes more sense to rework the code to
not call these from atomic contexts and defer more of
the work to the workqueue. Right now, I can't work on
either of those solutions though.

Signed-off-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: minstrel: avoid accessing negative indices in rix_to_ndx()</title>
<updated>2009-07-07T16:55:28+00:00</updated>
<author>
<name>Luciano Coelho</name>
<email>luciano.coelho@nokia.com</email>
</author>
<published>2009-07-03T05:25:08+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=3938b45c1c75e53d45eb65ac253f12e86239c9ba'/>
<id>3938b45c1c75e53d45eb65ac253f12e86239c9ba</id>
<content type='text'>
If rix is not found in mi-&gt;r[], i will become -1 after the loop.  This value
is eventually used to access arrays, so we were accessing arrays with a
negative index, which is obviously not what we want to do.  This patch fixes
this potential problem.

Signed-off-by: Luciano Coelho &lt;luciano.coelho@nokia.com&gt;
Acked-by: Felix Fietkau &lt;nbd@openwrt.org&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
If rix is not found in mi-&gt;r[], i will become -1 after the loop.  This value
is eventually used to access arrays, so we were accessing arrays with a
negative index, which is obviously not what we want to do.  This patch fixes
this potential problem.

Signed-off-by: Luciano Coelho &lt;luciano.coelho@nokia.com&gt;
Acked-by: Felix Fietkau &lt;nbd@openwrt.org&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: fix allocation in mesh_queue_preq</title>
<updated>2009-07-07T16:55:27+00:00</updated>
<author>
<name>Andrey Yurovsky</name>
<email>andrey@cozybit.com</email>
</author>
<published>2009-06-25T23:07:42+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=59615b5f9d1323898ca94e88e595b5b04115076a'/>
<id>59615b5f9d1323898ca94e88e595b5b04115076a</id>
<content type='text'>
We allocate a PREQ queue node in mesh_queue_preq, however the allocation
may cause us to sleep.  Use GFP_ATOMIC to prevent this.

[ 1869.126498] BUG: scheduling while atomic: ping/1859/0x10000100
[ 1869.127164] Modules linked in: ath5k mac80211 ath
[ 1869.128310] Pid: 1859, comm: ping Not tainted 2.6.30-wl #1
[ 1869.128754] Call Trace:
[ 1869.129293]  [&lt;c1023a2b&gt;] __schedule_bug+0x48/0x4d
[ 1869.129866]  [&lt;c13b5533&gt;] __schedule+0x77/0x67a
[ 1869.130544]  [&lt;c1026f2e&gt;] ? release_console_sem+0x17d/0x185
[ 1869.131568]  [&lt;c807cf47&gt;] ? mesh_queue_preq+0x2b/0x165 [mac80211]
[ 1869.132318]  [&lt;c13b5b3e&gt;] schedule+0x8/0x1f
[ 1869.132807]  [&lt;c1023c12&gt;] __cond_resched+0x16/0x2f
[ 1869.133478]  [&lt;c13b5bf0&gt;] _cond_resched+0x27/0x32
[ 1869.134191]  [&lt;c108a370&gt;] kmem_cache_alloc+0x1c/0xcf
[ 1869.134714]  [&lt;c10273ae&gt;] ? printk+0x15/0x17
[ 1869.135670]  [&lt;c807cf47&gt;] mesh_queue_preq+0x2b/0x165 [mac80211]
[ 1869.136731]  [&lt;c807d1f8&gt;] mesh_nexthop_lookup+0xee/0x12d [mac80211]
[ 1869.138130]  [&lt;c807417e&gt;] ieee80211_xmit+0xe6/0x2b2 [mac80211]
[ 1869.138935]  [&lt;c80be46d&gt;] ? ath5k_hw_setup_rx_desc+0x0/0x66 [ath5k]
[ 1869.139831]  [&lt;c80c97bc&gt;] ? ath5k_tasklet_rx+0xba/0x506 [ath5k]
[ 1869.140863]  [&lt;c8075191&gt;] ieee80211_subif_start_xmit+0x6c9/0x6e4
[mac80211]
[ 1869.141665]  [&lt;c105cf1c&gt;] ? handle_level_irq+0x78/0x9d
[ 1869.142390]  [&lt;c12e3f93&gt;] dev_hard_start_xmit+0x168/0x1c7
[ 1869.143092]  [&lt;c12f1f17&gt;] __qdisc_run+0xe1/0x1b7
[ 1869.143612]  [&lt;c12e25ff&gt;] qdisc_run+0x18/0x1a
[ 1869.144248]  [&lt;c12e62f4&gt;] dev_queue_xmit+0x16a/0x25a
[ 1869.144785]  [&lt;c13b6dcc&gt;] ? _read_unlock_bh+0xe/0x10
[ 1869.145465]  [&lt;c12eacdb&gt;] neigh_resolve_output+0x19c/0x1c7
[ 1869.146182]  [&lt;c130e2da&gt;] ? ip_finish_output+0x0/0x51
[ 1869.146697]  [&lt;c130e2a0&gt;] ip_finish_output2+0x182/0x1bc
[ 1869.147358]  [&lt;c130e327&gt;] ip_finish_output+0x4d/0x51
[ 1869.147863]  [&lt;c130e9d5&gt;] ip_output+0x80/0x85
[ 1869.148515]  [&lt;c130cc49&gt;] dst_output+0x9/0xb
[ 1869.149141]  [&lt;c130dec6&gt;] ip_local_out+0x17/0x1a
[ 1869.149632]  [&lt;c130e0bc&gt;] ip_push_pending_frames+0x1f3/0x255
[ 1869.150343]  [&lt;c13247ff&gt;] raw_sendmsg+0x5e6/0x667
[ 1869.150883]  [&lt;c1033c55&gt;] ? insert_work+0x6a/0x73
[ 1869.151834]  [&lt;c8071e00&gt;] ?
ieee80211_invoke_rx_handlers+0x17da/0x1ae8 [mac80211]
[ 1869.152630]  [&lt;c132bd68&gt;] inet_sendmsg+0x3b/0x48
[ 1869.153232]  [&lt;c12d7deb&gt;] __sock_sendmsg+0x45/0x4e
[ 1869.153740]  [&lt;c12d8537&gt;] sock_sendmsg+0xb8/0xce
[ 1869.154519]  [&lt;c80be46d&gt;] ? ath5k_hw_setup_rx_desc+0x0/0x66 [ath5k]
[ 1869.155289]  [&lt;c1036b25&gt;] ? autoremove_wake_function+0x0/0x30
[ 1869.155859]  [&lt;c115992b&gt;] ? __copy_from_user_ll+0x11/0xce
[ 1869.156573]  [&lt;c1159d99&gt;] ? copy_from_user+0x31/0x54
[ 1869.157235]  [&lt;c12df646&gt;] ? verify_iovec+0x40/0x6e
[ 1869.157778]  [&lt;c12d869a&gt;] sys_sendmsg+0x14d/0x1a5
[ 1869.158714]  [&lt;c8072c40&gt;] ? __ieee80211_rx+0x49e/0x4ee [mac80211]
[ 1869.159641]  [&lt;c80c83fe&gt;] ? ath5k_rxbuf_setup+0x6d/0x8d [ath5k]
[ 1869.160543]  [&lt;c80be46d&gt;] ? ath5k_hw_setup_rx_desc+0x0/0x66 [ath5k]
[ 1869.161434]  [&lt;c80beba4&gt;] ? ath5k_hw_get_rxdp+0xe/0x10 [ath5k]
[ 1869.162319]  [&lt;c80c97bc&gt;] ? ath5k_tasklet_rx+0xba/0x506 [ath5k]
[ 1869.163063]  [&lt;c1005627&gt;] ? enable_8259A_irq+0x40/0x43
[ 1869.163594]  [&lt;c101edb8&gt;] ? __dequeue_entity+0x23/0x27
[ 1869.164793]  [&lt;c100187a&gt;] ? __switch_to+0x2b/0x105
[ 1869.165442]  [&lt;c1021d5f&gt;] ? finish_task_switch+0x5b/0x74
[ 1869.166129]  [&lt;c12d963a&gt;] sys_socketcall+0x14b/0x17b
[ 1869.166612]  [&lt;c1002b95&gt;] syscall_call+0x7/0xb

Signed-off-by: Andrey Yurovsky &lt;andrey@cozybit.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
We allocate a PREQ queue node in mesh_queue_preq, however the allocation
may cause us to sleep.  Use GFP_ATOMIC to prevent this.

[ 1869.126498] BUG: scheduling while atomic: ping/1859/0x10000100
[ 1869.127164] Modules linked in: ath5k mac80211 ath
[ 1869.128310] Pid: 1859, comm: ping Not tainted 2.6.30-wl #1
[ 1869.128754] Call Trace:
[ 1869.129293]  [&lt;c1023a2b&gt;] __schedule_bug+0x48/0x4d
[ 1869.129866]  [&lt;c13b5533&gt;] __schedule+0x77/0x67a
[ 1869.130544]  [&lt;c1026f2e&gt;] ? release_console_sem+0x17d/0x185
[ 1869.131568]  [&lt;c807cf47&gt;] ? mesh_queue_preq+0x2b/0x165 [mac80211]
[ 1869.132318]  [&lt;c13b5b3e&gt;] schedule+0x8/0x1f
[ 1869.132807]  [&lt;c1023c12&gt;] __cond_resched+0x16/0x2f
[ 1869.133478]  [&lt;c13b5bf0&gt;] _cond_resched+0x27/0x32
[ 1869.134191]  [&lt;c108a370&gt;] kmem_cache_alloc+0x1c/0xcf
[ 1869.134714]  [&lt;c10273ae&gt;] ? printk+0x15/0x17
[ 1869.135670]  [&lt;c807cf47&gt;] mesh_queue_preq+0x2b/0x165 [mac80211]
[ 1869.136731]  [&lt;c807d1f8&gt;] mesh_nexthop_lookup+0xee/0x12d [mac80211]
[ 1869.138130]  [&lt;c807417e&gt;] ieee80211_xmit+0xe6/0x2b2 [mac80211]
[ 1869.138935]  [&lt;c80be46d&gt;] ? ath5k_hw_setup_rx_desc+0x0/0x66 [ath5k]
[ 1869.139831]  [&lt;c80c97bc&gt;] ? ath5k_tasklet_rx+0xba/0x506 [ath5k]
[ 1869.140863]  [&lt;c8075191&gt;] ieee80211_subif_start_xmit+0x6c9/0x6e4
[mac80211]
[ 1869.141665]  [&lt;c105cf1c&gt;] ? handle_level_irq+0x78/0x9d
[ 1869.142390]  [&lt;c12e3f93&gt;] dev_hard_start_xmit+0x168/0x1c7
[ 1869.143092]  [&lt;c12f1f17&gt;] __qdisc_run+0xe1/0x1b7
[ 1869.143612]  [&lt;c12e25ff&gt;] qdisc_run+0x18/0x1a
[ 1869.144248]  [&lt;c12e62f4&gt;] dev_queue_xmit+0x16a/0x25a
[ 1869.144785]  [&lt;c13b6dcc&gt;] ? _read_unlock_bh+0xe/0x10
[ 1869.145465]  [&lt;c12eacdb&gt;] neigh_resolve_output+0x19c/0x1c7
[ 1869.146182]  [&lt;c130e2da&gt;] ? ip_finish_output+0x0/0x51
[ 1869.146697]  [&lt;c130e2a0&gt;] ip_finish_output2+0x182/0x1bc
[ 1869.147358]  [&lt;c130e327&gt;] ip_finish_output+0x4d/0x51
[ 1869.147863]  [&lt;c130e9d5&gt;] ip_output+0x80/0x85
[ 1869.148515]  [&lt;c130cc49&gt;] dst_output+0x9/0xb
[ 1869.149141]  [&lt;c130dec6&gt;] ip_local_out+0x17/0x1a
[ 1869.149632]  [&lt;c130e0bc&gt;] ip_push_pending_frames+0x1f3/0x255
[ 1869.150343]  [&lt;c13247ff&gt;] raw_sendmsg+0x5e6/0x667
[ 1869.150883]  [&lt;c1033c55&gt;] ? insert_work+0x6a/0x73
[ 1869.151834]  [&lt;c8071e00&gt;] ?
ieee80211_invoke_rx_handlers+0x17da/0x1ae8 [mac80211]
[ 1869.152630]  [&lt;c132bd68&gt;] inet_sendmsg+0x3b/0x48
[ 1869.153232]  [&lt;c12d7deb&gt;] __sock_sendmsg+0x45/0x4e
[ 1869.153740]  [&lt;c12d8537&gt;] sock_sendmsg+0xb8/0xce
[ 1869.154519]  [&lt;c80be46d&gt;] ? ath5k_hw_setup_rx_desc+0x0/0x66 [ath5k]
[ 1869.155289]  [&lt;c1036b25&gt;] ? autoremove_wake_function+0x0/0x30
[ 1869.155859]  [&lt;c115992b&gt;] ? __copy_from_user_ll+0x11/0xce
[ 1869.156573]  [&lt;c1159d99&gt;] ? copy_from_user+0x31/0x54
[ 1869.157235]  [&lt;c12df646&gt;] ? verify_iovec+0x40/0x6e
[ 1869.157778]  [&lt;c12d869a&gt;] sys_sendmsg+0x14d/0x1a5
[ 1869.158714]  [&lt;c8072c40&gt;] ? __ieee80211_rx+0x49e/0x4ee [mac80211]
[ 1869.159641]  [&lt;c80c83fe&gt;] ? ath5k_rxbuf_setup+0x6d/0x8d [ath5k]
[ 1869.160543]  [&lt;c80be46d&gt;] ? ath5k_hw_setup_rx_desc+0x0/0x66 [ath5k]
[ 1869.161434]  [&lt;c80beba4&gt;] ? ath5k_hw_get_rxdp+0xe/0x10 [ath5k]
[ 1869.162319]  [&lt;c80c97bc&gt;] ? ath5k_tasklet_rx+0xba/0x506 [ath5k]
[ 1869.163063]  [&lt;c1005627&gt;] ? enable_8259A_irq+0x40/0x43
[ 1869.163594]  [&lt;c101edb8&gt;] ? __dequeue_entity+0x23/0x27
[ 1869.164793]  [&lt;c100187a&gt;] ? __switch_to+0x2b/0x105
[ 1869.165442]  [&lt;c1021d5f&gt;] ? finish_task_switch+0x5b/0x74
[ 1869.166129]  [&lt;c12d963a&gt;] sys_socketcall+0x14b/0x17b
[ 1869.166612]  [&lt;c1002b95&gt;] syscall_call+0x7/0xb

Signed-off-by: Andrey Yurovsky &lt;andrey@cozybit.com&gt;
Signed-off-by: John W. Linville &lt;linville@tuxdriver.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>mac80211: Use rcu_barrier() on unload.</title>
<updated>2009-06-26T20:51:36+00:00</updated>
<author>
<name>Jesper Dangaard Brouer</name>
<email>hawk@comx.dk</email>
</author>
<published>2009-06-26T10:45:53+00:00</published>
<link rel='alternate' type='text/html' href='https://git.tavy.me/linux.git/commit/?id=4a27096bbe2cad4c6e78802a0d9dfe0e598a1129'/>
<id>4a27096bbe2cad4c6e78802a0d9dfe0e598a1129</id>
<content type='text'>
The mac80211 module uses rcu_call() thus it should use rcu_barrier()
on module unload.

The rcu_barrier() is placed in mech.c ieee80211_stop_mesh() which is
invoked from ieee80211_stop() in case vif.type == NL80211_IFTYPE_MESH_POINT.

Acked-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Acked-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Signed-off-by: Jesper Dangaard Brouer &lt;hawk@comx.dk&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
The mac80211 module uses rcu_call() thus it should use rcu_barrier()
on module unload.

The rcu_barrier() is placed in mech.c ieee80211_stop_mesh() which is
invoked from ieee80211_stop() in case vif.type == NL80211_IFTYPE_MESH_POINT.

Acked-by: Paul E. McKenney &lt;paulmck@linux.vnet.ibm.com&gt;
Acked-by: Johannes Berg &lt;johannes@sipsolutions.net&gt;
Signed-off-by: Jesper Dangaard Brouer &lt;hawk@comx.dk&gt;
Signed-off-by: David S. Miller &lt;davem@davemloft.net&gt;
</pre>
</div>
</content>
</entry>
</feed>
