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.

If you can try this diff on one or more chips, please let me know how
it goes.

Martin

Index: arch/sparc/dev/hme.c
===================================================================
RCS file: /cvs/src/sys/arch/sparc/dev/hme.c,v
retrieving revision 1.67
diff -u -p -r1.67 hme.c
--- arch/sparc/dev/hme.c        22 Dec 2014 02:26:54 -0000      1.67
+++ arch/sparc/dev/hme.c        7 Apr 2015 15:16:37 -0000
@@ -815,6 +815,7 @@ hme_read(sc, idx, len, flags)
        u_int32_t flags;
 {
        struct ifnet *ifp = &sc->sc_arpcom.ac_if;
+       struct mbuf_list ml = MBUF_LIST_INITIALIZER();
        struct mbuf *m;
 
        if (len <= sizeof(struct ether_header) ||
@@ -835,16 +836,8 @@ hme_read(sc, idx, len, flags)
 
        ifp->if_ipackets++;
 
-#if NBPFILTER > 0
-       /*
-        * Check if there's a BPF listener on this interface.
-        * If so, hand off the raw packet to BPF.
-        */
-       if (ifp->if_bpf)
-               bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_IN);
-#endif
-       /* Pass the packet up. */
-       ether_input_mbuf(ifp, m);
+       ml_enqueue(&ml, m);
+       if_input(ifp, &ml);
 }
 
 void
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;
 }
Index: dev/pci/if_bce.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_bce.c,v
retrieving revision 1.43
diff -u -p -r1.43 if_bce.c
--- dev/pci/if_bce.c    14 Mar 2015 03:38:48 -0000      1.43
+++ dev/pci/if_bce.c    7 Apr 2015 15:25:44 -0000
@@ -694,6 +694,7 @@ void
 bce_rxintr(struct bce_softc *sc)
 {
        struct ifnet *ifp = &sc->bce_ac.ac_if;
+       struct mbuf_list ml = MBUF_LIST_INITIALIZER();
        struct rx_pph *pph;
        struct mbuf *m;
        int curr;
@@ -741,17 +742,7 @@ bce_rxintr(struct bce_softc *sc)
                    BCE_PREPKT_HEADER_SIZE, len, ETHER_ALIGN, ifp);
                ifp->if_ipackets++;
 
-#if NBPFILTER > 0
-               /*
-                * Pass this up to any BPF listeners, but only
-                * pass it up the stack if it's for us.
-                */
-               if (ifp->if_bpf)
-                       bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_IN);
-#endif
-
-               /* Pass it on. */
-               ether_input_mbuf(ifp, m);
+               ml_enqueue(&ml, m);
 
                /* re-check current in case it changed */
                curr = (bus_space_read_4(sc->bce_btag, sc->bce_bhandle,
@@ -760,6 +751,9 @@ bce_rxintr(struct bce_softc *sc)
                if (curr >= BCE_NRXDESC)
                        curr = BCE_NRXDESC - 1;
        }
+
+       if_input(ifp, &ml);
+
        sc->bce_rxin = curr;
 }
 
Index: dev/pci/if_lge.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_lge.c,v
retrieving revision 1.64
diff -u -p -r1.64 if_lge.c
--- dev/pci/if_lge.c    22 Dec 2014 02:28:52 -0000      1.64
+++ dev/pci/if_lge.c    7 Apr 2015 15:27:14 -0000
@@ -680,6 +680,7 @@ lge_newbuf(struct lge_softc *sc, struct 
 void
 lge_rxeof(struct lge_softc *sc, int cnt)
 {
+       struct mbuf_list        ml = MBUF_LIST_INITIALIZER();
         struct mbuf            *m;
         struct ifnet           *ifp;
        struct lge_rx_desc      *cur_rx;
@@ -727,20 +728,11 @@ lge_rxeof(struct lge_softc *sc, int cnt)
                        }
                        m = m0;
                } else {
-                       m->m_pkthdr.rcvif = ifp;
                        m->m_pkthdr.len = m->m_len = total_len;
                }
 
                ifp->if_ipackets++;
 
-#if NBPFILTER > 0
-               /*
-                * Handle BPF listeners. Let the BPF user see the packet.
-                */
-               if (ifp->if_bpf)
-                       bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_IN);
-#endif
-
                /* Do IP checksum checking. */
                if (rxsts & LGE_RXSTS_ISIP) {
                        if (!(rxsts & LGE_RXSTS_IPCSUMERR))
@@ -755,8 +747,10 @@ lge_rxeof(struct lge_softc *sc, int cnt)
                                m->m_pkthdr.csum_flags |= M_UDP_CSUM_IN_OK;
                }
 
-               ether_input_mbuf(ifp, m);
+               ml_enqueue(&ml, m);
        }
+
+       if_input(ifp, &ml);
 
        sc->lge_cdata.lge_rx_cons = i;
 }
Index: dev/pci/if_nge.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_nge.c,v
retrieving revision 1.81
diff -u -p -r1.81 if_nge.c
--- dev/pci/if_nge.c    22 Dec 2014 02:28:52 -0000      1.81
+++ dev/pci/if_nge.c    7 Apr 2015 15:27:12 -0000
@@ -1002,6 +1002,7 @@ nge_newbuf(struct nge_softc *sc, struct 
 void
 nge_rxeof(struct nge_softc *sc)
 {
+       struct mbuf_list        ml = MBUF_LIST_INITIALIZER();
         struct mbuf            *m;
         struct ifnet           *ifp;
        struct nge_desc         *cur_rx;
@@ -1076,7 +1077,6 @@ nge_rxeof(struct nge_softc *sc)
                        m = m0;
 #ifndef __STRICT_ALIGNMENT
                } else {
-                       m->m_pkthdr.rcvif = ifp;
                        m->m_pkthdr.len = m->m_len = total_len;
                }
 #endif
@@ -1091,14 +1091,6 @@ nge_rxeof(struct nge_softc *sc)
                }
 #endif
 
