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)
In article <CAKrYomh23MGVWK0USFTU_+LCbY3Yooh1M8R2QV3dA2EKS6N+_Q%mail.gmail.com@localhost>,
Ryota Ozaki <ozaki-r%netbsd.org@localhost> wrote:
>Hi,
>
>I prepared two patches for bridge(4):
> http://www.netbsd.org/~ozaki-r/remove-BRIDGE_MPSAFE.diff
> http://www.netbsd.org/~ozaki-r/psref-bridge.diff
>
>The former removes BRIDGE_MPSAFE switch and enables the
>MP-safe code by default. After introducing softint-based
>if_input, bridge can run in parallel even without NET_MPSAFE,
>so I think we need to always enable it.
>
>The latter applies psref(9) to bridge. I confirmed the new
>implementation survives load test, which includes repeating
>bridge creations/deletions and member interface
>additions/removals, over several hours.
>
>Note that I notice that we need to tweak shmif of the
>rump kernel because it seems that the interrupt handler
>of shmif can migration between CPUs and so the behavior
>violates a contract of psref. We can fix it by applying
>if_percpuq to shmif, but I'm not sure that's the way
>to go. (I'll ask pooka about the issue.)
>
>Anyway any comments on the patches?
Why bother? Just define them empty?
+#define ACQUIRE_GLOBAL_LOCKS(s) do { s = 0; } while (0)
+#define RELEASE_GLOBAL_LOCKS(s) do { (void)s; } while (0)
Nobody sets error here.
+ sc->sc_iflist_psref.bip_psz = pserialize_create();
+ if (sc->sc_iflist_psref.bip_psz == NULL)
+ panic("%s: pserialize_create %d\n", __func__, error);
Early return here:
if (bif != NULL) {
- if (bif->bif_waiting)
- bif = NULL;
- else
- atomic_inc_32(&bif->bif_refs);
+ psref_acquire(psref, &bif->bif_psref,
+ sc->sc_iflist_psref.bip_class);
if (bif == NULL)
return NULL;
psref_acquire(psref, &bif->bif_psref, sc->sc_iflist_psref.bip_class);
return bif;
christos
Home |
Main Index |
Thread Index |
Old Index