On 23.11.2015. 15:09, David Gwynne wrote:
> 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.
Hi,
i have tested patches with ix(82599), em(i350), bge(5270) with ifconfig
down/up and em and bge seems fine.
Problems with ix are still there
ix0: unable to fill any rx descriptors
ix0: Could not setup receive structures
but this doesn't have anything to do with these patches?
OpenBSD is current from today without any additional patches.
pf=NO
ddb.console=1
kern.pool_debug=1
net.inet.ip.forwarding=1
net.inet.ip.ifq.maxlen=1024