Convert moar drivers to if_input().
authormpi <mpi@openbsd.org>
Thu, 30 Apr 2015 07:51:07 +0000 (07:51 +0000)
committermpi <mpi@openbsd.org>
Thu, 30 Apr 2015 07:51:07 +0000 (07:51 +0000)
ok dlg@

12 files changed:
sys/dev/pci/if_age.c
sys/dev/pci/if_et.c
sys/dev/pci/if_ixgb.c
sys/dev/pci/if_msk.c
sys/dev/pci/if_oce.c
sys/dev/pci/if_se.c
sys/dev/pci/if_stge.c
sys/dev/pci/if_tht.c
sys/dev/pci/if_tl.c
sys/dev/pci/if_txp.c
sys/dev/pci/if_vte.c
sys/dev/pci/if_xge.c

index b81d77f..e73c408 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_age.c,v 1.26 2015/03/14 03:38:48 jsg Exp $ */
+/*     $OpenBSD: if_age.c,v 1.27 2015/04/30 07:51:07 mpi Exp $ */
 
 /*-
  * Copyright (c) 2008, Pyun YongHyeon <yongari@FreeBSD.org>
@@ -1282,6 +1282,7 @@ age_rxeof(struct age_softc *sc, struct rx_rdesc *rxrd)
        struct ifnet *ifp = &sc->sc_arpcom.ac_if;
        struct age_rxdesc *rxd;
        struct rx_desc *desc;
+       struct mbuf_list ml = MBUF_LIST_INITIALIZER();
        struct mbuf *mp, *m;
        uint32_t status, index;
        int count, nsegs, pktlen;
@@ -1368,7 +1369,6 @@ age_rxeof(struct age_softc *sc, struct rx_rdesc *rxrd)
 
                        m = sc->age_cdata.age_rxhead;
                        m->m_flags |= M_PKTHDR;
-                       m->m_pkthdr.rcvif = ifp;
                        m->m_pkthdr.len = sc->age_cdata.age_rxlen;
                        /* Set the first mbuf length. */
                        m->m_len = sc->age_cdata.age_rxlen - pktlen;
@@ -1410,19 +1410,15 @@ age_rxeof(struct age_softc *sc, struct rx_rdesc *rxrd)
                        }
 #endif
 
-#if NBPFILTER > 0
-                       if (ifp->if_bpf)
-                               bpf_mtap_ether(ifp->if_bpf, m, 
-                                   BPF_DIRECTION_IN);
-#endif
-                       /* Pass it on. */
-                       ether_input_mbuf(ifp, m);
+                       ml_enqueue(&ml, m);
 
                        /* Reset mbuf chains. */
                        AGE_RXCHAIN_RESET(sc);
                }
        }
 
