Search Linux Wireless

Re: [RFC 2/2] mac80211: revamp interface and filter configuration

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

 



On Wed, 2007-09-05 at 16:16 +0200, Michael Buesch wrote:

> > > 1) Use ieee80211_stop_queues() in ->configure_filter() and
> > >    ieee80211_wake_queues() at the end of the workqueue function.
> > > 
> > > 2) Throw away all packets until the workqueue function
> > >    terminates.
> > > 
> > > 3) Implement our own tx queue.
> > > 
> > > I prefer to do option (1) because it wouldn't require adding
> > > additional fields to our private structure beside the work_struct
> > > for the workqueue function, it is simple to implement and it would
> > > not throw away any packets. Are there any side effects that I have
> > > overlooked?
> > 
> > I think Michael says it's currently buggy if called outside of ->tx().
> 
> Yes, we had a bug in b43 where we used it in the periodic workqueue.
> It causes really hard to track down system freezes on UP
> systems due to races with the TX code.
> It will hang and busy wait in the qdisc code when this triggers.
> I didn't see a fix for this, yet.
> But I think a fix could probably be to take the netif_tx_lock
> in the ieee80211_stop_queues() function, so we make sure that no
> TX is in progress while we stop it.

Ok. Of course, for zd1211 it'd be easy to set a flag in
configure_filter() and check that flag in tx() and if it's set then call
stop_queues().

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