Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys Introduce softint-based if_input



details:   https://anonhg.NetBSD.org/src/rev/639986dfe246
branches:  trunk
changeset: 343507:639986dfe246
user:      ozaki-r <ozaki-r%NetBSD.org@localhost>
date:      Tue Feb 09 08:32:07 2016 +0000

description:
Introduce softint-based if_input

This change intends to run the whole network stack in softint context
(or normal LWP), not hardware interrupt context. Note that the work is
still incomplete by this change; to that end, we also have to softint-ify
if_link_state_change (and bpf) which can still run in hardware interrupt.

This change softint-ifies at ifp->if_input that is called from
each device driver (and ieee80211_input) to ensure Layer 2 runs
in softint (e.g., ether_input and bridge_input). To this end,
we provide a framework (called percpuq) that utlizes softint(9)
and percpu ifqueues. With this patch, rxintr of most drivers just
queues received packets and schedules a softint, and the softint
dequeues packets and does rest packet processing.

To minimize changes to each driver, percpuq is allocated in struct
ifnet for now and that is initialized by default (in if_attach).
We probably have to move percpuq to softc of each driver, but it's
future work. At this point, only wm(4) has percpuq in its softc
as a reference implementation.

Additional information including performance numbers can be found
in the thread at tech-kern@ and tech-net@:
http://mail-index.netbsd.org/tech-kern/2016/01/14/msg019997.html

Acknowledgment: riastradh@ greatly helped this work.
Thank you very much!