+       if_input(ifp, &ml);
+
        if (count != nsegs) {
                sc->age_cdata.age_rx_cons += nsegs;
                sc->age_cdata.age_rx_cons %= AGE_RX_RING_CNT;
index eb4ffcc..7e63cea 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_et.c,v 1.26 2015/03/14 03:38:48 jsg Exp $  */
+/*     $OpenBSD: if_et.c,v 1.27 2015/04/30 07:51:07 mpi Exp $  */
 /*
  * Copyright (c) 2007 The DragonFly Project.  All rights reserved.
  * 
@@ -1677,6 +1677,7 @@ void
 et_rxeof(struct et_softc *sc)
 {
        struct ifnet *ifp = &sc->sc_arpcom.ac_if;
+       struct mbuf_list ml = MBUF_LIST_INITIALIZER();
        struct et_rxstatus_data *rxsd = &sc->sc_rx_status;
        struct et_rxstat_ring *rxst_ring = &sc->sc_rxstat_ring;
        uint32_t rxs_stat_ring;
@@ -1744,16 +1745,8 @@ et_rxeof(struct et_softc *sc)
                        } else {
                                m->m_pkthdr.len = m->m_len = buflen -
                                    ETHER_CRC_LEN;
-                               m->m_pkthdr.rcvif = ifp;
-
-#if NBPFILTER > 0
-                               if (ifp->if_bpf != NULL)
-                                       bpf_mtap(ifp->if_bpf, m,
-                                           BPF_DIRECTION_IN);
-#endif
-
+                               ml_enqueue(&ml, m);
                                ifp->if_ipackets++;
-                               ether_input_mbuf(ifp, m);
                        }
                } else {
                        ifp->if_ierrors++;
@@ -1777,6 +1770,8 @@ et_rxeof(struct et_softc *sc)
                        rxring_pos |= ET_RX_RING_POS_WRAP;
                CSR_WRITE_4(sc, rx_ring->rr_posreg, rxring_pos);
        }
+
+       if_input(ifp, &ml);
 }
 
 int
index 9d238f3..a6e54d0 100644 (file)
@@ -31,7 +31,7 @@ POSSIBILITY OF SUCH DAMAGE.
 
 ***************************************************************************/
 
-/* $OpenBSD: if_ixgb.c,v 1.63 2014/12/22 02:28:52 tedu Exp $ */
+/* $OpenBSD: if_ixgb.c,v 1.64 2015/04/30 07:51:07 mpi Exp $ */
 
 #include <dev/pci/if_ixgb.h>
 
@@ -1705,6 +1705,7 @@ void
 ixgb_rxeof(struct ixgb_softc *sc, int count)
 {
        struct ifnet   *ifp;
+       struct mbuf_list ml = MBUF_LIST_INITIALIZER();
        struct mbuf    *mp;
        int             eop = 0;
        int             len;
@@ -1769,7 +1770,6 @@ ixgb_rxeof(struct ixgb_softc *sc, int count)
 
                        if (eop) {
                                eop_desc = i;
-                               sc->fmp->m_pkthdr.rcvif = ifp;
                                ifp->if_ipackets++;
                                ixgb_receive_checksum(sc, current_desc, sc->fmp);
 
@@ -1781,17 +1781,8 @@ ixgb_rxeof(struct ixgb_softc *sc, int count)
                                }
 #endif
 
-#if NBPFILTER > 0
-                               /*
-                                * Handle BPF listeners. Let the BPF
-                                * user see the packet.
-                                */
-                               if (ifp->if_bpf)
-                                       bpf_mtap_ether(ifp->if_bpf, sc->fmp,
-                                           BPF_DIRECTION_IN);
-#endif
 
-                               ether_input_mbuf(ifp, sc->fmp);
+                               ml_enqueue(&ml, sc->fmp);
                                sc->fmp = NULL;
                                sc->lmp = NULL;
                        }
@@ -1860,6 +1851,8 @@ ixgb_rxeof(struct ixgb_softc *sc, int count)
                 next_to_use = (sc->num_rx_desc - 1);
         /* Advance the IXGB's Receive Queue #0  "Tail Pointer" */
         IXGB_WRITE_REG(&sc->hw, RDT, next_to_use);
+
+       if_input(ifp, &ml);
 }
 
 /*********************************************************************
index 0b6866c..cde67d0 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_msk.c,v 1.113 2015/03/14 03:38:48 jsg Exp $        */
+/*     $OpenBSD: if_msk.c,v 1.114 2015/04/30 07:51:07 mpi Exp $        */
 
 /*
  * Copyright (c) 1997, 1998, 1999, 2000
@@ -1628,6 +1628,7 @@ msk_rxeof(struct sk_if_softc *sc_if, u_int16_t len, u_int32_t rxstat)
 {
        struct sk_softc         *sc = sc_if->sk_softc;
        struct ifnet            *ifp = &sc_if->arpcom.ac_if;
+       struct mbuf_list        ml = MBUF_LIST_INITIALIZER();
        struct mbuf             *m;
        struct sk_chain         *cur_rx;
        int                     i, cur, total_len = len;
@@ -1665,18 +1666,12 @@ msk_rxeof(struct sk_if_softc *sc_if, u_int16_t len, u_int32_t rxstat)
                return;
        }
 
-       m->m_pkthdr.rcvif = ifp;
        m->m_pkthdr.len = m->m_len = total_len;
 
+       ml_enqueue(&ml, m);
        ifp->if_ipackets++;
 
-#if NBPFILTER > 0
-       if (ifp->if_bpf)
-               bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_IN);
-#endif
-
-       /* pass it on. */
-       ether_input_mbuf(ifp, m);
+       if_input(ifp, &ml);
 }
 
 void
index 6e6f793..b77aebb 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_oce.c,v 1.82 2015/03/14 03:38:48 jsg Exp $ */
+/*     $OpenBSD: if_oce.c,v 1.83 2015/04/30 07:51:07 mpi Exp $ */
 
 /*
  * Copyright (c) 2012 Mike Belopuhov
@@ -1547,6 +1547,7 @@ oce_rxeof(struct oce_rq *rq, struct oce_nic_rx_cqe *cqe)
        struct oce_softc *sc = rq->sc;
        struct oce_pkt *pkt = NULL;
        struct ifnet *ifp = &sc->sc_ac.ac_if;
+       struct mbuf_list ml = MBUF_LIST_INITIALIZER();
        struct mbuf *m = NULL, *tail = NULL;
        int i, len, frag_len;
        uint16_t vtag;
@@ -1606,8 +1607,6 @@ oce_rxeof(struct oce_rq *rq, struct oce_nic_rx_cqe *cqe)
                         goto exit;
                }
 
-               m->m_pkthdr.rcvif = ifp;
-
 #if NVLAN > 0
                /* This determines if vlan tag is valid */
                if (oce_vtp_valid(sc, cqe)) {
@@ -1645,15 +1644,10 @@ oce_rxeof(struct oce_rq *rq, struct oce_nic_rx_cqe *cqe)
                }
 #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);
        }
 exit:
