Search Linux Wireless

Re: mac80211 does transmit frames with stopped queue

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2009-02-19 at 21:50 +0100, Michael Buesch wrote:
> This is the B43_WARN_ON(ring->stopped) in b43_dma_tx() triggering.
> 
> [292334.105762] WARNING: at /home/mb/kernel/compat-wireless-2009-02-17/drivers/net/wireless/b43/dma.c:1314 b43_dma_tx+0x9fc/0xa30 [b43]()
> [292334.105808] Modules linked in: b43 ssb mac80211 cfg80211 [last unloaded: cfg80211]
> [292334.105861] Pid: 3143, comm: nfsd Tainted: G        W  2.6.28.5 #7
> [292334.105886] Call Trace:
> [292334.105904]  <IRQ>  [<ffffffff80240b64>] warn_on_slowpath+0x64/0xa0
> [292334.105955]  [<ffffffffa008cf9a>] ccmp_encrypt_skb+0x1ba/0x220 [mac80211]
> [292334.105995]  [<ffffffffa009d2bf>] ieee80211_duration+0x1af/0x230 [mac80211]
> [292334.106032]  [<ffffffffa0017a3c>] b43_dma_tx+0x9fc/0xa30 [b43]
> [292334.106070]  [<ffffffffa009e19e>] invoke_tx_handlers+0xe5e/0xfb0 [mac80211]
> [292334.106104]  [<ffffffffa0001d84>] b43_op_tx+0x74/0xe0 [b43]
> [292334.106141]  [<ffffffffa009e9f6>] __ieee80211_tx+0x56/0x160 [mac80211]
> [292334.106180]  [<ffffffffa009f992>] ieee80211_master_start_xmit+0x272/0x530 [mac80211]
> [292334.106224]  [<ffffffff8062a70e>] __qdisc_run+0x20e/0x260
> [292334.106928]  [<ffffffff8060c770>] net_tx_action+0xe0/0x130
> [292334.106953]  [<ffffffff80246803>] __do_softirq+0x93/0x160
> [292334.106980]  [<ffffffff8020d49c>] call_softirq+0x1c/0x30
> [292334.107003]  <EOI>  [<ffffffff8020ee45>] do_softirq+0x35/0x70
> [292334.107034]  [<ffffffff802466d5>] local_bh_enable+0xa5/0xb0
> [292334.107060]  [<ffffffff8060e9fc>] dev_queue_xmit+0xfc/0x570
> [292334.107088]  [<ffffffff8067e486>] ip_queue_xmit+0x1f6/0x3e0
> [292334.107114]  [<ffffffff80686cbf>] sk_stream_alloc_skb+0x3f/0x110
> [292334.107140]  [<ffffffff8069151b>] tcp_transmit_skb+0x4eb/0x760
> [292334.107167]  [<ffffffff80693ec0>] __tcp_push_pending_frames+0x260/0x960
> [292334.107195]  [<ffffffff80690a1c>] tcp_current_mss+0x5c/0x100
> [292334.107221]  [<ffffffff80687f12>] tcp_sendpage+0x652/0x6e0
> [292334.107247]  [<ffffffff805feea6>] kernel_sendpage+0x16/0x40
> [292334.107274]  [<ffffffff80740f56>] svc_sendto+0x216/0x360
> [292334.107300]  [<ffffffff803786c1>] encode_fattr3+0x141/0x1f0
> [292334.107326]  [<ffffffff80378831>] encode_post_op_attr+0xc1/0xd0
> [292334.107353]  [<ffffffff80741d8c>] svc_tcp_sendto+0x4c/0xb0
> [292334.107380]  [<ffffffff8074be0b>] svc_send+0x9b/0xd0
> [292334.107404]  [<ffffffff8073f6f2>] svc_process+0x232/0x800
> [292334.107429]  [<ffffffff80239f50>] default_wake_function+0x0/0x10
> [292334.107458]  [<ffffffff8076e4c7>] __down_read+0x17/0xa6
> [292334.107484]  [<ffffffff80369639>] nfsd+0x1a9/0x2c0
> [292334.107509]  [<ffffffff80369490>] nfsd+0x0/0x2c0
> [292334.107534]  [<ffffffff80256da7>] kthread+0x47/0x90
> [292334.107558]  [<ffffffff8023dfb7>] schedule_tail+0x27/0x70
> [292334.107583]  [<ffffffff8020d139>] child_rip+0xa/0x11
> [292334.107608]  [<ffffffff80256d60>] kthread+0x0/0x90
> [292334.107633]  [<ffffffff8020d12f>] child_rip+0x0/0x11
> [292334.107657] ---[ end trace 43778c870e1cf6c0 ]---
> 
> It indicates that mac80211 queued a frame on the queue although
> ieee80211_stop_queue(dev->wl->hw, skb_get_queue_mapping(skb)); was called on that queue.
> 
> This seems to only happen with fragmentation turned on (fts = 1024).
> (I only noticed it after I turned fragmentation on, so...)
> I'm not sure if it's related to AP mode, but this machine is in AP mode.

Just wanted to follow up on this for everybody to see -- I am aware of
the issue but the code is complicated enough and it happens infrequently
enough that I do not actually want to fix it immediately. I'm working on
rewriting the queueing code because it is needed for proper aggregation,
and will try to make sure this will work as expected.

Regardless of that, I still recommend to always keep around 10 spaces in
the queue free and use them up for a fragmented frame, only stopping the
queue on the last fragment. This is a little more driver code, but it
should be more efficient.

johannes

Attachment: signature.asc
Description: This is a digitally signed message part


[Index of Archives]     [Linux Host AP]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [Linux Kernel]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]
  Powered by Linux