Module Name: src Committed By: ozaki-r Date: Thu Dec 8 01:12:01 UTC 2016
Modified Files: src/sys/arch/arm/omap: if_cpsw.c src/sys/arch/emips/ebus: if_le_ebus.c src/sys/arch/macppc/dev: 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/playstation2/dev: if_smap.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/x86/pci: if_vmx.c src/sys/dev/marvell: if_mvgbe.c if_mvxpe.c src/sys/dev/pci: if_age.c if_alc.c if_bce.c if_bge.c if_bnx.c if_cas.c if_de.c if_dge.c if_et.c if_ipw.c if_iwi.c if_iwm.c if_iwn.c if_lii.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_txp.c if_vge.c if_vioif.c if_vr.c if_wm.c if_wpi.c if_xge.c src/sys/dev/pcmcia: if_cnw.c if_malo_pcmcia.c if_xi.c Log Message: Apply deferred if_start framework if_schedule_deferred_start checks if the if_snd queue contains packets, so drivers don't need to check it by themselves. To generate a diff of this commit: cvs rdiff -u -r1.16 -r1.17 src/sys/arch/arm/omap/if_cpsw.c cvs rdiff -u -r1.11 -r1.12 src/sys/arch/emips/ebus/if_le_ebus.c cvs rdiff -u -r1.51 -r1.52 src/sys/arch/macppc/dev/if_bm.c cvs rdiff -u -r1.47 -r1.48 src/sys/arch/macppc/dev/if_gm.c cvs rdiff -u -r1.14 -r1.15 src/sys/arch/mips/adm5120/dev/if_admsw.c cvs rdiff -u -r1.41 -r1.42 src/sys/arch/mips/alchemy/dev/if_aumac.c cvs rdiff -u -r1.28 -r1.29 src/sys/arch/mips/atheros/dev/if_ae.c cvs rdiff -u -r1.21 -r1.22 src/sys/arch/playstation2/dev/if_smap.c cvs rdiff -u -r1.45 -r1.46 src/sys/arch/powerpc/ibm4xx/dev/if_emac.c cvs rdiff -u -r1.46 -r1.47 src/sys/arch/sgimips/hpc/if_sq.c cvs rdiff -u -r1.53 -r1.54 src/sys/arch/sgimips/mace/if_mec.c cvs rdiff -u -r1.25 -r1.26 src/sys/arch/sun2/dev/if_ec.c cvs rdiff -u -r1.11 -r1.12 src/sys/arch/x86/pci/if_vmx.c cvs rdiff -u -r1.45 -r1.46 src/sys/dev/marvell/if_mvgbe.c cvs rdiff -u -r1.15 -r1.16 src/sys/dev/marvell/if_mvxpe.c cvs rdiff -u -r1.48 -r1.49 src/sys/dev/pci/if_age.c src/sys/dev/pci/if_ste.c cvs rdiff -u -r1.21 -r1.22 src/sys/dev/pci/if_alc.c cvs rdiff -u -r1.42 -r1.43 src/sys/dev/pci/if_bce.c cvs rdiff -u -r1.298 -r1.299 src/sys/dev/pci/if_bge.c cvs rdiff -u -r1.59 -r1.60 src/sys/dev/pci/if_bnx.c cvs rdiff -u -r1.24 -r1.25 src/sys/dev/pci/if_cas.c cvs rdiff -u -r1.147 -r1.148 src/sys/dev/pci/if_de.c cvs rdiff -u -r1.45 -r1.46 src/sys/dev/pci/if_dge.c src/sys/dev/pci/if_txp.c cvs rdiff -u -r1.12 -r1.13 src/sys/dev/pci/if_et.c cvs rdiff -u -r1.60 -r1.61 src/sys/dev/pci/if_ipw.c src/sys/dev/pci/if_stge.c cvs rdiff -u -r1.100 -r1.101 src/sys/dev/pci/if_iwi.c cvs rdiff -u -r1.43 -r1.44 src/sys/dev/pci/if_iwm.c cvs rdiff -u -r1.80 -r1.81 src/sys/dev/pci/if_iwn.c cvs rdiff -u -r1.15 -r1.16 src/sys/dev/pci/if_lii.c cvs rdiff -u -r1.52 -r1.53 src/sys/dev/pci/if_msk.c cvs rdiff -u -r1.61 -r1.62 src/sys/dev/pci/if_nfe.c cvs rdiff -u -r1.62 -r1.63 src/sys/dev/pci/if_pcn.c cvs rdiff -u -r1.8 -r1.9 src/sys/dev/pci/if_rtwn.c cvs rdiff -u -r1.163 -r1.164 src/sys/dev/pci/if_sip.c cvs rdiff -u -r1.82 -r1.83 src/sys/dev/pci/if_sk.c cvs rdiff -u -r1.99 -r1.100 src/sys/dev/pci/if_ti.c cvs rdiff -u -r1.58 -r1.59 src/sys/dev/pci/if_vge.c cvs rdiff -u -r1.27 -r1.28 src/sys/dev/pci/if_vioif.c cvs rdiff -u -r1.119 -r1.120 src/sys/dev/pci/if_vr.c cvs rdiff -u -r1.455 -r1.456 src/sys/dev/pci/if_wm.c cvs rdiff -u -r1.74 -r1.75 src/sys/dev/pci/if_wpi.c cvs rdiff -u -r1.23 -r1.24 src/sys/dev/pci/if_xge.c cvs rdiff -u -r1.59 -r1.60 src/sys/dev/pcmcia/if_cnw.c cvs rdiff -u -r1.10 -r1.11 src/sys/dev/pcmcia/if_malo_pcmcia.c cvs rdiff -u -r1.78 -r1.79 src/sys/dev/pcmcia/if_xi.c Please note that diffs are not public domain; they are subject to the copyright notices on the relevant files.
Modified files: Index: src/sys/arch/arm/omap/if_cpsw.c diff -u src/sys/arch/arm/omap/if_cpsw.c:1.16 src/sys/arch/arm/omap/if_cpsw.c:1.17 --- src/sys/arch/arm/omap/if_cpsw.c:1.16 Thu Aug 4 14:08:23 2016 +++ src/sys/arch/arm/omap/if_cpsw.c Thu Dec 8 01:12:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_cpsw.c,v 1.16 2016/08/04 14:08:23 kiyohara Exp $ */ +/* $NetBSD: if_cpsw.c,v 1.17 2016/12/08 01:12:00 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.16 2016/08/04 14:08:23 kiyohara Exp $"); +__KERNEL_RCSID(1, "$NetBSD: if_cpsw.c,v 1.17 2016/12/08 01:12:00 ozaki-r Exp $"); #include <sys/param.h> #include <sys/bus.h> @@ -572,6 +572,7 @@ cpsw_attach(device_t parent, device_t se } if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc->sc_enaddr); /* The attach is successful. */ @@ -1303,7 +1304,7 @@ next: ifp->if_timer = 0; if (handled) - cpsw_start(ifp); + if_schedule_deferred_start(ifp); return handled; } Index: src/sys/arch/emips/ebus/if_le_ebus.c diff -u src/sys/arch/emips/ebus/if_le_ebus.c:1.11 src/sys/arch/emips/ebus/if_le_ebus.c:1.12 --- src/sys/arch/emips/ebus/if_le_ebus.c:1.11 Mon Oct 3 17:35:38 2016 +++ src/sys/arch/emips/ebus/if_le_ebus.c Thu Dec 8 01:12:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_le_ebus.c,v 1.11 2016/10/03 17:35:38 maya Exp $ */ +/* $NetBSD: if_le_ebus.c,v 1.12 2016/12/08 01:12:00 ozaki-r Exp $ */ /*- * Copyright (c) 2010 The NetBSD Foundation, Inc. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_le_ebus.c,v 1.11 2016/10/03 17:35:38 maya Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_le_ebus.c,v 1.12 2016/12/08 01:12:00 ozaki-r Exp $"); #include "opt_inet.h" @@ -216,6 +216,7 @@ enic_attach(device_t parent, device_t se /* Attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc->sc_enaddr); sc->sc_sh = shutdownhook_establish(enic_shutdown, ifp); @@ -540,7 +541,7 @@ enic_init(struct ifnet *ifp) printf("enic_init <- %x\n",ctl); #endif - enic_start(ifp); + if_schedule_deferred_start(ifp); return 0; } @@ -819,7 +820,7 @@ void enic_tint(struct enic_softc *sc, ui ifp->if_timer = 0; ifp->if_flags &= ~IFF_OACTIVE; - enic_start(ifp); + if_schedule_deferred_start(ifp); #if DEBUG sc->it = 1; #endif Index: src/sys/arch/macppc/dev/if_bm.c diff -u src/sys/arch/macppc/dev/if_bm.c:1.51 src/sys/arch/macppc/dev/if_bm.c:1.52 --- src/sys/arch/macppc/dev/if_bm.c:1.51 Mon Oct 3 01:23:55 2016 +++ src/sys/arch/macppc/dev/if_bm.c Thu Dec 8 01:12:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_bm.c,v 1.51 2016/10/03 01:23:55 ozaki-r Exp $ */ +/* $NetBSD: if_bm.c,v 1.52 2016/12/08 01:12:00 ozaki-r Exp $ */ /*- * Copyright (C) 1998, 1999, 2000 Tsubai Masanari. All rights reserved. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_bm.c,v 1.51 2016/10/03 01:23:55 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_bm.c,v 1.52 2016/12/08 01:12:00 ozaki-r Exp $"); #include "opt_inet.h" @@ -260,6 +260,7 @@ bmac_attach(device_t parent, device_t se bmac_reset_chip(sc); if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc->sc_enaddr); } @@ -441,7 +442,7 @@ bmac_intr(void *v) sc->sc_if.if_flags &= ~IFF_OACTIVE; sc->sc_if.if_timer = 0; sc->sc_if.if_opackets++; - bmac_start(&sc->sc_if); + if_schedule_deferred_start(&sc->sc_if); } /* XXX should do more! */ Index: src/sys/arch/macppc/dev/if_gm.c diff -u src/sys/arch/macppc/dev/if_gm.c:1.47 src/sys/arch/macppc/dev/if_gm.c:1.48 --- src/sys/arch/macppc/dev/if_gm.c:1.47 Fri Jun 10 13:27:11 2016 +++ src/sys/arch/macppc/dev/if_gm.c Thu Dec 8 01:12:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_gm.c,v 1.47 2016/06/10 13:27:11 ozaki-r Exp $ */ +/* $NetBSD: if_gm.c,v 1.48 2016/12/08 01:12:00 ozaki-r Exp $ */ /*- * Copyright (c) 2000 Tsubai Masanari. All rights reserved. @@ -27,7 +27,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_gm.c,v 1.47 2016/06/10 13:27:11 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_gm.c,v 1.48 2016/12/08 01:12:00 ozaki-r Exp $"); #include "opt_inet.h" @@ -247,6 +247,7 @@ gmac_attach(device_t parent, device_t se ifmedia_set(&mii->mii_media, IFM_ETHER|IFM_AUTO); if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, laddr); rnd_attach_source(&sc->sc_rnd_source, xname, RND_TYPE_NET, RND_FLAG_DEFAULT); @@ -343,7 +344,7 @@ gmac_tint(struct gmac_softc *sc) ifp->if_flags &= ~IFF_OACTIVE; ifp->if_timer = 0; - gmac_start(ifp); + if_schedule_deferred_start(ifp); } void Index: src/sys/arch/mips/adm5120/dev/if_admsw.c diff -u src/sys/arch/mips/adm5120/dev/if_admsw.c:1.14 src/sys/arch/mips/adm5120/dev/if_admsw.c:1.15 --- src/sys/arch/mips/adm5120/dev/if_admsw.c:1.14 Fri Jun 10 13:27:12 2016 +++ src/sys/arch/mips/adm5120/dev/if_admsw.c Thu Dec 8 01:12:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_admsw.c,v 1.14 2016/06/10 13:27:12 ozaki-r Exp $ */ +/* $NetBSD: if_admsw.c,v 1.15 2016/12/08 01:12:00 ozaki-r Exp $ */ /*- * Copyright (c) 2007 Ruslan Ermilov and Vsevolod Lobko. @@ -76,7 +76,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_admsw.c,v 1.14 2016/06/10 13:27:12 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_admsw.c,v 1.15 2016/12/08 01:12:00 ozaki-r Exp $"); #include <sys/param.h> @@ -480,6 +480,7 @@ admsw_attach(device_t parent, device_t s /* Attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, enaddr); enaddr[5]++; } @@ -886,7 +887,7 @@ admsw_txintr(struct admsw_softc *sc, int ifp = &sc->sc_ethercom[0].ec_if; /* Try to queue more packets. */ - admsw_start(ifp); + if_schedule_deferred_start(ifp); /* * If there are no more pending transmissions, Index: src/sys/arch/mips/alchemy/dev/if_aumac.c diff -u src/sys/arch/mips/alchemy/dev/if_aumac.c:1.41 src/sys/arch/mips/alchemy/dev/if_aumac.c:1.42 --- src/sys/arch/mips/alchemy/dev/if_aumac.c:1.41 Fri Jun 10 13:27:12 2016 +++ src/sys/arch/mips/alchemy/dev/if_aumac.c Thu Dec 8 01:12:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_aumac.c,v 1.41 2016/06/10 13:27:12 ozaki-r Exp $ */ +/* $NetBSD: if_aumac.c,v 1.42 2016/12/08 01:12:00 ozaki-r Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -46,7 +46,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_aumac.c,v 1.41 2016/06/10 13:27:12 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_aumac.c,v 1.42 2016/12/08 01:12:00 ozaki-r Exp $"); @@ -338,6 +338,7 @@ aumac_attach(device_t parent, device_t s /* Attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, enaddr); rnd_attach_source(&sc->rnd_source, device_xname(self), @@ -578,7 +579,7 @@ aumac_txintr(struct aumac_softc *sc) ifp->if_flags &= ~IFF_OACTIVE; /* Try to queue more packets. */ - aumac_start(ifp); + if_schedule_deferred_start(ifp); } if (pkts) Index: src/sys/arch/mips/atheros/dev/if_ae.c diff -u src/sys/arch/mips/atheros/dev/if_ae.c:1.28 src/sys/arch/mips/atheros/dev/if_ae.c:1.29 --- src/sys/arch/mips/atheros/dev/if_ae.c:1.28 Fri Jun 10 13:27:12 2016 +++ src/sys/arch/mips/atheros/dev/if_ae.c Thu Dec 8 01:12:00 2016 @@ -1,4 +1,4 @@ -/* $Id: if_ae.c,v 1.28 2016/06/10 13:27:12 ozaki-r Exp $ */ +/* $Id: if_ae.c,v 1.29 2016/12/08 01:12:00 ozaki-r Exp $ */ /*- * Copyright (c) 2006 Urbana-Champaign Independent Media Center. * Copyright (c) 2006 Garrett D'Amore. @@ -98,7 +98,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_ae.c,v 1.28 2016/06/10 13:27:12 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_ae.c,v 1.29 2016/12/08 01:12:00 ozaki-r Exp $"); #include <sys/param.h> @@ -383,6 +383,7 @@ ae_attach(device_t parent, device_t self * Attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, enaddr); ether_set_ifflags_cb(&sc->sc_ethercom, ae_ifflags_cb); @@ -993,7 +994,7 @@ ae_intr(void *arg) } /* Try to get more packets going. */ - ae_start(ifp); + if_schedule_deferred_start(ifp); if (handled) rnd_add_uint32(&sc->sc_rnd_source, status); Index: src/sys/arch/playstation2/dev/if_smap.c diff -u src/sys/arch/playstation2/dev/if_smap.c:1.21 src/sys/arch/playstation2/dev/if_smap.c:1.22 --- src/sys/arch/playstation2/dev/if_smap.c:1.21 Fri Jun 10 13:27:12 2016 +++ src/sys/arch/playstation2/dev/if_smap.c Thu Dec 8 01:12:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_smap.c,v 1.21 2016/06/10 13:27:12 ozaki-r Exp $ */ +/* $NetBSD: if_smap.c,v 1.22 2016/12/08 01:12:00 ozaki-r Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -30,7 +30,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_smap.c,v 1.21 2016/06/10 13:27:12 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_smap.c,v 1.22 2016/12/08 01:12:00 ozaki-r Exp $"); #include "debug_playstation2.h" @@ -246,6 +246,7 @@ smap_attach(struct device *parent, struc } if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, emac3->eaddr); spd_intr_establish(SPD_NIC, smap_intr, sc); @@ -321,8 +322,7 @@ smap_intr(void *arg) /* if transmission is pending, start here */ ifp = &sc->ethercom.ec_if; - if (IFQ_IS_EMPTY(&ifp->if_snd) == 0) - smap_start(ifp); + if_schedule_deferred_start(ifp); rnd_add_uint32(&sc->rnd_source, cause | sc->tx_fifo_ptr << 16); return (1); Index: src/sys/arch/powerpc/ibm4xx/dev/if_emac.c diff -u src/sys/arch/powerpc/ibm4xx/dev/if_emac.c:1.45 src/sys/arch/powerpc/ibm4xx/dev/if_emac.c:1.46 --- src/sys/arch/powerpc/ibm4xx/dev/if_emac.c:1.45 Fri Jun 10 13:27:12 2016 +++ src/sys/arch/powerpc/ibm4xx/dev/if_emac.c Thu Dec 8 01:12:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_emac.c,v 1.45 2016/06/10 13:27:12 ozaki-r Exp $ */ +/* $NetBSD: if_emac.c,v 1.46 2016/12/08 01:12:00 ozaki-r Exp $ */ /* * Copyright 2001, 2002 Wasabi Systems, Inc. @@ -52,7 +52,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_emac.c,v 1.45 2016/06/10 13:27:12 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_emac.c,v 1.46 2016/12/08 01:12:00 ozaki-r Exp $"); #include "opt_emac.h" @@ -550,6 +550,7 @@ emac_attach(device_t parent, device_t se * Attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, enaddr); #ifdef EMAC_EVENT_COUNTERS @@ -1559,7 +1560,7 @@ emac_txeob_intr(void *arg) handled |= emac_txreap(sc); /* try to get more packets going */ - emac_start(&sc->sc_ethercom.ec_if); + if_schedule_deferred_start(&sc->sc_ethercom.ec_if); return handled; } Index: src/sys/arch/sgimips/hpc/if_sq.c diff -u src/sys/arch/sgimips/hpc/if_sq.c:1.46 src/sys/arch/sgimips/hpc/if_sq.c:1.47 --- src/sys/arch/sgimips/hpc/if_sq.c:1.46 Fri Jun 10 13:27:12 2016 +++ src/sys/arch/sgimips/hpc/if_sq.c Thu Dec 8 01:12:00 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_sq.c,v 1.46 2016/06/10 13:27:12 ozaki-r Exp $ */ +/* $NetBSD: if_sq.c,v 1.47 2016/12/08 01:12:00 ozaki-r Exp $ */ /* * Copyright (c) 2001 Rafal K. Boni @@ -33,7 +33,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_sq.c,v 1.46 2016/06/10 13:27:12 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_sq.c,v 1.47 2016/12/08 01:12:00 ozaki-r Exp $"); #include <sys/param.h> @@ -324,6 +324,7 @@ sq_attach(device_t parent, device_t self IFQ_SET_READY(&ifp->if_snd); if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc->sc_enaddr); memset(&sc->sq_trace, 0, sizeof(sc->sq_trace)); @@ -1110,7 +1111,7 @@ sq_txintr(struct sq_softc *sc) ifp->if_timer = 0; SQ_TRACE(SQ_TXINTR_EXIT, sc, sc->sc_prevtx, status); - sq_start(ifp); + if_schedule_deferred_start(ifp); return 1; } Index: src/sys/arch/sgimips/mace/if_mec.c diff -u src/sys/arch/sgimips/mace/if_mec.c:1.53 src/sys/arch/sgimips/mace/if_mec.c:1.54 --- src/sys/arch/sgimips/mace/if_mec.c:1.53 Fri Jun 10 13:27:13 2016 +++ src/sys/arch/sgimips/mace/if_mec.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_mec.c,v 1.53 2016/06/10 13:27:13 ozaki-r Exp $ */ +/* $NetBSD: if_mec.c,v 1.54 2016/12/08 01:12:01 ozaki-r Exp $ */ /*- * Copyright (c) 2004, 2008 Izumi Tsutsui. All rights reserved. @@ -61,7 +61,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_mec.c,v 1.53 2016/06/10 13:27:13 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_mec.c,v 1.54 2016/12/08 01:12:01 ozaki-r Exp $"); #include "opt_ddb.h" @@ -614,6 +614,7 @@ mec_attach(device_t parent, device_t sel /* attach the interface */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc->sc_enaddr); /* establish interrupt */ @@ -1607,9 +1608,9 @@ mec_intr(void *arg) } } - if (sent && !IFQ_IS_EMPTY(&ifp->if_snd)) { + if (sent) { /* try to get more packets going */ - mec_start(ifp); + if_schedule_deferred_start(ifp); } if (handled) Index: src/sys/arch/sun2/dev/if_ec.c diff -u src/sys/arch/sun2/dev/if_ec.c:1.25 src/sys/arch/sun2/dev/if_ec.c:1.26 --- src/sys/arch/sun2/dev/if_ec.c:1.25 Fri Jun 10 13:27:13 2016 +++ src/sys/arch/sun2/dev/if_ec.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_ec.c,v 1.25 2016/06/10 13:27:13 ozaki-r Exp $ */ +/* $NetBSD: if_ec.c,v 1.26 2016/12/08 01:12:01 ozaki-r Exp $ */ /* * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -34,7 +34,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_ec.c,v 1.25 2016/06/10 13:27:13 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_ec.c,v 1.26 2016/12/08 01:12:01 ozaki-r Exp $"); #include "opt_inet.h" #include "opt_ns.h" @@ -232,6 +232,7 @@ ec_attach(device_t parent, device_t self /* Now we can attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); idprom_etheraddr(myaddr); ether_ifattach(ifp, myaddr); aprint_normal_dev(self, "address %s\n", ether_sprintf(myaddr)); @@ -352,7 +353,6 @@ ec_intr(void *arg) int recv_first; int recv_second; int retval; - struct mbuf *m0; retval = 0; @@ -434,9 +434,7 @@ ec_intr(void *arg) sc->sc_ethercom.ec_if.if_opackets++; sc->sc_jammed = 0; ifp->if_flags &= ~IFF_OACTIVE; - IFQ_POLL(&ifp->if_snd, m0); - if (m0 != NULL) - ec_start(ifp); + if_schedule_deferred_start(ifp); } } else { @@ -646,7 +644,6 @@ ec_coll(struct ec_softc *sc) { struct ifnet *ifp = &sc->sc_ethercom.ec_if; u_short jams; - struct mbuf *m0; if ((++sc->sc_colliding) >= EC_COLLISIONS_JAMMED) { sc->sc_ethercom.ec_if.if_oerrors++; @@ -656,9 +653,7 @@ ec_coll(struct ec_softc *sc) sc->sc_jammed = 1; sc->sc_colliding = 0; ifp->if_flags &= ~IFF_OACTIVE; - IFQ_POLL(&ifp->if_snd, m0); - if (m0 != NULL) - ec_start(ifp); + if_schedule_deferred_start(ifp); } else { jams = MAX(sc->sc_colliding, EC_BACKOFF_PRNG_COLL_MAX); sc->sc_backoff_seed = Index: src/sys/arch/x86/pci/if_vmx.c diff -u src/sys/arch/x86/pci/if_vmx.c:1.11 src/sys/arch/x86/pci/if_vmx.c:1.12 --- src/sys/arch/x86/pci/if_vmx.c:1.11 Tue Nov 29 22:27:09 2016 +++ src/sys/arch/x86/pci/if_vmx.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_vmx.c,v 1.11 2016/11/29 22:27:09 dholland Exp $ */ +/* $NetBSD: if_vmx.c,v 1.12 2016/12/08 01:12:01 ozaki-r Exp $ */ /* $OpenBSD: if_vmx.c,v 1.16 2014/01/22 06:04:17 brad Exp $ */ /* @@ -19,7 +19,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_vmx.c,v 1.11 2016/11/29 22:27:09 dholland Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_vmx.c,v 1.12 2016/12/08 01:12:01 ozaki-r Exp $"); #include <sys/param.h> #include <sys/cpu.h> @@ -1717,6 +1717,7 @@ vmxnet3_setup_interface(struct vmxnet3_s ifmedia_set(&sc->vmx_media, IFM_ETHER|IFM_AUTO); if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc->vmx_lladdr); ether_set_ifflags_cb(&sc->vmx_ethercom, vmxnet3_ifflags_cb); vmxnet3_link_status(sc); @@ -1747,7 +1748,7 @@ vmxnet3_evintr(struct vmxnet3_softc *sc) if (event & VMXNET3_EVENT_LINK) { vmxnet3_link_status(sc); if (sc->vmx_link_active != 0) - vmxnet3_start(&sc->vmx_ethercom.ec_if); + if_schedule_deferred_start(&sc->vmx_ethercom.ec_if); } if (event & (VMXNET3_EVENT_TQERROR | VMXNET3_EVENT_RQERROR)) { Index: src/sys/dev/marvell/if_mvgbe.c diff -u src/sys/dev/marvell/if_mvgbe.c:1.45 src/sys/dev/marvell/if_mvgbe.c:1.46 --- src/sys/dev/marvell/if_mvgbe.c:1.45 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/marvell/if_mvgbe.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_mvgbe.c,v 1.45 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_mvgbe.c,v 1.46 2016/12/08 01:12:01 ozaki-r Exp $ */ /* * Copyright (c) 2007, 2008, 2013 KIYOHARA Takashi * All rights reserved. @@ -25,7 +25,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_mvgbe.c,v 1.45 2016/06/10 13:27:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_mvgbe.c,v 1.46 2016/12/08 01:12:01 ozaki-r Exp $"); #include "opt_multiprocessor.h" @@ -909,6 +909,7 @@ mvgbe_attach(device_t parent, device_t s * Call MI attach routines. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc->sc_enaddr); ether_set_ifflags_cb(&sc->sc_ethercom, mvgbe_ifflags_cb); @@ -1050,8 +1051,7 @@ mvgbe_intr(void *arg) mvgbe_txeof(sc); } - if (!IFQ_IS_EMPTY(&ifp->if_snd)) - mvgbe_start(ifp); + if_schedule_deferred_start(ifp); rnd_add_uint32(&sc->sc_rnd_source, datum); Index: src/sys/dev/marvell/if_mvxpe.c diff -u src/sys/dev/marvell/if_mvxpe.c:1.15 src/sys/dev/marvell/if_mvxpe.c:1.16 --- src/sys/dev/marvell/if_mvxpe.c:1.15 Thu Oct 20 09:53:08 2016 +++ src/sys/dev/marvell/if_mvxpe.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_mvxpe.c,v 1.15 2016/10/20 09:53:08 skrll Exp $ */ +/* $NetBSD: if_mvxpe.c,v 1.16 2016/12/08 01:12:01 ozaki-r Exp $ */ /* * Copyright (c) 2015 Internet Initiative Japan Inc. * All rights reserved. @@ -25,7 +25,7 @@ * POSSIBILITY OF SUCH DAMAGE. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_mvxpe.c,v 1.15 2016/10/20 09:53:08 skrll Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_mvxpe.c,v 1.16 2016/12/08 01:12:01 ozaki-r Exp $"); #include "opt_multiprocessor.h" @@ -503,6 +503,7 @@ mvxpe_attach(device_t parent, device_t s * Call MI attach routines. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc->sc_enaddr); ether_set_ifflags_cb(&sc->sc_ethercom, mvxpe_ifflags_cb); @@ -1479,8 +1480,7 @@ mvxpe_rxtxth_intr(void *arg) } mvxpe_sc_unlock(sc); - if (!IFQ_IS_EMPTY(&ifp->if_snd)) - mvxpe_start(ifp); + if_schedule_deferred_start(ifp); rnd_add_uint32(&sc->sc_rnd_source, datum); Index: src/sys/dev/pci/if_age.c diff -u src/sys/dev/pci/if_age.c:1.48 src/sys/dev/pci/if_age.c:1.49 --- src/sys/dev/pci/if_age.c:1.48 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/pci/if_age.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_age.c,v 1.48 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_age.c,v 1.49 2016/12/08 01:12:01 ozaki-r Exp $ */ /* $OpenBSD: if_age.c,v 1.1 2009/01/16 05:00:34 kevlo Exp $ */ /*- @@ -31,7 +31,7 @@ /* Driver for Attansic Technology Corp. L1 Gigabit Ethernet. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_age.c,v 1.48 2016/06/10 13:27:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_age.c,v 1.49 2016/12/08 01:12:01 ozaki-r Exp $"); #include "vlan.h" @@ -285,6 +285,7 @@ age_attach(device_t parent, device_t sel ifmedia_set(&sc->sc_miibus.mii_media, IFM_ETHER | IFM_AUTO); if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc->sc_enaddr); if (pmf_device_register1(self, NULL, age_resume, age_shutdown)) @@ -535,7 +536,7 @@ age_intr(void *arg) age_init(ifp); } - age_start(ifp); + if_schedule_deferred_start(ifp); if (status & INTR_SMB) age_stats_update(sc); Index: src/sys/dev/pci/if_ste.c diff -u src/sys/dev/pci/if_ste.c:1.48 src/sys/dev/pci/if_ste.c:1.49 --- src/sys/dev/pci/if_ste.c:1.48 Thu Jul 7 06:55:41 2016 +++ src/sys/dev/pci/if_ste.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_ste.c,v 1.48 2016/07/07 06:55:41 msaitoh Exp $ */ +/* $NetBSD: if_ste.c,v 1.49 2016/12/08 01:12:01 ozaki-r Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_ste.c,v 1.48 2016/07/07 06:55:41 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_ste.c,v 1.49 2016/12/08 01:12:01 ozaki-r Exp $"); #include <sys/param.h> @@ -505,6 +505,7 @@ ste_attach(device_t parent, device_t sel * Attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, enaddr); /* @@ -912,7 +913,7 @@ ste_intr(void *arg) sc->sc_IntEnable); /* Try to get more packets going. */ - ste_start(ifp); + if_schedule_deferred_start(ifp); return (1); } Index: src/sys/dev/pci/if_alc.c diff -u src/sys/dev/pci/if_alc.c:1.21 src/sys/dev/pci/if_alc.c:1.22 --- src/sys/dev/pci/if_alc.c:1.21 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/pci/if_alc.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_alc.c,v 1.21 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_alc.c,v 1.22 2016/12/08 01:12:01 ozaki-r Exp $ */ /* $OpenBSD: if_alc.c,v 1.1 2009/08/08 09:31:13 kevlo Exp $ */ /*- * Copyright (c) 2009, Pyun YongHyeon <yong...@freebsd.org> @@ -1466,6 +1466,7 @@ alc_attach(device_t parent, device_t sel ifmedia_set(&sc->sc_miibus.mii_media, IFM_ETHER | IFM_AUTO); if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc->alc_eaddr); if (!pmf_device_register(self, NULL, NULL)) @@ -2300,8 +2301,7 @@ alc_intr(void *arg) } alc_txeof(sc); - if (!IFQ_IS_EMPTY(&ifp->if_snd)) - alc_start(ifp); + if_schedule_deferred_start(ifp); } /* Re-enable interrupts. */ Index: src/sys/dev/pci/if_bce.c diff -u src/sys/dev/pci/if_bce.c:1.42 src/sys/dev/pci/if_bce.c:1.43 --- src/sys/dev/pci/if_bce.c:1.42 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/pci/if_bce.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_bce.c,v 1.42 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_bce.c,v 1.43 2016/12/08 01:12:01 ozaki-r Exp $ */ /* * Copyright (c) 2003 Clifford Wright. All rights reserved. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_bce.c,v 1.42 2016/06/10 13:27:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_bce.c,v 1.43 2016/12/08 01:12:01 ozaki-r Exp $"); #include "vlan.h" @@ -445,6 +445,7 @@ bce_attach(device_t parent, device_t sel /* Attach the interface */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); sc->enaddr[0] = bus_space_read_1(sc->bce_btag, sc->bce_bhandle, BCE_MAGIC_ENET0); sc->enaddr[1] = bus_space_read_1(sc->bce_btag, sc->bce_bhandle, @@ -713,7 +714,7 @@ bce_intr(void *xsc) bce_init(ifp); rnd_add_uint32(&sc->rnd_source, intstatus); /* Try to get more packets going. */ - bce_start(ifp); + if_schedule_deferred_start(ifp); } return (handled); } Index: src/sys/dev/pci/if_bge.c diff -u src/sys/dev/pci/if_bge.c:1.298 src/sys/dev/pci/if_bge.c:1.299 --- src/sys/dev/pci/if_bge.c:1.298 Mon Jul 11 06:14:51 2016 +++ src/sys/dev/pci/if_bge.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_bge.c,v 1.298 2016/07/11 06:14:51 knakahara Exp $ */ +/* $NetBSD: if_bge.c,v 1.299 2016/12/08 01:12:01 ozaki-r Exp $ */ /* * Copyright (c) 2001 Wind River Systems @@ -79,7 +79,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.298 2016/07/11 06:14:51 knakahara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_bge.c,v 1.299 2016/12/08 01:12:01 ozaki-r Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -4061,6 +4061,7 @@ alloc_retry: */ DPRINTFN(5, ("if_attach\n")); if_attach(ifp); + if_deferred_start_init(ifp, NULL); DPRINTFN(5, ("ether_ifattach\n")); ether_ifattach(ifp, eaddr); ether_set_ifflags_cb(&sc->ethercom, bge_ifflags_cb); @@ -4788,8 +4789,8 @@ bge_intr(void *xsc) /* Re-enable interrupts. */ bge_writembx_flush(sc, BGE_MBX_IRQ0_LO, statustag); - if (ifp->if_flags & IFF_RUNNING && !IFQ_IS_EMPTY(&ifp->if_snd)) - bge_start(ifp); + if (ifp->if_flags & IFF_RUNNING) + if_schedule_deferred_start(ifp); return 1; } Index: src/sys/dev/pci/if_bnx.c diff -u src/sys/dev/pci/if_bnx.c:1.59 src/sys/dev/pci/if_bnx.c:1.60 --- src/sys/dev/pci/if_bnx.c:1.59 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/pci/if_bnx.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_bnx.c,v 1.59 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_bnx.c,v 1.60 2016/12/08 01:12:01 ozaki-r Exp $ */ /* $OpenBSD: if_bnx.c,v 1.85 2009/11/09 14:32:41 dlg Exp $ */ /*- @@ -35,7 +35,7 @@ #if 0 __FBSDID("$FreeBSD: src/sys/dev/bce/if_bce.c,v 1.3 2006/04/13 14:12:26 ru Exp $"); #endif -__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.59 2016/06/10 13:27:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_bnx.c,v 1.60 2016/12/08 01:12:01 ozaki-r Exp $"); /* * The following controllers are supported by this driver: @@ -846,6 +846,7 @@ bnx_attach(device_t parent, device_t sel /* Attach to the Ethernet interface list. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp,sc->eaddr); callout_init(&sc->bnx_timeout, 0); @@ -5384,8 +5385,7 @@ bnx_intr(void *xsc) BNX_PCICFG_INT_ACK_CMD_INDEX_VALID | sc->last_status_idx); /* Handle any frames that arrived while handling the interrupt. */ - if (!IFQ_IS_EMPTY(&ifp->if_snd)) - bnx_start(ifp); + if_schedule_deferred_start(ifp); return 1; } Index: src/sys/dev/pci/if_cas.c diff -u src/sys/dev/pci/if_cas.c:1.24 src/sys/dev/pci/if_cas.c:1.25 --- src/sys/dev/pci/if_cas.c:1.24 Tue Feb 9 08:32:11 2016 +++ src/sys/dev/pci/if_cas.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_cas.c,v 1.24 2016/02/09 08:32:11 ozaki-r Exp $ */ +/* $NetBSD: if_cas.c,v 1.25 2016/12/08 01:12:01 ozaki-r Exp $ */ /* $OpenBSD: if_cas.c,v 1.29 2009/11/29 16:19:38 kettenis Exp $ */ /* @@ -44,7 +44,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_cas.c,v 1.24 2016/02/09 08:32:11 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_cas.c,v 1.25 2016/12/08 01:12:01 ozaki-r Exp $"); #ifndef _MODULE #include "opt_inet.h" @@ -609,6 +609,7 @@ cas_config(struct cas_softc *sc, const u /* Attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, enaddr); rnd_attach_source(&sc->rnd_source, device_xname(sc->sc_dev), @@ -2016,7 +2017,7 @@ cas_tint(struct cas_softc *sc, u_int32_t if (sc->sc_tx_cnt == 0) ifp->if_timer = 0; - cas_start(ifp); + if_schedule_deferred_start(ifp); return (1); } Index: src/sys/dev/pci/if_de.c diff -u src/sys/dev/pci/if_de.c:1.147 src/sys/dev/pci/if_de.c:1.148 --- src/sys/dev/pci/if_de.c:1.147 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/pci/if_de.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_de.c,v 1.147 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_de.c,v 1.148 2016/12/08 01:12:01 ozaki-r Exp $ */ /*- * Copyright (c) 1994-1997 Matt Thomas (m...@3am-software.com) @@ -37,7 +37,7 @@ * board which support 21040, 21041, or 21140 (mostly). */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_de.c,v 1.147 2016/06/10 13:27:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_de.c,v 1.148 2016/12/08 01:12:01 ozaki-r Exp $"); #define TULIP_HDR_DATA @@ -4111,7 +4111,7 @@ tulip_intr_handler( if (sc->tulip_flags & (TULIP_WANTTXSTART|TULIP_TXPROBE_ACTIVE|TULIP_DOINGSETUP|TULIP_PROMISC)) { tulip_tx_intr(sc); if ((sc->tulip_flags & TULIP_TXPROBE_ACTIVE) == 0) - tulip_ifstart(&sc->tulip_if); + if_schedule_deferred_start(&sc->tulip_if); } } if (sc->tulip_flags & TULIP_NEEDRESET) { @@ -5136,6 +5136,7 @@ tulip_attach( TULIP_ETHER_IFATTACH(sc); #else if_attach(ifp); + if_deferred_start_init(ifp, NULL); #if defined(__NetBSD__) || (defined(__FreeBSD__) && BSD >= 199506) TULIP_ETHER_IFATTACH(sc); #endif Index: src/sys/dev/pci/if_dge.c diff -u src/sys/dev/pci/if_dge.c:1.45 src/sys/dev/pci/if_dge.c:1.46 --- src/sys/dev/pci/if_dge.c:1.45 Thu Jul 7 06:55:41 2016 +++ src/sys/dev/pci/if_dge.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_dge.c,v 1.45 2016/07/07 06:55:41 msaitoh Exp $ */ +/* $NetBSD: if_dge.c,v 1.46 2016/12/08 01:12:01 ozaki-r Exp $ */ /* * Copyright (c) 2004, SUNET, Swedish University Computer Network. @@ -80,7 +80,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_dge.c,v 1.45 2016/07/07 06:55:41 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_dge.c,v 1.46 2016/12/08 01:12:01 ozaki-r Exp $"); @@ -943,6 +943,7 @@ dge_attach(device_t parent, device_t sel * Attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, enaddr); rnd_attach_source(&sc->rnd_source, device_xname(sc->sc_dev), RND_TYPE_NET, RND_FLAG_DEFAULT); @@ -1578,7 +1579,7 @@ dge_intr(void *arg) dge_init(ifp); /* Try to get more packets going. */ - dge_start(ifp); + if_schedule_deferred_start(ifp); } return (handled); Index: src/sys/dev/pci/if_txp.c diff -u src/sys/dev/pci/if_txp.c:1.45 src/sys/dev/pci/if_txp.c:1.46 --- src/sys/dev/pci/if_txp.c:1.45 Thu Jul 14 10:19:06 2016 +++ src/sys/dev/pci/if_txp.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_txp.c,v 1.45 2016/07/14 10:19:06 msaitoh Exp $ */ +/* $NetBSD: if_txp.c,v 1.46 2016/12/08 01:12:01 ozaki-r Exp $ */ /* * Copyright (c) 2001 @@ -32,7 +32,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_txp.c,v 1.45 2016/07/14 10:19:06 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_txp.c,v 1.46 2016/12/08 01:12:01 ozaki-r Exp $"); #include "opt_inet.h" @@ -343,6 +343,7 @@ txp_attach(device_t parent, device_t sel * Attach us everywhere */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, enaddr); if (pmf_device_register1(self, NULL, NULL, txp_shutdown)) @@ -652,7 +653,7 @@ txp_intr(void *vsc) /* unmask all interrupts */ WRITE_REG(sc, TXP_IMR, TXP_INT_A2H_3); - txp_start(&sc->sc_arpcom.ec_if); + if_schedule_deferred_start(&sc->sc_arpcom.ec_if); return (claimed); } Index: src/sys/dev/pci/if_et.c diff -u src/sys/dev/pci/if_et.c:1.12 src/sys/dev/pci/if_et.c:1.13 --- src/sys/dev/pci/if_et.c:1.12 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/pci/if_et.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_et.c,v 1.12 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_et.c,v 1.13 2016/12/08 01:12:01 ozaki-r Exp $ */ /* $OpenBSD: if_et.c,v 1.11 2008/06/08 06:18:07 jsg Exp $ */ /* * Copyright (c) 2007 The DragonFly Project. All rights reserved. @@ -37,7 +37,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_et.c,v 1.12 2016/06/10 13:27:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_et.c,v 1.13 2016/12/08 01:12:01 ozaki-r Exp $"); #include "opt_inet.h" #include "vlan.h" @@ -284,6 +284,7 @@ et_attach(device_t parent, device_t self ifmedia_set(&sc->sc_miibus.mii_media, IFM_ETHER | IFM_AUTO); if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc->sc_enaddr); callout_init(&sc->sc_tick, 0); @@ -1971,7 +1972,7 @@ et_txeof(struct et_softc *sc) if (tbd->tbd_used + ET_NSEG_SPARE <= ET_TX_NDESC) ifp->if_flags &= ~IFF_OACTIVE; - et_start(ifp); + if_schedule_deferred_start(ifp); } void Index: src/sys/dev/pci/if_ipw.c diff -u src/sys/dev/pci/if_ipw.c:1.60 src/sys/dev/pci/if_ipw.c:1.61 --- src/sys/dev/pci/if_ipw.c:1.60 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/pci/if_ipw.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_ipw.c,v 1.60 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_ipw.c,v 1.61 2016/12/08 01:12:01 ozaki-r Exp $ */ /* FreeBSD: src/sys/dev/ipw/if_ipw.c,v 1.15 2005/11/13 17:17:40 damien Exp */ /*- @@ -29,7 +29,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_ipw.c,v 1.60 2016/06/10 13:27:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_ipw.c,v 1.61 2016/12/08 01:12:01 ozaki-r Exp $"); /*- * Intel(R) PRO/Wireless 2100 MiniPCI driver @@ -297,6 +297,7 @@ ipw_attach(device_t parent, device_t sel ether_sprintf(ic->ic_myaddr)); if_attach(ifp); + if_deferred_start_init(ifp, NULL); ieee80211_ifattach(ic); /* override state transition machine */ @@ -1215,7 +1216,7 @@ ipw_tx_intr(struct ipw_softc *sc) /* Call start() since some buffer descriptors have been released */ ifp->if_flags &= ~IFF_OACTIVE; - (*ifp->if_start)(ifp); + if_schedule_deferred_start(ifp); } static int Index: src/sys/dev/pci/if_stge.c diff -u src/sys/dev/pci/if_stge.c:1.60 src/sys/dev/pci/if_stge.c:1.61 --- src/sys/dev/pci/if_stge.c:1.60 Thu Jul 7 06:55:41 2016 +++ src/sys/dev/pci/if_stge.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_stge.c,v 1.60 2016/07/07 06:55:41 msaitoh Exp $ */ +/* $NetBSD: if_stge.c,v 1.61 2016/12/08 01:12:01 ozaki-r Exp $ */ /*- * Copyright (c) 2001 The NetBSD Foundation, Inc. @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_stge.c,v 1.60 2016/07/07 06:55:41 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_stge.c,v 1.61 2016/12/08 01:12:01 ozaki-r Exp $"); #include <sys/param.h> @@ -658,6 +658,7 @@ stge_attach(device_t parent, device_t se * Attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, enaddr); #ifdef STGE_EVENT_COUNTERS @@ -1141,7 +1142,7 @@ stge_intr(void *arg) sc->sc_IntEnable); /* Try to get more packets going. */ - stge_start(ifp); + if_schedule_deferred_start(ifp); return (1); } Index: src/sys/dev/pci/if_iwi.c diff -u src/sys/dev/pci/if_iwi.c:1.100 src/sys/dev/pci/if_iwi.c:1.101 --- src/sys/dev/pci/if_iwi.c:1.100 Wed Aug 3 19:59:57 2016 +++ src/sys/dev/pci/if_iwi.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_iwi.c,v 1.100 2016/08/03 19:59:57 mlelstv Exp $ */ +/* $NetBSD: if_iwi.c,v 1.101 2016/12/08 01:12:01 ozaki-r Exp $ */ /* $OpenBSD: if_iwi.c,v 1.111 2010/11/15 19:11:57 damien Exp $ */ /*- @@ -19,7 +19,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_iwi.c,v 1.100 2016/08/03 19:59:57 mlelstv Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_iwi.c,v 1.101 2016/12/08 01:12:01 ozaki-r Exp $"); /*- * Intel(R) PRO/Wireless 2200BG/2225BG/2915ABG driver @@ -355,6 +355,7 @@ iwi_attach(device_t parent, device_t sel memcpy(ifp->if_xname, device_xname(self), IFNAMSIZ); if_attach(ifp); + if_deferred_start_init(ifp, NULL); ieee80211_ifattach(ic); /* override default methods */ ic->ic_node_alloc = iwi_node_alloc; @@ -1444,7 +1445,7 @@ iwi_tx_intr(struct iwi_softc *sc, struct ifp->if_flags &= ~IFF_OACTIVE; /* Call start() since some buffer descriptors have been released */ - (*ifp->if_start)(ifp); + if_schedule_deferred_start(ifp); } static int Index: src/sys/dev/pci/if_iwm.c diff -u src/sys/dev/pci/if_iwm.c:1.43 src/sys/dev/pci/if_iwm.c:1.44 --- src/sys/dev/pci/if_iwm.c:1.43 Fri Sep 23 19:53:52 2016 +++ src/sys/dev/pci/if_iwm.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_iwm.c,v 1.43 2016/09/23 19:53:52 maya Exp $ */ +/* $NetBSD: if_iwm.c,v 1.44 2016/12/08 01:12:01 ozaki-r Exp $ */ /* OpenBSD: if_iwm.c,v 1.41 2015/05/22 06:50:54 kettenis Exp */ /* @@ -105,7 +105,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_iwm.c,v 1.43 2016/09/23 19:53:52 maya Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_iwm.c,v 1.44 2016/12/08 01:12:01 ozaki-r Exp $"); #include <sys/param.h> #include <sys/conf.h> @@ -3330,7 +3330,7 @@ iwm_mvm_rx_tx_cmd(struct iwm_softc *sc, * I guess net80211 does all sorts of stunts in * interrupt context, so maybe this is no biggie. */ - (*ifp->if_start)(ifp); + if_schedule_deferred_start(ifp); } } } @@ -6831,9 +6831,10 @@ iwm_attach(device_t parent, device_t sel #else ether_ifattach(ifp, ic->ic_myaddr); /* XXX */ #endif - if_register(ifp); /* Use common softint-based if_input */ ifp->if_percpuq = if_percpuq_create(ifp); + if_deferred_start_init(ifp, NULL); + if_register(ifp); callout_init(&sc->sc_calib_to, 0); callout_setfunc(&sc->sc_calib_to, iwm_calib_timeout, sc); Index: src/sys/dev/pci/if_iwn.c diff -u src/sys/dev/pci/if_iwn.c:1.80 src/sys/dev/pci/if_iwn.c:1.81 --- src/sys/dev/pci/if_iwn.c:1.80 Thu Nov 24 12:32:47 2016 +++ src/sys/dev/pci/if_iwn.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_iwn.c,v 1.80 2016/11/24 12:32:47 hkenken Exp $ */ +/* $NetBSD: if_iwn.c,v 1.81 2016/12/08 01:12:01 ozaki-r Exp $ */ /* $OpenBSD: if_iwn.c,v 1.135 2014/09/10 07:22:09 dcoppa Exp $ */ /*- @@ -22,7 +22,7 @@ * adapters. */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_iwn.c,v 1.80 2016/11/24 12:32:47 hkenken Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_iwn.c,v 1.81 2016/12/08 01:12:01 ozaki-r Exp $"); #define IWN_USE_RBUF /* Use local storage for RX */ #undef IWN_HWCRYPTO /* XXX does not even compile yet */ @@ -593,6 +593,7 @@ iwn_attach(device_t parent __unused, dev memcpy(ifp->if_xname, device_xname(self), IFNAMSIZ); if_attach(ifp); + if_deferred_start_init(ifp, NULL); ieee80211_ifattach(ic); ic->ic_node_alloc = iwn_node_alloc; ic->ic_newassoc = iwn_newassoc; @@ -2341,7 +2342,7 @@ iwn_tx_done(struct iwn_softc *sc, struct sc->qfullmsk &= ~(1 << ring->qid); if (sc->qfullmsk == 0 && (ifp->if_flags & IFF_OACTIVE)) { ifp->if_flags &= ~IFF_OACTIVE; - (*ifp->if_start)(ifp); + if_schedule_deferred_start(ifp); } } } Index: src/sys/dev/pci/if_lii.c diff -u src/sys/dev/pci/if_lii.c:1.15 src/sys/dev/pci/if_lii.c:1.16 --- src/sys/dev/pci/if_lii.c:1.15 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/pci/if_lii.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_lii.c,v 1.15 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_lii.c,v 1.16 2016/12/08 01:12:01 ozaki-r Exp $ */ /* * Copyright (c) 2008 The NetBSD Foundation. @@ -31,7 +31,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_lii.c,v 1.15 2016/06/10 13:27:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_lii.c,v 1.16 2016/12/08 01:12:01 ozaki-r Exp $"); #include <sys/param.h> @@ -336,6 +336,7 @@ lii_attach(device_t parent, device_t sel sc->sc_ec.ec_capabilities = ETHERCAP_VLAN_MTU; if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, eaddr); if (pmf_device_register(self, NULL, NULL)) @@ -1048,7 +1049,7 @@ lii_txintr(struct lii_softc *sc) } if (sc->sc_free_tx_slots) - lii_start(ifp); + if_schedule_deferred_start(ifp); } static int Index: src/sys/dev/pci/if_msk.c diff -u src/sys/dev/pci/if_msk.c:1.52 src/sys/dev/pci/if_msk.c:1.53 --- src/sys/dev/pci/if_msk.c:1.52 Sun Nov 6 21:51:31 2016 +++ src/sys/dev/pci/if_msk.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_msk.c,v 1.52 2016/11/06 21:51:31 christos Exp $ */ +/* $NetBSD: if_msk.c,v 1.53 2016/12/08 01:12:01 ozaki-r Exp $ */ /* $OpenBSD: if_msk.c,v 1.42 2007/01/17 02:43:02 krw Exp $ */ /* @@ -52,7 +52,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_msk.c,v 1.52 2016/11/06 21:51:31 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_msk.c,v 1.53 2016/12/08 01:12:01 ozaki-r Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1135,6 +1135,7 @@ msk_attach(device_t parent, device_t sel * Call MI attach routines. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc_if->sk_enaddr); if (pmf_device_register(self, NULL, msk_resume)) @@ -1972,10 +1973,10 @@ msk_intr(void *xsc) CSR_WRITE_4(sc, SK_Y2_ICR, 2); - if (ifp0 != NULL && !IFQ_IS_EMPTY(&ifp0->if_snd)) - msk_start(ifp0); - if (ifp1 != NULL && !IFQ_IS_EMPTY(&ifp1->if_snd)) - msk_start(ifp1); + if (ifp0 != NULL) + if_schedule_deferred_start(ifp0); + if (ifp1 != NULL) + if_schedule_deferred_start(ifp1); rnd_add_uint32(&sc->rnd_source, status); Index: src/sys/dev/pci/if_nfe.c diff -u src/sys/dev/pci/if_nfe.c:1.61 src/sys/dev/pci/if_nfe.c:1.62 --- src/sys/dev/pci/if_nfe.c:1.61 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/pci/if_nfe.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_nfe.c,v 1.61 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_nfe.c,v 1.62 2016/12/08 01:12:01 ozaki-r Exp $ */ /* $OpenBSD: if_nfe.c,v 1.77 2008/02/05 16:52:50 brad Exp $ */ /*- @@ -21,7 +21,7 @@ /* Driver for NVIDIA nForce MCP Fast Ethernet and Gigabit Ethernet */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_nfe.c,v 1.61 2016/06/10 13:27:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_nfe.c,v 1.62 2016/12/08 01:12:01 ozaki-r Exp $"); #include "opt_inet.h" #include "vlan.h" @@ -409,6 +409,7 @@ nfe_attach(device_t parent, device_t sel ifmedia_set(&sc->sc_mii.mii_media, IFM_ETHER | IFM_AUTO); if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc->sc_enaddr); ether_set_ifflags_cb(&sc->sc_ethercom, nfe_ifflags_cb); @@ -631,8 +632,8 @@ nfe_intr(void *arg) } } - if (handled && !IF_IS_EMPTY(&ifp->if_snd)) - nfe_start(ifp); + if (handled) + if_schedule_deferred_start(ifp); return handled; } Index: src/sys/dev/pci/if_pcn.c diff -u src/sys/dev/pci/if_pcn.c:1.62 src/sys/dev/pci/if_pcn.c:1.63 --- src/sys/dev/pci/if_pcn.c:1.62 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/pci/if_pcn.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_pcn.c,v 1.62 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_pcn.c,v 1.63 2016/12/08 01:12:01 ozaki-r Exp $ */ /* * Copyright (c) 2001 Wasabi Systems, Inc. @@ -65,7 +65,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_pcn.c,v 1.62 2016/06/10 13:27:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_pcn.c,v 1.63 2016/12/08 01:12:01 ozaki-r Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -812,6 +812,7 @@ pcn_attach(device_t parent, device_t sel /* Attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, enaddr); rnd_attach_source(&sc->rnd_source, device_xname(self), RND_TYPE_NET, RND_FLAG_DEFAULT); @@ -1288,7 +1289,7 @@ pcn_intr(void *arg) pcn_init(ifp); /* Try to get more packets going. */ - pcn_start(ifp); + if_schedule_deferred_start(ifp); } return (handled); Index: src/sys/dev/pci/if_rtwn.c diff -u src/sys/dev/pci/if_rtwn.c:1.8 src/sys/dev/pci/if_rtwn.c:1.9 --- src/sys/dev/pci/if_rtwn.c:1.8 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/pci/if_rtwn.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_rtwn.c,v 1.8 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_rtwn.c,v 1.9 2016/12/08 01:12:01 ozaki-r Exp $ */ /* $OpenBSD: if_rtwn.c,v 1.5 2015/06/14 08:02:47 stsp Exp $ */ #define IEEE80211_NO_HT /*- @@ -23,7 +23,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_rtwn.c,v 1.8 2016/06/10 13:27:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_rtwn.c,v 1.9 2016/12/08 01:12:01 ozaki-r Exp $"); #include <sys/param.h> #include <sys/sockio.h> @@ -357,9 +357,10 @@ rtwn_attach(device_t parent, device_t se if_initialize(ifp); ieee80211_ifattach(ic); - if_register(ifp); /* Use common softint-based if_input */ ifp->if_percpuq = if_percpuq_create(ifp); + if_deferred_start_init(ifp, NULL); + if_register(ifp); /* override default methods */ ic->ic_newassoc = rtwn_newassoc; @@ -3519,7 +3520,7 @@ rtwn_intr(void *xsc) if ((status & RTWN_INT_ENABLE_TX) && sc->qfullmsk == 0) { struct ifnet *ifp = GET_IFP(sc); ifp->if_flags &= ~IFF_OACTIVE; - rtwn_start(ifp); + if_schedule_deferred_start(ifp); } /* Enable interrupts. */ Index: src/sys/dev/pci/if_sip.c diff -u src/sys/dev/pci/if_sip.c:1.163 src/sys/dev/pci/if_sip.c:1.164 --- src/sys/dev/pci/if_sip.c:1.163 Thu Jul 14 10:19:06 2016 +++ src/sys/dev/pci/if_sip.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_sip.c,v 1.163 2016/07/14 10:19:06 msaitoh Exp $ */ +/* $NetBSD: if_sip.c,v 1.164 2016/12/08 01:12:01 ozaki-r Exp $ */ /*- * Copyright (c) 2001, 2002 The NetBSD Foundation, Inc. @@ -73,7 +73,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_sip.c,v 1.163 2016/07/14 10:19:06 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_sip.c,v 1.164 2016/12/08 01:12:01 ozaki-r Exp $"); @@ -1283,6 +1283,7 @@ sipcom_attach(device_t parent, device_t * Attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, enaddr); ether_set_ifflags_cb(&sc->sc_ethercom, sip_ifflags_cb); sc->sc_prev.ec_capenable = sc->sc_ethercom.ec_capenable; @@ -1952,7 +1953,7 @@ sipcom_intr(void *arg) bus_space_write_4(sc->sc_st, sc->sc_sh, SIP_IER, IER_IE); /* Try to get more packets going. */ - sipcom_start(ifp); + if_schedule_deferred_start(ifp); return (handled); } Index: src/sys/dev/pci/if_sk.c diff -u src/sys/dev/pci/if_sk.c:1.82 src/sys/dev/pci/if_sk.c:1.83 --- src/sys/dev/pci/if_sk.c:1.82 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/pci/if_sk.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_sk.c,v 1.82 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_sk.c,v 1.83 2016/12/08 01:12:01 ozaki-r Exp $ */ /*- * Copyright (c) 2003 The NetBSD Foundation, Inc. @@ -115,7 +115,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_sk.c,v 1.82 2016/06/10 13:27:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_sk.c,v 1.83 2016/12/08 01:12:01 ozaki-r Exp $"); #include <sys/param.h> #include <sys/systm.h> @@ -1458,6 +1458,7 @@ sk_attach(device_t parent, device_t self * Call MI attach routines. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc_if->sk_enaddr); @@ -2397,10 +2398,10 @@ sk_intr(void *xsc) CSR_WRITE_4(sc, SK_IMR, sc->sk_intrmask); - if (ifp0 != NULL && !IFQ_IS_EMPTY(&ifp0->if_snd)) - sk_start(ifp0); - if (ifp1 != NULL && !IFQ_IS_EMPTY(&ifp1->if_snd)) - sk_start(ifp1); + if (ifp0 != NULL) + if_schedule_deferred_start(ifp0); + if (ifp1 != NULL) + if_schedule_deferred_start(ifp1); rnd_add_uint32(&sc->rnd_source, status); Index: src/sys/dev/pci/if_ti.c diff -u src/sys/dev/pci/if_ti.c:1.99 src/sys/dev/pci/if_ti.c:1.100 --- src/sys/dev/pci/if_ti.c:1.99 Thu Jul 14 04:15:27 2016 +++ src/sys/dev/pci/if_ti.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_ti.c,v 1.99 2016/07/14 04:15:27 msaitoh Exp $ */ +/* $NetBSD: if_ti.c,v 1.100 2016/12/08 01:12:01 ozaki-r Exp $ */ /* * Copyright (c) 1997, 1998, 1999 @@ -81,7 +81,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_ti.c,v 1.99 2016/07/14 04:15:27 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_ti.c,v 1.100 2016/12/08 01:12:01 ozaki-r Exp $"); #include "opt_inet.h" @@ -1866,6 +1866,7 @@ ti_attach(device_t parent, device_t self * Call MI attach routines. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, eaddr); /* @@ -2180,9 +2181,8 @@ ti_intr(void *xsc) /* Re-enable interrupts. */ CSR_WRITE_4(sc, TI_MB_HOSTINTR, 0); - if ((ifp->if_flags & IFF_RUNNING) != 0 && - IFQ_IS_EMPTY(&ifp->if_snd) == 0) - ti_start(ifp); + if ((ifp->if_flags & IFF_RUNNING) != 0) + if_schedule_deferred_start(ifp); return (1); } Index: src/sys/dev/pci/if_vge.c diff -u src/sys/dev/pci/if_vge.c:1.58 src/sys/dev/pci/if_vge.c:1.59 --- src/sys/dev/pci/if_vge.c:1.58 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/pci/if_vge.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_vge.c,v 1.58 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_vge.c,v 1.59 2016/12/08 01:12:01 ozaki-r Exp $ */ /*- * Copyright (c) 2004 @@ -35,7 +35,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_vge.c,v 1.58 2016/06/10 13:27:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_vge.c,v 1.59 2016/12/08 01:12:01 ozaki-r Exp $"); /* * VIA Networking Technologies VT612x PCI gigabit ethernet NIC driver. @@ -1067,6 +1067,7 @@ vge_attach(device_t parent, device_t sel * Attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, eaddr); ether_set_ifflags_cb(&sc->sc_ethercom, vge_ifflags_cb); @@ -1529,8 +1530,8 @@ vge_intr(void *arg) /* Re-enable interrupts */ CSR_WRITE_1(sc, VGE_CRS3, VGE_CR3_INT_GMSK); - if (claim && !IFQ_IS_EMPTY(&ifp->if_snd)) - vge_start(ifp); + if (claim) + if_schedule_deferred_start(ifp); return claim; } Index: src/sys/dev/pci/if_vioif.c diff -u src/sys/dev/pci/if_vioif.c:1.27 src/sys/dev/pci/if_vioif.c:1.28 --- src/sys/dev/pci/if_vioif.c:1.27 Tue Nov 29 21:54:11 2016 +++ src/sys/dev/pci/if_vioif.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_vioif.c,v 1.27 2016/11/29 21:54:11 uwe Exp $ */ +/* $NetBSD: if_vioif.c,v 1.28 2016/12/08 01:12:01 ozaki-r Exp $ */ /* * Copyright (c) 2010 Minoura Makoto. @@ -26,7 +26,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.27 2016/11/29 21:54:11 uwe Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_vioif.c,v 1.28 2016/12/08 01:12:01 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_net_mpsafe.h" @@ -672,6 +672,7 @@ skip: sc->sc_ethercom.ec_capabilities |= ETHERCAP_VLAN_MTU; if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc->sc_mac); return; @@ -1130,7 +1131,7 @@ vioif_tx_vq_done(struct virtqueue *vq) out: VIOIF_TX_UNLOCK(sc); if (r) - vioif_start(ifp); + if_schedule_deferred_start(ifp); return r; } Index: src/sys/dev/pci/if_vr.c diff -u src/sys/dev/pci/if_vr.c:1.119 src/sys/dev/pci/if_vr.c:1.120 --- src/sys/dev/pci/if_vr.c:1.119 Thu Jul 14 04:00:46 2016 +++ src/sys/dev/pci/if_vr.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_vr.c,v 1.119 2016/07/14 04:00:46 msaitoh Exp $ */ +/* $NetBSD: if_vr.c,v 1.120 2016/12/08 01:12:01 ozaki-r Exp $ */ /*- * Copyright (c) 1998, 1999 The NetBSD Foundation, Inc. @@ -97,7 +97,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_vr.c,v 1.119 2016/07/14 04:00:46 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_vr.c,v 1.120 2016/12/08 01:12:01 ozaki-r Exp $"); @@ -987,7 +987,7 @@ vr_intr(void *arg) CSR_WRITE_2(sc, VR_IMR, VR_INTRS); if (dotx) - vr_start(ifp); + if_schedule_deferred_start(ifp); return (handled); } @@ -1745,6 +1745,7 @@ vr_attach(device_t parent, device_t self * Call MI attach routines. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, sc->vr_enaddr); rnd_attach_source(&sc->rnd_source, device_xname(self), Index: src/sys/dev/pci/if_wm.c diff -u src/sys/dev/pci/if_wm.c:1.455 src/sys/dev/pci/if_wm.c:1.456 --- src/sys/dev/pci/if_wm.c:1.455 Fri Dec 2 01:48:44 2016 +++ src/sys/dev/pci/if_wm.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_wm.c,v 1.455 2016/12/02 01:48:44 knakahara Exp $ */ +/* $NetBSD: if_wm.c,v 1.456 2016/12/08 01:12:01 ozaki-r Exp $ */ /* * Copyright (c) 2001, 2002, 2003, 2004 Wasabi Systems, Inc. @@ -84,7 +84,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.455 2016/12/02 01:48:44 knakahara Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_wm.c,v 1.456 2016/12/08 01:12:01 ozaki-r Exp $"); #ifdef _KERNEL_OPT #include "opt_net_mpsafe.h" @@ -696,6 +696,7 @@ static void wm_nq_start_locked(struct if static int wm_nq_transmit(struct ifnet *, struct mbuf *); static void wm_nq_transmit_locked(struct ifnet *, struct wm_txqueue *); static void wm_nq_send_common_locked(struct ifnet *, struct wm_txqueue *, bool); +static void wm_deferred_start(struct ifnet *); /* Interrupt */ static int wm_txeof(struct wm_softc *, struct wm_txqueue *); static void wm_rxeof(struct wm_rxqueue *); @@ -1612,6 +1613,7 @@ wm_attach(device_t parent, device_t self bool force_clear_smbi; uint32_t link_mode; uint32_t reg; + void (*deferred_start_func)(struct ifnet *) = NULL; sc->sc_dev = self; callout_init(&sc->sc_tick_ch, CALLOUT_FLAGS); @@ -2514,12 +2516,16 @@ alloc_retry: ifp->if_ioctl = wm_ioctl; if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) { ifp->if_start = wm_nq_start; - if (sc->sc_nqueues > 1) + if (sc->sc_nqueues > 1) { ifp->if_transmit = wm_nq_transmit; + deferred_start_func = wm_deferred_start; + } } else { ifp->if_start = wm_start; - if (sc->sc_nqueues > 1) + if (sc->sc_nqueues > 1) { ifp->if_transmit = wm_transmit; + deferred_start_func = wm_deferred_start; + } } ifp->if_watchdog = wm_watchdog; ifp->if_init = wm_init; @@ -2620,6 +2626,7 @@ alloc_retry: /* Attach the interface. */ if_initialize(ifp); sc->sc_ipq = if_percpuq_create(&sc->sc_ethercom.ec_if); + if_deferred_start_init(ifp, deferred_start_func); ether_ifattach(ifp, enaddr); if_register(ifp); ether_set_ifflags_cb(&sc->sc_ethercom, wm_ifflags_cb); @@ -7245,6 +7252,53 @@ wm_nq_send_common_locked(struct ifnet *i } } +static void +wm_deferred_start(struct ifnet *ifp) +{ + struct wm_softc *sc = ifp->if_softc; + int qid = 0; + + /* + * Try to transmit on all Tx queues. Passing a txq somehow and + * transmitting only on the txq may be better. + */ +restart: + WM_CORE_LOCK(sc); + if (sc->sc_core_stopping) + goto out; + + for (; qid < sc->sc_nqueues; qid++) { + struct wm_txqueue *txq = &sc->sc_queue[qid].wmq_txq; + + if (!mutex_tryenter(txq->txq_lock)) + continue; + + if (txq->txq_stopping) { + mutex_exit(txq->txq_lock); + continue; + } + WM_CORE_UNLOCK(sc); + + if ((sc->sc_flags & WM_F_NEWQUEUE) != 0) { + /* XXX need for ALTQ */ + if (qid == 0) + wm_nq_start_locked(ifp); + wm_nq_transmit_locked(ifp, txq); + } else { + /* XXX need for ALTQ */ + if (qid == 0) + wm_start_locked(ifp); + wm_transmit_locked(ifp, txq); + } + mutex_exit(txq->txq_lock); + + qid++; + goto restart; + } +out: + WM_CORE_UNLOCK(sc); +} + /* Interrupt */ /* @@ -7926,7 +7980,7 @@ wm_intr_legacy(void *arg) if (handled) { /* Try to get more packets going. */ - ifp->if_start(ifp); + if_schedule_deferred_start(ifp); } return handled; @@ -7965,15 +8019,13 @@ wm_txrxintr_msix(void *arg) /* Try to get more packets going. */ if (pcq_peek(txq->txq_interq) != NULL) - wm_nq_transmit_locked(ifp, txq); + if_schedule_deferred_start(ifp); /* * There are still some upper layer processing which call * ifp->if_start(). e.g. ALTQ */ - if (wmq->wmq_id == 0) { - if (!IFQ_IS_EMPTY(&ifp->if_snd)) - wm_nq_start_locked(ifp); - } + if (wmq->wmq_id == 0) + if_schedule_deferred_start(ifp); mutex_exit(txq->txq_lock); Index: src/sys/dev/pci/if_wpi.c diff -u src/sys/dev/pci/if_wpi.c:1.74 src/sys/dev/pci/if_wpi.c:1.75 --- src/sys/dev/pci/if_wpi.c:1.74 Fri Jun 10 13:27:14 2016 +++ src/sys/dev/pci/if_wpi.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_wpi.c,v 1.74 2016/06/10 13:27:14 ozaki-r Exp $ */ +/* $NetBSD: if_wpi.c,v 1.75 2016/12/08 01:12:01 ozaki-r Exp $ */ /*- * Copyright (c) 2006, 2007 @@ -18,7 +18,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_wpi.c,v 1.74 2016/06/10 13:27:14 ozaki-r Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_wpi.c,v 1.75 2016/12/08 01:12:01 ozaki-r Exp $"); /* * Driver for Intel PRO/Wireless 3945ABG 802.11 network adapters. @@ -359,6 +359,7 @@ wpi_attach(device_t parent __unused, dev memcpy(ifp->if_xname, device_xname(self), IFNAMSIZ); if_attach(ifp); + if_deferred_start_init(ifp, NULL); ieee80211_ifattach(ic); /* override default methods */ ic->ic_node_alloc = wpi_node_alloc; @@ -1630,7 +1631,7 @@ wpi_tx_intr(struct wpi_softc *sc, struct sc->sc_tx_timer = 0; ifp->if_flags &= ~IFF_OACTIVE; - wpi_start(ifp); + if_schedule_deferred_start(ifp); } static void Index: src/sys/dev/pci/if_xge.c diff -u src/sys/dev/pci/if_xge.c:1.23 src/sys/dev/pci/if_xge.c:1.24 --- src/sys/dev/pci/if_xge.c:1.23 Thu Jul 14 04:00:46 2016 +++ src/sys/dev/pci/if_xge.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_xge.c,v 1.23 2016/07/14 04:00:46 msaitoh Exp $ */ +/* $NetBSD: if_xge.c,v 1.24 2016/12/08 01:12:01 ozaki-r Exp $ */ /* * Copyright (c) 2004, SUNET, Swedish University Computer Network. @@ -43,7 +43,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_xge.c,v 1.23 2016/07/14 04:00:46 msaitoh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_xge.c,v 1.24 2016/12/08 01:12:01 ozaki-r Exp $"); #include <sys/param.h> @@ -553,6 +553,7 @@ xge_attach(device_t parent, device_t sel * Attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, enaddr); /* @@ -750,7 +751,7 @@ xge_intr(void *pv) if (sc->sc_lasttx != lasttx) ifp->if_flags &= ~IFF_OACTIVE; - xge_start(ifp); /* Try to get more packets on the wire */ + if_schedule_deferred_start(ifp); /* Try to get more packets on the wire */ if ((val = PIF_RCSR(RX_TRAFFIC_INT))) { XGE_EVCNT_INCR(&sc->sc_rxintr); Index: src/sys/dev/pcmcia/if_cnw.c diff -u src/sys/dev/pcmcia/if_cnw.c:1.59 src/sys/dev/pcmcia/if_cnw.c:1.60 --- src/sys/dev/pcmcia/if_cnw.c:1.59 Sun Oct 2 14:16:03 2016 +++ src/sys/dev/pcmcia/if_cnw.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_cnw.c,v 1.59 2016/10/02 14:16:03 christos Exp $ */ +/* $NetBSD: if_cnw.c,v 1.60 2016/12/08 01:12:01 ozaki-r Exp $ */ /*- * Copyright (c) 1998, 2004 The NetBSD Foundation, Inc. @@ -105,7 +105,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_cnw.c,v 1.59 2016/10/02 14:16:03 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_cnw.c,v 1.60 2016/12/08 01:12:01 ozaki-r Exp $"); #include "opt_inet.h" @@ -558,6 +558,7 @@ cnw_attach(device_t parent, device_t sel /* Attach the interface */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, macaddr); sc->sc_resource |= CNW_RES_NET; @@ -975,7 +976,7 @@ cnw_intr(void *arg) ifp->if_flags &= ~IFF_OACTIVE; /* Continue to send packets from the queue */ - cnw_start(&sc->sc_ethercom.ec_if); + if_schedule_deferred_start(&sc->sc_ethercom.ec_if); } } Index: src/sys/dev/pcmcia/if_malo_pcmcia.c diff -u src/sys/dev/pcmcia/if_malo_pcmcia.c:1.10 src/sys/dev/pcmcia/if_malo_pcmcia.c:1.11 --- src/sys/dev/pcmcia/if_malo_pcmcia.c:1.10 Fri Mar 11 22:09:54 2016 +++ src/sys/dev/pcmcia/if_malo_pcmcia.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_malo_pcmcia.c,v 1.10 2016/03/11 22:09:54 macallan Exp $ */ +/* $NetBSD: if_malo_pcmcia.c,v 1.11 2016/12/08 01:12:01 ozaki-r Exp $ */ /* $OpenBSD: if_malo.c,v 1.65 2009/03/29 21:53:53 sthen Exp $ */ /* @@ -18,7 +18,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_malo_pcmcia.c,v 1.10 2016/03/11 22:09:54 macallan Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_malo_pcmcia.c,v 1.11 2016/12/08 01:12:01 ozaki-r Exp $"); #ifdef _MODULE #include <sys/module.h> @@ -356,6 +356,7 @@ cmalo_attach(void *arg) /* attach interface */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ieee80211_ifattach(ic); sc->sc_newstate = ic->ic_newstate; @@ -1070,7 +1071,7 @@ cmalo_tx_done(struct malo_softc *sc) ifp->if_opackets++; ifp->if_flags &= ~IFF_OACTIVE; ifp->if_timer = 0; - cmalo_start(ifp); + if_schedule_deferred_start(ifp); } static void Index: src/sys/dev/pcmcia/if_xi.c diff -u src/sys/dev/pcmcia/if_xi.c:1.78 src/sys/dev/pcmcia/if_xi.c:1.79 --- src/sys/dev/pcmcia/if_xi.c:1.78 Sun Oct 2 14:16:03 2016 +++ src/sys/dev/pcmcia/if_xi.c Thu Dec 8 01:12:01 2016 @@ -1,4 +1,4 @@ -/* $NetBSD: if_xi.c,v 1.78 2016/10/02 14:16:03 christos Exp $ */ +/* $NetBSD: if_xi.c,v 1.79 2016/12/08 01:12:01 ozaki-r Exp $ */ /* OpenBSD: if_xe.c,v 1.9 1999/09/16 11:28:42 niklas Exp */ /* @@ -55,7 +55,7 @@ */ #include <sys/cdefs.h> -__KERNEL_RCSID(0, "$NetBSD: if_xi.c,v 1.78 2016/10/02 14:16:03 christos Exp $"); +__KERNEL_RCSID(0, "$NetBSD: if_xi.c,v 1.79 2016/12/08 01:12:01 ozaki-r Exp $"); #include "opt_inet.h" @@ -219,6 +219,7 @@ xi_attach(struct xi_softc *sc, u_int8_t /* Attach the interface. */ if_attach(ifp); + if_deferred_start_init(ifp, NULL); ether_ifattach(ifp, myea); /* @@ -360,8 +361,7 @@ xi_intr(void *arg) } /* Try to start more packets transmitting. */ - if (IFQ_IS_EMPTY(&ifp->if_snd) == 0) - xi_start(ifp); + if_schedule_deferred_start(ifp); /* Detected excessive collisions? */ if ((tx_status & EXCESSIVE_COLL) && ifp->if_opackets > 0) {