-       return;
+       if_input(ifp, &ml);
 }
 
 void
index bd1e51e..d4cce3e 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_se.c,v 1.11 2015/03/14 03:38:48 jsg Exp $  */
+/*     $OpenBSD: if_se.c,v 1.12 2015/04/30 07:51:07 mpi Exp $  */
 
 /*-
  * Copyright (c) 2009, 2010 Christopher Zimmermann <madroach@zakweb.de>
@@ -909,6 +909,7 @@ void
 se_rxeof(struct se_softc *sc)
 {
        struct mbuf *m;
+       struct mbuf_list ml = MBUF_LIST_INITIALIZER();
        struct ifnet *ifp = &sc->sc_ac.ac_if;
        struct se_list_data *ld = &sc->se_ldata;
        struct se_chain_data *cd = &sc->se_cdata;
@@ -960,16 +961,12 @@ se_rxeof(struct se_softc *sc)
                m->m_pkthdr.len = m->m_len =
                    SE_RX_BYTES(rxstat) - SE_RX_PAD_BYTES;
 
+               ml_enqueue(&ml, m);
                ifp->if_ipackets++;
-               m->m_pkthdr.rcvif = ifp;
-
-#if NBPFILTER > 0
-               if (ifp->if_bpf)
-                       bpf_mtap(ifp->if_bpf, m, BPF_DIRECTION_IN);
-#endif
-               ether_input_mbuf(ifp, m);
        }
 
+       if_input(ifp, &ml);
+
        cd->se_rx_prod = i;
 }
 
index d9bec72..5afbe34 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_stge.c,v 1.59 2015/03/14 03:38:48 jsg Exp $        */
+/*     $OpenBSD: if_stge.c,v 1.60 2015/04/30 07:51:07 mpi Exp $        */
 /*     $NetBSD: if_stge.c,v 1.27 2005/05/16 21:35:32 bouyer Exp $      */
 
 /*-
@@ -854,6 +854,7 @@ stge_rxintr(struct stge_softc *sc)
        struct ifnet *ifp = &sc->sc_arpcom.ac_if;
        struct stge_descsoft *ds;
        struct mbuf *m, *tailm;
+       struct mbuf_list ml = MBUF_LIST_INITIALIZER();
        uint64_t status;
        int i, len;
 
@@ -992,24 +993,15 @@ stge_rxintr(struct stge_softc *sc)
                }
 #endif
 
-               m->m_pkthdr.rcvif = ifp;
                m->m_pkthdr.len = len;
 
-#if NBPFILTER > 0
-               /*
-                * Pass this up to any BPF listeners, but only
-                * pass if up the stack if it's for us.
-                */
-               if (ifp->if_bpf)
-                       bpf_mtap_ether(ifp->if_bpf, m, BPF_DIRECTION_IN);
-#endif /* NBPFILTER > 0 */
-
-               /* Pass it on. */
-               ether_input_mbuf(ifp, m);
+               ml_enqueue(&ml, m);
        }
 
        /* Update the receive pointer. */
        sc->sc_rxptr = i;
+
+       if_input(ifp, &ml);
 }
 
 /*
index 71f533c..56c6ffa 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_tht.c,v 1.130 2015/03/14 03:38:48 jsg Exp $ */
+/*     $OpenBSD: if_tht.c,v 1.131 2015/04/30 07:51:07 mpi Exp $ */
 
 /*
  * Copyright (c) 2007 David Gwynne <dlg@openbsd.org>
@@ -1333,6 +1333,7 @@ tht_rxd(struct tht_softc *sc)
        struct tht_rx_desc              rxd;
        struct tht_pkt                  *pkt;
        struct mbuf                     *m;
+       struct mbuf_list                ml = MBUF_LIST_INITIALIZER();
        int                             bc;
        u_int32_t                       flags;
 
@@ -1356,17 +1357,11 @@ tht_rxd(struct tht_softc *sc)
                bus_dmamap_unload(dmat, dmap);
 
                m = pkt->tp_m;
-               m->m_pkthdr.rcvif = ifp;
                m->m_pkthdr.len = m->m_len = letoh16(rxd.len);
 
                /* XXX process type 3 rx descriptors */
 
