> Date: Tue, 24 Nov 2015 00:09:34 +1000
> From: David Gwynne <[email protected]>
> 
> by replacing it.
> 
> hrvoje popovski was prescient in predicting this.
> 
> anyway. there are two things shared between the network stack and
> drivers in the send path: the send queue and the IFF_OACTIVE flag.
> the send queue is now protected by a mutex. this diff makes the
> oactive functionality mpsafe too.
> 
> IFF_OACTIVE is part of if_flags. there are two problems with that.
> firstly, if_flags is a short and we dont have any MI atomic operations
> to manipulate a short. secondly, while we could make the IFF_OACTIVE
> operates mpsafe, all changes to other flags would have to be made
> safe at the same time, otherwise a read-modify-write cycle on their
> updates could clobber the oactive change.
> 
> instead this moves the oactive mark into struct ifqueue, and provides
> an API for changing it. there's ifq_set_oactive, ifq_clr_oactive,
> and ifq_is_oactive. these are modelled on ifsq_set_oactive,
> ifsq_clr_oactive, and ifsq_is_oactive in dragonflybsd.
> 
> this diff includes changes to all the drivers manipulating IFF_OACTIVE
> to now use the ifsq_{set,clr_is}_oactive API too.
> 
> it is largely mechanical.
> 
> with this in place it will be possible to run an interfaces start
> routine without the biglock while interacting with the stack safely.
> 
> ok?

yes pleaae

Reply via email to