> 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