-#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);
 
                tht_pkt_put(&sc->sc_rx_list, pkt);
 
@@ -1383,6 +1378,8 @@ tht_rxd(struct tht_softc *sc)
 
        tht_fifo_post(sc, &sc->sc_rxd);
 
+       if_input(ifp, &ml);
+
        /* put more pkts on the fifo */
        tht_rxf_fill(sc, 0);
 }
index 36b9e7a..499ca6a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_tl.c,v 1.62 2015/04/01 14:29:54 mpi Exp $  */
+/*     $OpenBSD: if_tl.c,v 1.63 2015/04/30 07:51:07 mpi Exp $  */
 
 /*
  * Copyright (c) 1997, 1998
@@ -1031,6 +1031,7 @@ tl_intvec_rxeof(void *xsc, u_int32_t type)
        int                     r = 0, total_len = 0;
        struct ether_header     *eh;
        struct mbuf             *m;
+       struct mbuf_list        ml = MBUF_LIST_INITIALIZER();
        struct ifnet            *ifp;
        struct tl_chain_onefrag *cur_rx;
 
@@ -1060,7 +1061,6 @@ tl_intvec_rxeof(void *xsc, u_int32_t type)
                sc->tl_cdata.tl_rx_tail = cur_rx;
 
                eh = mtod(m, struct ether_header *);
-               m->m_pkthdr.rcvif = ifp;
 
                /*
                 * Note: when the ThunderLAN chip is in 'capture all
@@ -1076,14 +1076,11 @@ tl_intvec_rxeof(void *xsc, u_int32_t type)
                }
 
                m->m_pkthdr.len = m->m_len = total_len;
-#if NBPFILTER > 0
-               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);
        }
 
+       if_input(ifp, &ml);
+
        return(r);
 }
 
index 1daf695..2ac4928 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_txp.c,v 1.114 2015/03/14 03:38:48 jsg Exp $        */
+/*     $OpenBSD: if_txp.c,v 1.115 2015/04/30 07:51:07 mpi Exp $        */
 
 /*
  * Copyright (c) 2001
@@ -602,6 +602,7 @@ txp_rx_reclaim(struct txp_softc *sc, struct txp_rx_ring *r,
        struct ifnet *ifp = &sc->sc_arpcom.ac_if;
        struct txp_rx_desc *rxd;
        struct mbuf *m;
+       struct mbuf_list ml = MBUF_LIST_INITIALIZER();
        struct txp_swdesc *sd;
        u_int32_t roff, woff;
        int idx;
@@ -659,7 +660,6 @@ txp_rx_reclaim(struct txp_softc *sc, struct txp_rx_ring *r,
                                        goto next;
                                }
                        }
-                       mnew->m_pkthdr.rcvif = ifp;
                        mnew->m_pkthdr.len = mnew->m_len = m->m_len;
                        mnew->m_data += 2;
                        bcopy(m->m_data, mnew->m_data, m->m_len);
@@ -680,14 +680,6 @@ txp_rx_reclaim(struct txp_softc *sc, struct txp_rx_ring *r,
                }
 #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
-
                if (rxd->rx_stat & htole32(RX_STAT_IPCKSUMBAD))
                        sumflags |= M_IPV4_CSUM_IN_BAD;
                else if (rxd->rx_stat & htole32(RX_STAT_IPCKSUMGOOD))
@@ -705,7 +697,7 @@ txp_rx_reclaim(struct txp_softc *sc, struct txp_rx_ring *r,
 
                m->m_pkthdr.csum_flags = sumflags;
 
-               ether_input_mbuf(ifp, m);
+               ml_enqueue(&ml, m);
 
 next:
                bus_dmamap_sync(sc->sc_dmat, dma->dma_map,
@@ -724,13 +716,14 @@ next:
                woff = letoh32(*r->r_woff);
        }
 
+       if_input(ifp, &ml);
+
        *r->r_roff = htole32(woff);
 }
 
 void
 txp_rxbuf_reclaim(struct txp_softc *sc)
 {
-       struct ifnet *ifp = &sc->sc_arpcom.ac_if;
        struct txp_hostvar *hv = sc->sc_hostvar;
        struct txp_rxbuf_desc *rbd;
        struct txp_swdesc *sd;
@@ -757,7 +750,6 @@ txp_rxbuf_reclaim(struct txp_softc *sc)
                MCLGET(sd->sd_mbuf, M_DONTWAIT);
                if ((sd->sd_mbuf->m_flags & M_EXT) == 0)
                        goto err_mbuf;
-               sd->sd_mbuf->m_pkthdr.rcvif = ifp;
                sd->sd_mbuf->m_pkthdr.len = sd->sd_mbuf->m_len = MCLBYTES;
                if (bus_dmamap_create(sc->sc_dmat, TXP_MAX_PKTLEN, 1,
                    TXP_MAX_PKTLEN, 0, BUS_DMA_NOWAIT, &sd->sd_map))
@@ -862,7 +854,6 @@ txp_tx_reclaim(struct txp_softc *sc, struct txp_tx_ring *r,
 int
 txp_alloc_rings(struct txp_softc *sc)
 {
-       struct ifnet *ifp = &sc->sc_arpcom.ac_if;
        struct txp_boot_record *boot;
        struct txp_swdesc *sd;
        u_int32_t r;
@@ -1024,7 +1015,6 @@ txp_alloc_rings(struct txp_softc *sc)
                        goto bail_rxbufring;
                }
                sd->sd_mbuf->m_pkthdr.len = sd->sd_mbuf->m_len = MCLBYTES;
-               sd->sd_mbuf->m_pkthdr.rcvif = ifp;
                if (bus_dmamap_create(sc->sc_dmat, TXP_MAX_PKTLEN, 1,
                    TXP_MAX_PKTLEN, 0, BUS_DMA_NOWAIT, &sd->sd_map)) {
                        goto bail_rxbufring;
index eb34e09..a226b8a 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_vte.c,v 1.11 2014/12/22 02:28:52 tedu Exp $        */
+/*     $OpenBSD: if_vte.c,v 1.12 2015/04/30 07:51:07 mpi Exp $ */
 /*-
  * Copyright (c) 2010, Pyun YongHyeon <yongari@FreeBSD.org>
  * All rights reserved.
@@ -1000,6 +1000,7 @@ vte_rxeof(struct vte_softc *sc)
        struct ifnet *ifp = &sc->sc_arpcom.ac_if;
        struct vte_rxdesc *rxd;
        struct mbuf *m;
+       struct mbuf_list ml = MBUF_LIST_INITIALIZER();
        uint16_t status, total_len;
        int cons, prog;
 
@@ -1033,16 +1034,11 @@ vte_rxeof(struct vte_softc *sc)
                 * It seems there is no way to strip FCS bytes.
                 */
                m->m_pkthdr.len = m->m_len = total_len - ETHER_CRC_LEN;
