Module Name: src Committed By: ozaki-r Date: Tue Feb 9 08:32:12 UTC 2016
Modified Files: src/sys/arch/acorn32/podulebus: if_ie.c src/sys/arch/amiga/dev: if_es.c if_qn.c src/sys/arch/arm/allwinner: awin_eth.c src/sys/arch/arm/at91: at91emac.c src/sys/arch/arm/broadcom: bcm53xx_eth.c src/sys/arch/arm/ep93xx: epe.c src/sys/arch/arm/gemini: gemini_gmac.c if_gpn.c src/sys/arch/arm/imx: if_enet.c src/sys/arch/arm/omap: if_cpsw.c omapl1x_emac.c src/sys/arch/arm/rockchip: rockchip_emac.c src/sys/arch/arm/xscale: ixp425_if_npe.c src/sys/arch/emips/ebus: if_le_ebus.c src/sys/arch/evbppc/virtex/dev: if_temac.c src/sys/arch/mac68k/dev: if_mc.c src/sys/arch/mac68k/nubus: if_netdock_nubus.c src/sys/arch/macppc/dev: am79c950.c if_bm.c if_gm.c src/sys/arch/mips/adm5120/dev: if_admsw.c src/sys/arch/mips/alchemy/dev: if_aumac.c src/sys/arch/mips/atheros/dev: if_ae.c src/sys/arch/mips/cavium/dev: if_cnmac.c src/sys/arch/mips/ralink: ralink_eth.c src/sys/arch/mips/sibyte/dev: sbmac.c src/sys/arch/newsmips/apbus: if_sn.c src/sys/arch/next68k/dev: mb8795.c src/sys/arch/playstation2/dev: if_smap.c src/sys/arch/powerpc/booke/dev: pq3etsec.c src/sys/arch/powerpc/ibm4xx/dev: if_emac.c src/sys/arch/sgimips/hpc: if_sq.c src/sys/arch/sgimips/mace: if_mec.c src/sys/arch/sun2/dev: if_ec.c src/sys/arch/sun3/dev: if_ie.c src/sys/arch/usermode/dev: if_veth.c src/sys/arch/x86/pci: if_vmx.c src/sys/arch/xen/xen: if_xennet_xenbus.c xennetback_xenbus.c src/sys/dev/bi: if_ni.c src/sys/dev/cadence: if_cemac.c src/sys/dev/ic: aic6915.c cs89x0.c dm9000.c dp8390.c dp83932.c dwc_gmac.c elink3.c elinkxl.c gem.c hme.c i82557.c i82586.c i82596.c lan9118.c lance.c lemac.c mb86950.c mb86960.c mtd803.c pdq_ifsubr.c rrunner.c rtl8169.c rtl81x9.c seeq8005.c sgec.c smc83c170.c smc90cx6.c smc91cxx.c tropic.c tulip.c src/sys/dev/if_ndis: if_ndis.c src/sys/dev/isa: if_eg.c if_el.c if_iy.c src/sys/dev/marvell: if_gfe.c if_mvgbe.c if_mvxpe.c src/sys/dev/ofw: ofnet.c src/sys/dev/pci: if_age.c if_alc.c if_ale.c if_bce.c if_bge.c if_bnx.c if_cas.c if_de.c if_dge.c if_et.c if_iwm.c if_jme.c if_kse.c if_lii.c if_lmc.c if_msk.c if_nfe.c if_pcn.c if_rtwn.c if_sip.c if_sk.c if_ste.c if_stge.c if_ti.c if_tl.c if_txp.c if_vge.c if_vioif.c if_vr.c if_vte.c if_wm.c if_xge.c src/sys/dev/pci/cxgb: cxgb_sge.c src/sys/dev/pci/ixgbe: ixgbe.c ixv.c src/sys/dev/pcmcia: if_cnw.c if_malo_pcmcia.c if_ray.c if_xi.c src/sys/dev/qbus: if_de.c if_il.c if_qe.c if_qt.c src/sys/dev/sbus: be.c qe.c src/sys/dev/scsipi: if_se.c src/sys/dev/usb: if_aue.c if_axe.c if_axen.c if_cdce.c if_cue.c if_kue.c if_smsc.c if_udav.c if_upl.c if_url.c if_urndis.c src/sys/net: bpf.c if.c if.h if_atmsubr.c if_bridge.c if_ethersubr.c if_fddisubr.c if_hippisubr.c if_mpls.c if_tap.c if_tokensubr.c if_vlan.c src/sys/net/agr: if_agr.c src/sys/net80211: ieee80211_input.c src/sys/netinet: ip_etherip.c src/sys/netinet6: ip6_etherip.c src/sys/rump/net/lib/libshmif: if_shmem.c src/sys/rump/net/lib/libvirtif: if_virt.c Log Message: 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! To generate a diff of this commit: cvs rdiff -u -r1.35 -r1.36 src/sys/arch/acorn32/podulebus/if_ie.c cvs rdiff -u -r1.53 -r1.54 src/sys/arch/amiga/dev/if_es.c cvs rdiff -u -r1.40 -r1.41 src/sys/arch/amiga/dev/if_qn.c cvs rdiff -u -r1.9 -r1.10 src/sys/arch/arm/allwinner/awin_eth.c cvs rdiff -u -r1.15 -r1.16 src/sys/arch/arm/at91/at91emac.c cvs rdiff -u -r1.26 -r1.27 src/sys/arch/arm/broadcom/bcm53xx_eth.c cvs rdiff -u -r1.32 -r1.33 src/sys/arch/arm/ep93xx/epe.c cvs rdiff -u -r1.7 -r1.8 src/sys/arch/arm/gemini/gemini_gmac.c cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/gemini/if_gpn.c cvs rdiff -u -r1.4 -r1.5 src/sys/arch/arm/imx/if_enet.c cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/omap/if_cpsw.c cvs rdiff -u -r1.2 -r1.3 src/sys/arch/arm/omap/omapl1x_emac.c cvs rdiff -u -r1.12 -r1.13 src/sys/arch/arm/rockchip/rockchip_emac.c cvs rdiff -u -r1.29 -r1.30 src/sys/arch/arm/xscale/ixp425_if_npe.c cvs rdiff -u -r1.7 -r1.8 src/sys/arch/emips/ebus/if_le_ebus.c cvs rdiff -u -r1.9 -r1.10 src/sys/arch/evbppc/virtex/dev/if_temac.c cvs rdiff -u -r1.40 -r1.41 src/sys/arch/mac68k/dev/if_mc.c cvs rdiff -u -r1.22 -r1.23 src/sys/arch/mac68k/nubus/if_netdock_nubus.c cvs rdiff -u -r1.33 -r1.34 src/sys/arch/macppc/dev/am79c950.c cvs rdiff -u -r1.46 -r1.47 src/sys/arch/macppc/dev/if_bm.c cvs rdiff -u -r1.45 -r1.46 src/sys/arch/macppc/dev/if_gm.c cvs rdiff -u -r1.12 -r1.13 src/sys/arch/mips/adm5120/dev/if_admsw.c cvs rdiff -u -r1.39 -r1.40 src/sys/arch/mips/alchemy/dev/if_aumac.c cvs rdiff -u -r1.26 -r1.27 src/sys/arch/mips/atheros/dev/if_ae.c cvs rdiff -u -r1.1 -r1.2 src/sys/arch/mips/cavium/dev/if_cnmac.c cvs rdiff -u -r1.6 -r1.7 src/sys/arch/mips/ralink/ralink_eth.c cvs rdiff -u -r1.43 -r1.44 src/sys/arch/mips/sibyte/dev/sbmac.c cvs rdiff -u -r1.34 -r1.35 src/sys/arch/newsmips/apbus/if_sn.c cvs rdiff -u -r1.54 -r1.55 src/sys/arch/next68k/dev/mb8795.c cvs rdiff -u -r1.18 -r1.19 src/sys/arch/playstation2/dev/if_smap.c cvs rdiff -u -r1.25 -r1.26 src/sys/arch/powerpc/booke/dev/pq3etsec.c cvs rdiff -u -r1.43 -r1.44 src/sys/arch/powerpc/ibm4xx/dev/if_emac.c cvs rdiff -u -r1.44 -r1.45 src/sys/arch/sgimips/hpc/if_sq.c cvs rdiff -u -r1.51 -r1.52 src/sys/arch/sgimips/mace/if_mec.c cvs rdiff -u -r1.23 -r1.24 src/sys/arch/sun2/dev/if_ec.c cvs rdiff -u -r1.56 -r1.57 src/sys/arch/sun3/dev/if_ie.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/usermode/dev/if_veth.c cvs rdiff -u -r1.5 -r1.6 src/sys/arch/x86/pci/if_vmx.c cvs rdiff -u -r1.65 -r1.66 src/sys/arch/xen/xen/if_xennet_xenbus.c cvs rdiff -u -r1.54 -r1.55 src/sys/arch/xen/xen/xennetback_xenbus.c cvs rdiff -u -r1.41 -r1.42 src/sys/dev/bi/if_ni.c cvs rdiff -u -r1.7 -r1.8 src/sys/dev/cadence/if_cemac.c cvs rdiff -u -r1.30 -r1.31 src/sys/dev/ic/aic6915.c cvs rdiff -u -r1.35 -r1.36 src/sys/dev/ic/cs89x0.c cvs rdiff -u -r1.8 -r1.9 src/sys/dev/ic/dm9000.c cvs rdiff -u -r1.82 -r1.83 src/sys/dev/ic/dp8390.c cvs rdiff -u -r1.36 -r1.37 src/sys/dev/ic/dp83932.c cvs rdiff -u -r1.34 -r1.35 src/sys/dev/ic/dwc_gmac.c cvs rdiff -u -r1.136 -r1.137 src/sys/dev/ic/elink3.c cvs rdiff -u -r1.117 -r1.118 src/sys/dev/ic/elinkxl.c cvs rdiff -u -r1.103 -r1.104 src/sys/dev/ic/gem.c cvs rdiff -u -r1.91 -r1.92 src/sys/dev/ic/hme.c cvs rdiff -u -r1.143 -r1.144 src/sys/dev/ic/i82557.c cvs rdiff -u -r1.70 -r1.71 src/sys/dev/ic/i82586.c cvs rdiff -u -r1.32 -r1.33 src/sys/dev/ic/i82596.c cvs rdiff -u -r1.20 -r1.21 src/sys/dev/ic/lan9118.c cvs rdiff -u -r1.48 -r1.49 src/sys/dev/ic/lance.c cvs rdiff -u -r1.43 -r1.44 src/sys/dev/ic/lemac.c cvs rdiff -u -r1.22 -r1.23 src/sys/dev/ic/mb86950.c cvs rdiff -u -r1.81 -r1.82 src/sys/dev/ic/mb86960.c \ src/sys/dev/ic/smc83c170.c cvs rdiff -u -r1.29 -r1.30 src/sys/dev/ic/mtd803.c cvs rdiff -u -r1.55 -r1.56 src/sys/dev/ic/pdq_ifsubr.c cvs rdiff -u -r1.79 -r1.80 src/sys/dev/ic/rrunner.c cvs rdiff -u -r1.145 -r1.146 src/sys/dev/ic/rtl8169.c cvs rdiff -u -r1.96 -r1.97 src/sys/dev/ic/rtl81x9.c cvs rdiff -u -r1.54 -r1.55 src/sys/dev/ic/seeq8005.c cvs rdiff -u -r1.41 -r1.42 src/sys/dev/ic/sgec.c cvs rdiff -u -r1.65 -r1.66 src/sys/dev/ic/smc90cx6.c cvs rdiff -u -r1.90 -r1.91 src/sys/dev/ic/smc91cxx.c cvs rdiff -u -r1.44 -r1.45 src/sys/dev/ic/tropic.c cvs rdiff -u -r1.185 -r1.186 src/sys/dev/ic/tulip.c cvs rdiff -u -r1.34 -r1.35 src/sys/dev/if_ndis/if_ndis.c cvs rdiff -u -r1.88 -r1.89 src/sys/dev/isa/if_eg.c cvs rdiff -u -r1.91 -r1.92 src/sys/dev/isa/if_el.c cvs rdiff -u -r1.94 -r1.95 src/sys/dev/isa/if_iy.c cvs rdiff -u -r1.45 -r1.46 src/sys/dev/marvell/if_gfe.c cvs rdiff -u -r1.41 -r1.42 src/sys/dev/marvell/if_mvgbe.c cvs rdiff -u -r1.2 -r1.3 src/sys/dev/marvell/if_mvxpe.c cvs rdiff -u -r1.53 -r1.54 src/sys/dev/ofw/ofnet.c cvs rdiff -u -r1.45 -r1.46 src/sys/dev/pci/if_age.c src/sys/dev/pci/if_ste.c cvs rdiff -u -r1.18 -r1.19 src/sys/dev/pci/if_alc.c cvs rdiff -u -r1.19 -r1.20 src/sys/dev/pci/if_ale.c cvs rdiff -u -r1.40 -r1.41 src/sys/dev/pci/if_bce.c src/sys/dev/pci/if_dge.c cvs rdiff -u -r1.294 -r1.295 src/sys/dev/pci/if_bge.c cvs rdiff -u -r1.57 -r1.58 src/sys/dev/pci/if_bnx.c src/sys/dev/pci/if_stge.c cvs rdiff -u -r1.23 -r1.24 src/sys/dev/pci/if_cas.c cvs rdiff -u -r1.145 -r1.146 src/sys/dev/pci/if_de.c cvs rdiff -u -r1.9 -r1.10 src/sys/dev/pci/if_et.c cvs rdiff -u -r1.39 -r1.40 src/sys/dev/pci/if_iwm.c cvs rdiff -u -r1.28 -r1.29 src/sys/dev/pci/if_jme.c src/sys/dev/pci/if_kse.c cvs rdiff -u -r1.13 -r1.14 src/sys/dev/pci/if_lii.c cvs rdiff -u -r1.56 -r1.57 src/sys/dev/pci/if_lmc.c src/sys/dev/pci/if_vge.c cvs rdiff -u -r1.48 -r1.49 src/sys/dev/pci/if_msk.c cvs rdiff -u -r1.59 -r1.60 src/sys/dev/pci/if_nfe.c cvs rdiff -u -r1.60 -r1.61 src/sys/dev/pci/if_pcn.c cvs rdiff -u -r1.4 -r1.5 src/sys/dev/pci/if_rtwn.c cvs rdiff -u -r1.159 -r1.160 src/sys/dev/pci/if_sip.c cvs rdiff -u -r1.80 -r1.81 src/sys/dev/pci/if_sk.c cvs rdiff -u -r1.95 -r1.96 src/sys/dev/pci/if_ti.c cvs rdiff -u -r1.102 -r1.103 src/sys/dev/pci/if_tl.c cvs rdiff -u -r1.41 -r1.42 src/sys/dev/pci/if_txp.c cvs rdiff -u -r1.21 -r1.22 src/sys/dev/pci/if_vioif.c cvs rdiff -u -r1.115 -r1.116 src/sys/dev/pci/if_vr.c cvs rdiff -u -r1.12 -r1.13 src/sys/dev/pci/if_vte.c cvs rdiff -u -r1.390 -r1.391 src/sys/dev/pci/if_wm.c cvs rdiff -u -r1.20 -r1.21 src/sys/dev/pci/if_xge.c cvs rdiff -u -r1.2 -r1.3 src/sys/dev/pci/cxgb/cxgb_sge.c cvs rdiff -u -r1.36 -r1.37 src/sys/dev/pci/ixgbe/ixgbe.c cvs rdiff -u -r1.15 -r1.16 src/sys/dev/pci/ixgbe/ixv.c cvs rdiff -u -r1.56 -r1.57 src/sys/dev/pcmcia/if_cnw.c cvs rdiff -u -r1.7 -r1.8 src/sys/dev/pcmcia/if_malo_pcmcia.c cvs rdiff -u -r1.81 -r1.82 src/sys/dev/pcmcia/if_ray.c cvs rdiff -u -r1.75 -r1.76 src/sys/dev/pcmcia/if_xi.c cvs rdiff -u -r1.29 -r1.30 src/sys/dev/qbus/if_de.c cvs rdiff -u -r1.28 -r1.29 src/sys/dev/qbus/if_il.c cvs rdiff -u -r1.73 -r1.74 src/sys/dev/qbus/if_qe.c cvs rdiff -u -r1.18 -r1.19 src/sys/dev/qbus/if_qt.c cvs rdiff -u -r1.81 -r1.82 src/sys/dev/sbus/be.c cvs rdiff -u -r1.63 -r1.64 src/sys/dev/sbus/qe.c cvs rdiff -u -r1.88 -r1.89 src/sys/dev/scsipi/if_se.c cvs rdiff -u -r1.133 -r1.134 src/sys/dev/usb/if_aue.c cvs rdiff -u -r1.69 -r1.70 src/sys/dev/usb/if_axe.c cvs rdiff -u -r1.6 -r1.7 src/sys/dev/usb/if_axen.c cvs rdiff -u -r1.39 -r1.40 src/sys/dev/usb/if_cdce.c cvs rdiff -u -r1.70 -r1.71 src/sys/dev/usb/if_cue.c cvs rdiff -u -r1.82 -r1.83 src/sys/dev/usb/if_kue.c cvs rdiff -u -r1.24 -r1.25 src/sys/dev/usb/if_smsc.c cvs rdiff -u -r1.44 -r1.45 src/sys/dev/usb/if_udav.c cvs rdiff -u -r1.48 -r1.49 src/sys/dev/usb/if_upl.c cvs rdiff -u -r1.49 -r1.50 src/sys/dev/usb/if_url.c cvs rdiff -u -r1.9 -r1.10 src/sys/dev/usb/if_urndis.c cvs rdiff -u -r1.194 -r1.195 src/sys/net/bpf.c src/sys/net/if.h cvs rdiff -u -r1.322 -r1.323 src/sys/net/if.c cvs rdiff -u -r1.55 -r1.56 src/sys/net/if_atmsubr.c cvs rdiff -u -r1.105 -r1.106 src/sys/net/if_bridge.c cvs rdiff -u -r1.215 -r1.216 src/sys/net/if_ethersubr.c cvs rdiff -u -r1.95 -r1.96 src/sys/net/if_fddisubr.c cvs rdiff -u -r1.44 -r1.45 src/sys/net/if_hippisubr.c cvs rdiff -u -r1.19 -r1.20 src/sys/net/if_mpls.c cvs rdiff -u -r1.82 -r1.83 src/sys/net/if_tap.c cvs rdiff -u -r1.72 -r1.73 src/sys/net/if_tokensubr.c cvs rdiff -u -r1.83 -r1.84 src/sys/net/if_vlan.c cvs rdiff -u -r1.33 -r1.34 src/sys/net/agr/if_agr.c cvs rdiff -u -r1.79 -r1.80 src/sys/net80211/ieee80211_input.c cvs rdiff -u -r1.15 -r1.16 src/sys/netinet/ip_etherip.c cvs rdiff -u -r1.16 -r1.17 src/sys/netinet6/ip6_etherip.c cvs rdiff -u -r1.64 -r1.65 src/sys/rump/net/lib/libshmif/if_shmem.c cvs rdiff -u -r1.49 -r1.50 src/sys/rump/net/lib/libvirtif/if_virt.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.