-#if NBPFILTER > 0
-               /*
-                * Handle BPF listeners. Let the BPF user see the packet.
-                */
-               if (ifp->if_bpf)
-                       bpf_mtap_ether(ifp->if_bpf, m, BPF_DIRECTION_IN);
-#endif
-
                /* Do IP checksum checking. */
                if (extsts & NGE_RXEXTSTS_IPPKT) {
                        if (!(extsts & NGE_RXEXTSTS_IPCSUMERR))
@@ -1111,8 +1103,10 @@ nge_rxeof(struct nge_softc *sc)
                                m->m_pkthdr.csum_flags |= M_UDP_CSUM_IN_OK;
                }
 
-               ether_input_mbuf(ifp, m);
+               ml_enqueue(&ml, m);
        }
+
+       if_input(ifp, &ml);
 
        sc->nge_cdata.nge_rx_prod = i;
 }
Index: dev/pci/if_vge.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_vge.c,v
retrieving revision 1.60
diff -u -p -r1.60 if_vge.c
--- dev/pci/if_vge.c    14 Mar 2015 03:38:48 -0000      1.60
+++ dev/pci/if_vge.c    7 Apr 2015 15:27:53 -0000
@@ -983,6 +983,7 @@ vge_rx_list_init(struct vge_softc *sc)
 void
 vge_rxeof(struct vge_softc *sc)
 {
+       struct mbuf_list        ml = MBUF_LIST_INITIALIZER();
        struct mbuf             *m;
        struct ifnet            *ifp;
        int                     i, total_len;
@@ -1119,7 +1120,6 @@ vge_rxeof(struct vge_softc *sc)
                m->m_data += ETHER_ALIGN;
 #endif
                ifp->if_ipackets++;
-               m->m_pkthdr.rcvif = ifp;
 
                /* Do RX checksumming */
 
@@ -1140,16 +1140,14 @@ vge_rxeof(struct vge_softc *sc)
                }
 #endif
 
-#if NBPFILTER > 0
-               if (ifp->if_bpf)
-                       bpf_mtap_ether(ifp->if_bpf, m, BPF_DIRECTION_IN);
-#endif
-               ether_input_mbuf(ifp, m);
+               ml_enqueue(&ml, m);
 
                lim++;
                if (lim == VGE_RX_DESC_CNT)
                        break;
        }
+
+       if_input(ifp, &ml);
 
        /* Flush the RX DMA ring */
        bus_dmamap_sync(sc->sc_dmat,
Index: dev/pci/if_wb.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/if_wb.c,v
retrieving revision 1.58
diff -u -p -r1.58 if_wb.c
--- dev/pci/if_wb.c     22 Dec 2014 02:28:52 -0000      1.58
+++ dev/pci/if_wb.c     7 Apr 2015 15:28:58 -0000
@@ -922,6 +922,7 @@ wb_newbuf(sc, c)
 void wb_rxeof(sc)
        struct wb_softc         *sc;
 {
+       struct mbuf_list        ml = MBUF_LIST_INITIALIZER();
         struct ifnet           *ifp;
        struct wb_chain_onefrag *cur_rx;
        int                     total_len = 0;
@@ -947,7 +948,7 @@ void wb_rxeof(sc)
                                "bug, forcing reset\n", sc->sc_dev.dv_xname);
                        wb_fixmedia(sc);
                        wb_init(sc);
-                       return;
+                       break;
                }
 
                if (rxstat & WB_RXSTAT_RXERR) {
@@ -978,18 +979,10 @@ void wb_rxeof(sc)
 
                ifp->if_ipackets++;
 
-#if NBPFILTER > 0
-               /*
-                * Handle BPF listeners. Let the BPF user see the packet.
-                */
-               if (ifp->if_bpf)
-                       bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_IN);
-#endif
-               /* pass it on. */
-               ether_input_mbuf(ifp, m);
+               ml_enqueue(&ml, m);
        }
 
-       return;
+       if_input(ifp, &ml);
 }
 
 void wb_rxeoc(sc)
Index: dev/pcmcia/if_malo.c
===================================================================
RCS file: /cvs/src/sys/dev/pcmcia/if_malo.c,v
retrieving revision 1.82
diff -u -p -r1.82 if_malo.c
--- dev/pcmcia/if_malo.c        14 Mar 2015 03:38:49 -0000      1.82
+++ dev/pcmcia/if_malo.c        7 Apr 2015 15:31:32 -0000
@@ -925,6 +925,7 @@ cmalo_rx(struct malo_softc *sc)
        struct ieee80211com *ic = &sc->sc_ic;
        struct ifnet *ifp = &ic->ic_if;
        struct malo_rx_desc *rxdesc;
+       struct mbuf_list ml = MBUF_LIST_INITIALIZER();
        struct mbuf *m;
        uint8_t *data;
        uint16_t psize;
@@ -972,16 +973,18 @@ cmalo_rx(struct malo_softc *sc)
                return;
        }
 
-#if NBPFILTER > 0
-       if (ifp->if_bpf)
-               bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_IN);
-#endif
-
        /* push the frame up to the network stack if not in monitor mode */
        if (ic->ic_opmode != IEEE80211_M_MONITOR) {
-               ether_input_mbuf(ifp, m);
                ifp->if_ipackets++;
+               ml_enqueue(&ml, m);
+               if_input(ifp, &ml);
+#if NBPFILTER > 0
+       } else {
+               if (ifp->if_bpf)
+                       bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_IN);
+#endif
        }
+
 }
 
 void

Reply via email to