-               m->m_pkthdr.rcvif = ifp;
-
-#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);
        }
 
+       if_input(ifp, &ml);
+
        if (prog > 0) {
                /* Update the consumer index. */
                sc->vte_cdata.vte_rx_cons = cons;
index 6d9310c..94d3de6 100644 (file)
@@ -1,4 +1,4 @@
-/*     $OpenBSD: if_xge.c,v 1.60 2015/03/14 03:38:48 jsg Exp $ */
+/*     $OpenBSD: if_xge.c,v 1.61 2015/04/30 07:51:07 mpi Exp $ */
 /*     $NetBSD: if_xge.c,v 1.1 2005/09/09 10:30:27 ragge Exp $ */
 
 /*
@@ -804,6 +804,7 @@ xge_intr(void *pv)
        struct xge_softc *sc = pv;
        struct txd *txd;
        struct ifnet *ifp = &sc->sc_arpcom.ac_if;
+       struct mbuf_list ml = MBUF_LIST_INITIALIZER();
        bus_dmamap_t dmp;
        uint64_t val;
        int i, lasttx, plen;
@@ -892,7 +893,6 @@ xge_intr(void *pv)
                plen += m->m_next->m_next->m_next->m_next->m_len =
                    RXD_CTL3_BUF4SIZ(rxd->rxd_control3);
 #endif
-               m->m_pkthdr.rcvif = ifp;
                m->m_pkthdr.len = plen;
 
                val = rxd->rxd_control1;
@@ -928,17 +928,14 @@ xge_intr(void *pv)
                }
 #endif
 
-#if NBPFILTER > 0
-               if (ifp->if_bpf)
-                       bpf_mtap_ether(ifp->if_bpf, m, BPF_DIRECTION_IN);
-#endif /* NBPFILTER > 0 */
-
-               ether_input_mbuf(ifp, m);
+               ml_enqueue(&ml, m);
 
                if (++sc->sc_nextrx == NRXREAL)
                        sc->sc_nextrx = 0;
        }
 
+       if_input(ifp, &ml);
+
        return (1);
 }