> On 7 Jan 2021, at 04:14, Klemens Nanni <k...@openbsd.org> wrote:
> 
> pair(4)'s output path can run without kernel lock just fine.
> 
> NB: Looking at CVS log, it seems this was not done during import because
> IFXF_MPSSAFE became a thing afterwards.
> 
> Feedback? Objections? OK?
> 

Looks good to me.

ok mvs

> Index: if_pair.c
> ===================================================================
> RCS file: /cvs/src/sys/net/if_pair.c,v
> retrieving revision 1.16
> diff -u -p -r1.16 if_pair.c
> --- if_pair.c 21 Aug 2020 22:59:27 -0000      1.16
> +++ if_pair.c 7 Jan 2021 00:20:20 -0000
> @@ -37,7 +37,7 @@
> 
> void  pairattach(int);
> int   pairioctl(struct ifnet *, u_long, caddr_t);
> -void pairstart(struct ifnet *);
> +void pairstart(struct ifqueue *);
> int   pair_clone_create(struct if_clone *, int);
> int   pair_clone_destroy(struct ifnet *);
> int   pair_media_change(struct ifnet *);
> @@ -116,8 +116,8 @@ pair_clone_create(struct if_clone *ifc, 
> 
>       ifp->if_softc = sc;
>       ifp->if_ioctl = pairioctl;
> -     ifp->if_start = pairstart;
> -     ifp->if_xflags = IFXF_CLONED;
> +     ifp->if_qstart = pairstart;
> +     ifp->if_xflags = IFXF_CLONED | IFXF_MPSAFE;
> 
>       ifp->if_hardmtu = ETHER_MAX_HARDMTU_LEN;
>       ifp->if_capabilities = IFCAP_VLAN_MTU;
> @@ -158,8 +158,9 @@ pair_clone_destroy(struct ifnet *ifp)
> }
> 
> void
> -pairstart(struct ifnet *ifp)
> +pairstart(struct ifqueue *ifq)
> {
> +     struct ifnet            *ifp = ifq->ifq_if;
>       struct pair_softc       *sc = (struct pair_softc *)ifp->if_softc;
>       struct mbuf_list         ml = MBUF_LIST_INITIALIZER();
>       struct ifnet            *pairedifp;
> @@ -167,11 +168,7 @@ pairstart(struct ifnet *ifp)
> 
>       pairedifp = if_get(sc->sc_pairedif);
> 
> -     for (;;) {
> -             m = ifq_dequeue(&ifp->if_snd);
> -             if (m == NULL)
> -                     break;
> -
> +     while ((m = ifq_dequeue(ifq)) != NULL) {
> #if NBPFILTER > 0
>               if (ifp->if_bpf)
>                       bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_OUT);
> 

Reply via email to