diffstat:

 sys/arch/acorn32/podulebus/if_ie.c       |    6 +-
 sys/arch/amiga/dev/if_es.c               |    6 +-
 sys/arch/amiga/dev/if_qn.c               |    6 +-
 sys/arch/arm/allwinner/awin_eth.c        |    4 +-
 sys/arch/arm/at91/at91emac.c             |    8 +-
 sys/arch/arm/broadcom/bcm53xx_eth.c      |    9 +-
 sys/arch/arm/ep93xx/epe.c                |    7 +-
 sys/arch/arm/gemini/gemini_gmac.c        |    6 +-
 sys/arch/arm/gemini/if_gpn.c             |    6 +-
 sys/arch/arm/imx/if_enet.c               |    6 +-
 sys/arch/arm/omap/if_cpsw.c              |    6 +-
 sys/arch/arm/omap/omapl1x_emac.c         |    4 +-
 sys/arch/arm/rockchip/rockchip_emac.c    |    6 +-
 sys/arch/arm/xscale/ixp425_if_npe.c      |    6 +-
 sys/arch/emips/ebus/if_le_ebus.c         |    6 +-
 sys/arch/evbppc/virtex/dev/if_temac.c    |    6 +-
 sys/arch/mac68k/dev/if_mc.c              |    6 +-
 sys/arch/mac68k/nubus/if_netdock_nubus.c |    6 +-
 sys/arch/macppc/dev/am79c950.c           |    6 +-
 sys/arch/macppc/dev/if_bm.c              |    6 +-
 sys/arch/macppc/dev/if_gm.c              |    6 +-
 sys/arch/mips/adm5120/dev/if_admsw.c     |    6 +-
 sys/arch/mips/alchemy/dev/if_aumac.c     |    6 +-
 sys/arch/mips/atheros/dev/if_ae.c        |    6 +-
 sys/arch/mips/cavium/dev/if_cnmac.c      |   10 +-
 sys/arch/mips/ralink/ralink_eth.c        |    6 +-
 sys/arch/mips/sibyte/dev/sbmac.c         |    6 +-
 sys/arch/newsmips/apbus/if_sn.c          |    6 +-
 sys/arch/next68k/dev/mb8795.c            |    6 +-
 sys/arch/playstation2/dev/if_smap.c      |    6 +-
 sys/arch/powerpc/booke/dev/pq3etsec.c    |    6 +-
 sys/arch/powerpc/ibm4xx/dev/if_emac.c    |    6 +-
 sys/arch/sgimips/hpc/if_sq.c             |    6 +-
 sys/arch/sgimips/mace/if_mec.c           |    6 +-
 sys/arch/sun2/dev/if_ec.c                |    6 +-
 sys/arch/sun3/dev/if_ie.c                |    6 +-
 sys/arch/usermode/dev/if_veth.c          |    9 +-
 sys/arch/x86/pci/if_vmx.c                |    6 +-
 sys/arch/xen/xen/if_xennet_xenbus.c      |    6 +-
 sys/arch/xen/xen/xennetback_xenbus.c     |    6 +-
 sys/dev/bi/if_ni.c                       |    6 +-
 sys/dev/cadence/if_cemac.c               |    7 +-
 sys/dev/ic/aic6915.c                     |    6 +-
 sys/dev/ic/cs89x0.c                      |    6 +-
 sys/dev/ic/dm9000.c                      |    4 +-
 sys/dev/ic/dp8390.c                      |    6 +-
 sys/dev/ic/dp83932.c                     |    6 +-
 sys/dev/ic/dwc_gmac.c                    |    6 +-
 sys/dev/ic/elink3.c                      |    6 +-
 sys/dev/ic/elinkxl.c                     |    6 +-
 sys/dev/ic/gem.c                         |    6 +-
 sys/dev/ic/hme.c                         |    6 +-
 sys/dev/ic/i82557.c                      |    6 +-
 sys/dev/ic/i82586.c                      |    6 +-
 sys/dev/ic/i82596.c                      |    6 +-
 sys/dev/ic/lan9118.c                     |    6 +-
 sys/dev/ic/lance.c                       |    6 +-
 sys/dev/ic/lemac.c                       |    6 +-
 sys/dev/ic/mb86950.c                     |    6 +-
 sys/dev/ic/mb86960.c                     |    6 +-
 sys/dev/ic/mtd803.c                      |    6 +-
 sys/dev/ic/pdq_ifsubr.c                  |    6 +-
 sys/dev/ic/rrunner.c                     |    6 +-
 sys/dev/ic/rtl8169.c                     |    6 +-
 sys/dev/ic/rtl81x9.c                     |    6 +-
 sys/dev/ic/seeq8005.c                    |    6 +-
 sys/dev/ic/sgec.c                        |    6 +-
 sys/dev/ic/smc83c170.c                   |    6 +-
 sys/dev/ic/smc90cx6.c                    |    6 +-
 sys/dev/ic/smc91cxx.c                    |    6 +-
 sys/dev/ic/tropic.c                      |    6 +-
 sys/dev/ic/tulip.c                       |    6 +-
 sys/dev/if_ndis/if_ndis.c                |    6 +-
 sys/dev/isa/if_eg.c                      |    6 +-
 sys/dev/isa/if_el.c                      |    6 +-
 sys/dev/isa/if_iy.c                      |    6 +-
 sys/dev/marvell/if_gfe.c                 |    6 +-
 sys/dev/marvell/if_mvgbe.c               |    6 +-
 sys/dev/marvell/if_mvxpe.c               |    6 +-
 sys/dev/ofw/ofnet.c                      |    6 +-
 sys/dev/pci/cxgb/cxgb_sge.c              |    4 +-
 sys/dev/pci/if_age.c                     |    6 +-
 sys/dev/pci/if_alc.c                     |    4 +-
 sys/dev/pci/if_ale.c                     |    6 +-
 sys/dev/pci/if_bce.c                     |    6 +-
 sys/dev/pci/if_bge.c                     |    6 +-
 sys/dev/pci/if_bnx.c                     |    6 +-
 sys/dev/pci/if_cas.c                     |    8 +-
 sys/dev/pci/if_de.c                      |    8 +-
 sys/dev/pci/if_dge.c                     |    6 +-
 sys/dev/pci/if_et.c                      |    6 +-
 sys/dev/pci/if_iwm.c                     |    6 +-
 sys/dev/pci/if_jme.c                     |    6 +-
 sys/dev/pci/if_kse.c                     |    6 +-
 sys/dev/pci/if_lii.c                     |    6 +-
 sys/dev/pci/if_lmc.c                     |    6 +-
 sys/dev/pci/if_msk.c                     |    6 +-
 sys/dev/pci/if_nfe.c                     |    6 +-
 sys/dev/pci/if_pcn.c                     |    6 +-
 sys/dev/pci/if_rtwn.c                    |    6 +-
 sys/dev/pci/if_sip.c                     |    8 +-
 sys/dev/pci/if_sk.c                      |    6 +-
 sys/dev/pci/if_ste.c                     |    6 +-
 sys/dev/pci/if_stge.c                    |    6 +-
 sys/dev/pci/if_ti.c                      |    6 +-
 sys/dev/pci/if_tl.c                      |    6 +-
 sys/dev/pci/if_txp.c                     |    6 +-
 sys/dev/pci/if_vge.c                     |    6 +-
 sys/dev/pci/if_vioif.c                   |    6 +-
 sys/dev/pci/if_vr.c                      |    6 +-
 sys/dev/pci/if_vte.c                     |    6 +-
 sys/dev/pci/if_wm.c                      |   14 +-
 sys/dev/pci/if_xge.c                     |    6 +-
 sys/dev/pci/ixgbe/ixgbe.c                |   17 ++-
 sys/dev/pci/ixgbe/ixv.c                  |    4 +-
 sys/dev/pcmcia/if_cnw.c                  |    6 +-
 sys/dev/pcmcia/if_malo_pcmcia.c          |    6 +-
 sys/dev/pcmcia/if_ray.c                  |    6 +-
 sys/dev/pcmcia/if_xi.c                   |    6 +-
 sys/dev/qbus/if_de.c                     |    6 +-
 sys/dev/qbus/if_il.c                     |    6 +-
 sys/dev/qbus/if_qe.c                     |    6 +-
 sys/dev/qbus/if_qt.c                     |    6 +-
 sys/dev/sbus/be.c                        |    6 +-
 sys/dev/sbus/qe.c                        |    6 +-
 sys/dev/scsipi/if_se.c                   |    9 +-
 sys/dev/usb/if_aue.c                     |    6 +-
 sys/dev/usb/if_axe.c                     |    6 +-
 sys/dev/usb/if_axen.c                    |    6 +-
 sys/dev/usb/if_cdce.c                    |    6 +-
 sys/dev/usb/if_cue.c                     |    6 +-
 sys/dev/usb/if_kue.c                     |    6 +-
 sys/dev/usb/if_smsc.c                    |    4 +-
 sys/dev/usb/if_udav.c                    |    6 +-
 sys/dev/usb/if_upl.c                     |   11 +-
 sys/dev/usb/if_url.c                     |    6 +-
 sys/dev/usb/if_urndis.c                  |    6 +-
 sys/net/agr/if_agr.c                     |    6 +-
 sys/net/bpf.c                            |    6 +-
 sys/net/if.c                             |  161 ++++++++++++++++++++++++++++++-
 sys/net/if.h                             |   16 ++-
 sys/net/if_atmsubr.c                     |    8 +-
 sys/net/if_bridge.c                      |   15 +-
 sys/net/if_ethersubr.c                   |    9 +-
 sys/net/if_fddisubr.c                    |    6 +-
 sys/net/if_hippisubr.c                   |    6 +-
 sys/net/if_mpls.c                        |    6 +-
 sys/net/if_tap.c                         |    6 +-
 sys/net/if_tokensubr.c                   |    6 +-
 sys/net/if_vlan.c                        |    9 +-
 sys/net80211/ieee80211_input.c           |   12 +-
 sys/netinet/ip_etherip.c                 |    6 +-
 sys/netinet6/ip6_etherip.c               |    6 +-
 sys/rump/net/lib/libshmif/if_shmem.c     |    9 +-
 sys/rump/net/lib/libvirtif/if_virt.c     |    9 +-
 155 files changed, 680 insertions(+), 477 deletions(-)

