On 08/04/15(Wed) 10:03, David Gwynne wrote:
> 
> > On 8 Apr 2015, at 01:38, Martin Pieuchot <[email protected]> wrote:
> > 
> > Here's a diff to convert these drivers to if_input().  They all make
> > use of m_devget(9) which takes an ifp as argument and I'd like to
> > change that.  But first I need to make sure all these drivers are
> > converted.
> > [...]
> > Index: dev/ic/mtd8xx.c
> > ===================================================================
> > RCS file: /cvs/src/sys/dev/ic/mtd8xx.c,v
> > retrieving revision 1.24
> > diff -u -p -r1.24 mtd8xx.c
> > --- dev/ic/mtd8xx.c 22 Dec 2014 02:28:51 -0000      1.24
> > +++ dev/ic/mtd8xx.c 7 Apr 2015 15:24:43 -0000
> > @@ -874,6 +874,7 @@ mtd_intr(void *xsc)
> > static void
> > mtd_rxeof(struct mtd_softc *sc)
> > {
> > +   struct mbuf_list ml = MBUF_LIST_INITIALIZER();
> >     struct mbuf *m;
> >     struct ifnet *ifp;
> >     struct mtd_rx_desc *cur_rx;
> > @@ -934,12 +935,10 @@ mtd_rxeof(struct mtd_softc *sc)
> > 
> >             ifp->if_ipackets++;
> > 
> > -#if NBPFILTER > 0
> > -           if (ifp->if_bpf)
> > -                   bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_IN);
> > -#endif
> > -           ether_input_mbuf(ifp, m);
> > +           ml_enqueue(&ml, m);
> >     }
> > +
> > +   if_input(ifp, &ml);
> > 
> >     sc->mtd_cdata.mtd_rx_prod = i;
> > }
> 
> no.
> 
> there's a return inside the loop in this driver, which means you'll leak the 
> mbufs on ml. if you use break instead of return it should be ok.

Like that?

Index: dev/ic/mtd8xx.c
===================================================================
RCS file: /cvs/src/sys/dev/ic/mtd8xx.c,v
retrieving revision 1.24
diff -u -p -r1.24 mtd8xx.c
--- dev/ic/mtd8xx.c     22 Dec 2014 02:28:51 -0000      1.24
+++ dev/ic/mtd8xx.c     8 Apr 2015 10:08:37 -0000
@@ -874,6 +874,7 @@ mtd_intr(void *xsc)
 static void
 mtd_rxeof(struct mtd_softc *sc)
 {
+       struct mbuf_list ml = MBUF_LIST_INITIALIZER();
        struct mbuf *m;
        struct ifnet *ifp;
        struct mtd_rx_desc *cur_rx;
@@ -912,7 +913,7 @@ mtd_rxeof(struct mtd_softc *sc)
                                continue;
                        } else {
                                mtd_init(ifp);
-                               return;
+                               break;
                        }
                }
 
@@ -934,12 +935,10 @@ mtd_rxeof(struct mtd_softc *sc)
 
                ifp->if_ipackets++;
 
-#if NBPFILTER > 0
-               if (ifp->if_bpf)
-                       bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_IN);
-#endif
-               ether_input_mbuf(ifp, m);
+               ml_enqueue(&ml, m);
        }
+
+       if_input(ifp, &ml);
 
        sc->mtd_cdata.mtd_rx_prod = i;
 }

Reply via email to