tech-net archive

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

Re: bridge(4): BRIDGE_MPSAFE by default and applying psref(9)



On Tue, Apr 19, 2016 at 12:27 AM, Taylor R Campbell
<campbell+netbsd-tech-kern%mumble.net@localhost> wrote:
>    Date: Mon, 18 Apr 2016 17:06:51 +0900
>    From: Ryota Ozaki <ozaki-r%netbsd.org@localhost>
>
>    On Fri, Apr 15, 2016 at 5:37 AM, Taylor R Campbell
>    <campbell+netbsd-tech-kern%mumble.net@localhost> wrote:
>    > You could make (e.g.) bridge_input always satisfy the contract by
>    > doing
>    >
>    >         int bound = curlwp->l_pflag & LP_BOUND;
>    >         curlwp->l_pflag |= LP_BOUND;
>    >         ...
>    >         curlwp->l_pflag ^= bound ^ LP_BOUND;
>    >
>    > if you can't guarantee that every caller will be in a softint.
>
>    Good idea. It works for bridge.
>
>    Only shmif(4) and virt(4) of the rump kernel are the objectives.
>    Considering that introducing psref to other L2 components
>    (vlan and bpf) in the future, I think it's better to put
>    the LP_BOUND stuffs to shmif and virt.
>
> Sounds good to me.
>
>    > And this protocol seems fishy to me -- what stops bridge_clone_destroy
>    > from freeing a bridge while another CPU is in the middle of
>    > bridge_ioctl_add, after the sc_dying check?
>
>    I wrote a patch to solve the issue by putting ifioctl_detach
>    before calling destruction routines of an interface:
>      http://www.netbsd.org/~ozaki-r/early-ifioctl_detach.diff
>
>    The change should prevent *_clone_destroy and *_ioctl from
>    running in parallel.
>
> Hmm...  I'm rather confused by the ifnet_lock_enter/exit business.
> Why isn't ifnet_lock_enter simply mutex_enter(&il->il_lock) and
> ifnet_lock_exit simply mutex_exit(&il->il_lock)?  I think it's trying
> to do something like psref, using per-CPU-per-object counts instead of
> per-CPU lists -- but it doesn't actually avoid the lock.
>
> We should try to get dyoung@ to look at this.

We will apply psref to struct ifnet for safe interface destruction
at some point. Can we use the psref for ioctl instead of il_lock?

>
>    > bridge_try_hold_bif should perhaps be renamed now that it never fails,
>    > say to bridge_acquire_member -- or maybe we can just remove
>    > bridge_try_hold_bif and bridge_release_member altogether, since
>    > they're just psref_acquire and psref_release.
>
>    I choose bridge_acquire_member for now. I would get rid of
>    bridge_*_member in another step later.
>
>    So new patches are here:
>      http://www.netbsd.org/~ozaki-r/psref-bridge-v2.diff
>      http://www.netbsd.org/~ozaki-r/psref-bridge-v2-diff.diff
>
>    The changes also reflect christos and mrg suggestions.
>
> Looks good!  I don't have time for a thorough review right now, but
> nothing jumped out at me on a quick skim.

Thanks! I committed the patch anyway, although we have to fix the above
issue somehow.

  ozaki-r


Home | Main Index | Thread Index | Old Index