diffs (truncated from 4607 to 300 lines):

diff -r 4c4d2bc500aa -r 639986dfe246 sys/arch/acorn32/podulebus/if_ie.c
--- a/sys/arch/acorn32/podulebus/if_ie.c        Mon Feb 08 21:08:03 2016 +0000
+++ b/sys/arch/acorn32/podulebus/if_ie.c        Tue Feb 09 08:32:07 2016 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_ie.c,v 1.35 2015/05/20 09:17:17 ozaki-r Exp $ */
+/* $NetBSD: if_ie.c,v 1.36 2016/02/09 08:32:07 ozaki-r Exp $ */
 
 /*
  * Copyright (c) 1995 Melvin Tang-Richardson.
@@ -53,7 +53,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ie.c,v 1.35 2015/05/20 09:17:17 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ie.c,v 1.36 2016/02/09 08:32:07 ozaki-r Exp $");
 
 #define IGNORE_ETHER1_IDROM_CHECKSUM
 
@@ -1282,7 +1282,7 @@
 
     bpf_mtap(ifp, m);
 
-    (*ifp->if_input)(ifp, m);
+    if_percpuq_enqueue(ifp->if_percpuq, m);
 }
 
 void
diff -r 4c4d2bc500aa -r 639986dfe246 sys/arch/amiga/dev/if_es.c
--- a/sys/arch/amiga/dev/if_es.c        Mon Feb 08 21:08:03 2016 +0000
+++ b/sys/arch/amiga/dev/if_es.c        Tue Feb 09 08:32:07 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_es.c,v 1.53 2015/05/20 09:17:17 ozaki-r Exp $ */
+/*     $NetBSD: if_es.c,v 1.54 2016/02/09 08:32:07 ozaki-r Exp $ */
 
 /*
  * Copyright (c) 1995 Michael L. Hitch
@@ -33,7 +33,7 @@
 #include "opt_ns.h"
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_es.c,v 1.53 2015/05/20 09:17:17 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_es.c,v 1.54 2016/02/09 08:32:07 ozaki-r Exp $");
 
 
 #include <sys/param.h>
@@ -721,7 +721,7 @@
         * the raw packet to bpf.
         */
        bpf_mtap(ifp, top);
-       (*ifp->if_input)(ifp, top);
+       if_percpuq_enqueue(ifp->if_percpuq, top);
 #ifdef ESDEBUG
        if (--sc->sc_smcbusy) {
                printf("%s: esintr busy on exit\n", device_xname(sc->sc_dev));
diff -r 4c4d2bc500aa -r 639986dfe246 sys/arch/amiga/dev/if_qn.c
--- a/sys/arch/amiga/dev/if_qn.c        Mon Feb 08 21:08:03 2016 +0000
+++ b/sys/arch/amiga/dev/if_qn.c        Tue Feb 09 08:32:07 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_qn.c,v 1.40 2015/05/20 09:17:17 ozaki-r Exp $ */
+/*     $NetBSD: if_qn.c,v 1.41 2016/02/09 08:32:07 ozaki-r Exp $ */
 
 /*
  * Copyright (c) 1995 Mika Kortelainen
@@ -66,7 +66,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_qn.c,v 1.40 2015/05/20 09:17:17 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_qn.c,v 1.41 2016/02/09 08:32:07 ozaki-r Exp $");
 
 #include "qn.h"
 #if NQN > 0
@@ -585,7 +585,7 @@
        /* Tap off BPF listeners */
        bpf_mtap(ifp, head);
 
-       (*ifp->if_input)(ifp, head);
+       if_percpuq_enqueue(ifp->if_percpuq, head);
        return;
 
 bad:
diff -r 4c4d2bc500aa -r 639986dfe246 sys/arch/arm/allwinner/awin_eth.c
--- a/sys/arch/arm/allwinner/awin_eth.c Mon Feb 08 21:08:03 2016 +0000
+++ b/sys/arch/arm/allwinner/awin_eth.c Tue Feb 09 08:32:07 2016 +0000
@@ -31,7 +31,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: awin_eth.c,v 1.9 2015/04/13 21:18:40 riastradh Exp $");
+__KERNEL_RCSID(1, "$NetBSD: awin_eth.c,v 1.10 2016/02/09 08:32:07 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -422,7 +422,7 @@
 {
        struct ifnet * const ifp = &sc->sc_ec.ec_if;
 
-       (*ifp->if_input)(ifp, m);
+       if_percpuq_enqueue(ifp->if_percpuq, m);
 }
 
 static void
diff -r 4c4d2bc500aa -r 639986dfe246 sys/arch/arm/at91/at91emac.c
--- a/sys/arch/arm/at91/at91emac.c      Mon Feb 08 21:08:03 2016 +0000
+++ b/sys/arch/arm/at91/at91emac.c      Tue Feb 09 08:32:07 2016 +0000
@@ -1,5 +1,5 @@
-/*     $Id: at91emac.c,v 1.15 2015/09/21 13:31:30 skrll Exp $  */
-/*     $NetBSD: at91emac.c,v 1.15 2015/09/21 13:31:30 skrll Exp $      */
+/*     $Id: at91emac.c,v 1.16 2016/02/09 08:32:07 ozaki-r Exp $        */
+/*     $NetBSD: at91emac.c,v 1.16 2016/02/09 08:32:07 ozaki-r Exp $    */
 
 /*
  * Copyright (c) 2007 Embedtronics Oy
@@ -33,7 +33,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: at91emac.c,v 1.15 2015/09/21 13:31:30 skrll Exp $");
+__KERNEL_RCSID(0, "$NetBSD: at91emac.c,v 1.16 2016/02/09 08:32:07 ozaki-r Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -284,7 +284,7 @@
                                        sc->rxq[bi].m->m_len = fl;
                                bpf_mtap(ifp, sc->rxq[bi].m);
                                DPRINTFN(2,("received %u bytes packet\n", fl));
-                                (*ifp->if_input)(ifp, sc->rxq[bi].m);
+                               if_percpuq_enqueue(ifp->if_percpuq, sc->rxq[bi].m);
                                if (mtod(m, intptr_t) & 3) {
                                        m_adj(m, mtod(m, intptr_t) & 3);
                                }
diff -r 4c4d2bc500aa -r 639986dfe246 sys/arch/arm/broadcom/bcm53xx_eth.c
--- a/sys/arch/arm/broadcom/bcm53xx_eth.c       Mon Feb 08 21:08:03 2016 +0000
+++ b/sys/arch/arm/broadcom/bcm53xx_eth.c       Tue Feb 09 08:32:07 2016 +0000
@@ -35,7 +35,7 @@
 
 #include <sys/cdefs.h>
 
-__KERNEL_RCSID(1, "$NetBSD: bcm53xx_eth.c,v 1.26 2014/02/23 21:19:06 matt Exp $");
+__KERNEL_RCSID(1, "$NetBSD: bcm53xx_eth.c,v 1.27 2016/02/09 08:32:08 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/atomic.h>
@@ -401,8 +401,9 @@
        /*
         * Attach the interface.
         */
-       if_attach(ifp);
+       if_initialize(ifp);
        ether_ifattach(ifp, sc->sc_enaddr);
+       if_register(ifp);
 
 #ifdef BCMETH_COUNTERS
        evcnt_attach_dynamic(&sc->sc_ev_intr, EVCNT_TYPE_INTR,
@@ -1020,12 +1021,12 @@
         */
 #ifdef BCMETH_MPSAFE
        mutex_exit(sc->sc_lock);
-       (*ifp->if_input)(ifp, m);
+       if_input(ifp, m);
        mutex_enter(sc->sc_lock);
 #else
        int s = splnet();
        bpf_mtap(ifp, m);
-       (*ifp->if_input)(ifp, m);
+       if_input(ifp, m);
        splx(s);
 #endif
 }
diff -r 4c4d2bc500aa -r 639986dfe246 sys/arch/arm/ep93xx/epe.c
--- a/sys/arch/arm/ep93xx/epe.c Mon Feb 08 21:08:03 2016 +0000
+++ b/sys/arch/arm/ep93xx/epe.c Tue Feb 09 08:32:07 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: epe.c,v 1.32 2015/05/20 09:17:17 ozaki-r Exp $ */
+/*     $NetBSD: epe.c,v 1.33 2016/02/09 08:32:08 ozaki-r Exp $ */
 
 /*
  * Copyright (c) 2004 Jesse Off
@@ -27,7 +27,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: epe.c,v 1.32 2015/05/20 09:17:17 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: epe.c,v 1.33 2016/02/09 08:32:08 ozaki-r Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -231,7 +231,8 @@
                                sc->rxq[bi].m->m_pkthdr.len = 
                                        sc->rxq[bi].m->m_len = fl;
                                bpf_mtap(ifp, sc->rxq[bi].m);
-                                (*ifp->if_input)(ifp, sc->rxq[bi].m);
+                               if_percpuq_enqueue(ifp->if_percpuq,
+                                   sc->rxq[bi].m);
                                sc->rxq[bi].m = m;
                                bus_dmamap_load(sc->sc_dmat, 
                                        sc->rxq[bi].m_dmamap, 
diff -r 4c4d2bc500aa -r 639986dfe246 sys/arch/arm/gemini/gemini_gmac.c
--- a/sys/arch/arm/gemini/gemini_gmac.c Mon Feb 08 21:08:03 2016 +0000
+++ b/sys/arch/arm/gemini/gemini_gmac.c Tue Feb 09 08:32:07 2016 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: gemini_gmac.c,v 1.7 2011/07/01 19:32:28 dyoung Exp $ */
+/* $NetBSD: gemini_gmac.c,v 1.8 2016/02/09 08:32:08 ozaki-r Exp $ */
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -49,7 +49,7 @@
 
 #include <sys/gpio.h>
 
-__KERNEL_RCSID(0, "$NetBSD: gemini_gmac.c,v 1.7 2011/07/01 19:32:28 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: gemini_gmac.c,v 1.8 2016/02/09 08:32:08 ozaki-r Exp $");
 
 #define        SWFREEQ_DESCS   256     /* one page worth */
 #define        HWFREEQ_DESCS   256     /* one page worth */
@@ -856,7 +856,7 @@
                m->m_data += 2;
                KASSERT(m_length(m) == m->m_pkthdr.len);
                bpf_mtap(ifp, m);
-               (*ifp->if_input)(ifp, m);
+               if_input(ifp, m);
                break;
        default:
                ifp->if_ierrors++;
diff -r 4c4d2bc500aa -r 639986dfe246 sys/arch/arm/gemini/if_gpn.c
--- a/sys/arch/arm/gemini/if_gpn.c      Mon Feb 08 21:08:03 2016 +0000
+++ b/sys/arch/arm/gemini/if_gpn.c      Tue Feb 09 08:32:07 2016 +0000
@@ -1,4 +1,4 @@
-/* $NetBSD: if_gpn.c,v 1.4 2011/07/01 19:32:28 dyoung Exp $ */
+/* $NetBSD: if_gpn.c,v 1.5 2016/02/09 08:32:08 ozaki-r Exp $ */
 /*-
  * Copyright (c) 2008 The NetBSD Foundation, Inc.
  * All rights reserved.
@@ -32,7 +32,7 @@
 
 #include "opt_gemini.h"
 
-__KERNEL_RCSID(0, "$NetBSD: if_gpn.c,v 1.4 2011/07/01 19:32:28 dyoung Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_gpn.c,v 1.5 2016/02/09 08:32:08 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/device.h>
@@ -307,7 +307,7 @@
                printf("%s: rx len=%d crc=%#x\n", ifp->if_xname,
                    m->m_pkthdr.len, m_crc32_le(m));
 #endif
-               (*ifp->if_input)(ifp, m);
+               if_percpuq_enqueue(ifp->if_percpuq, m);
        }
 
 out:
diff -r 4c4d2bc500aa -r 639986dfe246 sys/arch/arm/imx/if_enet.c
--- a/sys/arch/arm/imx/if_enet.c        Mon Feb 08 21:08:03 2016 +0000
+++ b/sys/arch/arm/imx/if_enet.c        Tue Feb 09 08:32:07 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_enet.c,v 1.4 2015/04/27 17:34:51 christos Exp $     */
+/*     $NetBSD: if_enet.c,v 1.5 2016/02/09 08:32:08 ozaki-r Exp $      */
 
 /*
  * Copyright (c) 2014 Ryo Shimizu <ryo%nerv.org@localhost>
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_enet.c,v 1.4 2015/04/27 17:34:51 christos Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_enet.c,v 1.5 2016/02/09 08:32:08 ozaki-r Exp $");
 
 #include "imxocotp.h"
 #include "imxccm.h"
@@ -755,7 +755,7 @@
                                /* Pass this up to any BPF listeners */
                                bpf_mtap(ifp, m0);
 
-                               (*ifp->if_input)(ifp, m0);
+                               if_percpuq_enqueue(ifp->if_percpuq, m0);
                        }
 
                        m0 = NULL;
diff -r 4c4d2bc500aa -r 639986dfe246 sys/arch/arm/omap/if_cpsw.c
--- a/sys/arch/arm/omap/if_cpsw.c       Mon Feb 08 21:08:03 2016 +0000
+++ b/sys/arch/arm/omap/if_cpsw.c       Tue Feb 09 08:32:07 2016 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: if_cpsw.c,v 1.12 2015/04/16 21:50:35 jmcneill Exp $    */
+/*     $NetBSD: if_cpsw.c,v 1.13 2016/02/09 08:32:08 ozaki-r Exp $     */
 
 /*
  * Copyright (c) 2013 Jonathan A. Kollasch
@@ -53,7 +53,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(1, "$NetBSD: if_cpsw.c,v 1.12 2015/04/16 21:50:35 jmcneill Exp $");
+__KERNEL_RCSID(1, "$NetBSD: if_cpsw.c,v 1.13 2016/02/09 08:32:08 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/bus.h>
@@ -1170,7 +1170,7 @@
 
                bpf_mtap(ifp, m);
 



Home | Main Index | Thread Index | Old Index