Module Name:    src
Committed By:   ozaki-r
Date:           Tue May 23 02:19:14 UTC 2017

Modified Files:
        src/sys/dev/cadence: if_cemac.c
        src/sys/dev/ic: aic6915.c am7990.c am79900.c an.c arn5008.c arn9003.c
            awi.c dp8390.c dp83932.c hme.c lemac.c mb86960.c rt2560.c rt2661.c
            rt2860.c rtw.c smc90cx6.c smc91cxx.c tulip.c
        src/sys/dev/pci: if_ale.c if_ipw.c if_iwi.c if_tl.c if_vte.c if_wpi.c

Log Message:
Apply deferred if_start to more drivers

And annotate some XXX_start as it runs in softint to clarify that
it doesn't need deferred if_start.


To generate a diff of this commit:
cvs rdiff -u -r1.10 -r1.11 src/sys/dev/cadence/if_cemac.c
cvs rdiff -u -r1.34 -r1.35 src/sys/dev/ic/aic6915.c src/sys/dev/ic/rt2661.c
cvs rdiff -u -r1.75 -r1.76 src/sys/dev/ic/am7990.c
cvs rdiff -u -r1.24 -r1.25 src/sys/dev/ic/am79900.c
cvs rdiff -u -r1.64 -r1.65 src/sys/dev/ic/an.c
cvs rdiff -u -r1.12 -r1.13 src/sys/dev/ic/arn5008.c
cvs rdiff -u -r1.10 -r1.11 src/sys/dev/ic/arn9003.c
cvs rdiff -u -r1.91 -r1.92 src/sys/dev/ic/awi.c
cvs rdiff -u -r1.86 -r1.87 src/sys/dev/ic/dp8390.c
cvs rdiff -u -r1.39 -r1.40 src/sys/dev/ic/dp83932.c
cvs rdiff -u -r1.95 -r1.96 src/sys/dev/ic/hme.c
cvs rdiff -u -r1.47 -r1.48 src/sys/dev/ic/lemac.c
cvs rdiff -u -r1.84 -r1.85 src/sys/dev/ic/mb86960.c
cvs rdiff -u -r1.29 -r1.30 src/sys/dev/ic/rt2560.c
cvs rdiff -u -r1.25 -r1.26 src/sys/dev/ic/rt2860.c
cvs rdiff -u -r1.125 -r1.126 src/sys/dev/ic/rtw.c
cvs rdiff -u -r1.68 -r1.69 src/sys/dev/ic/smc90cx6.c
cvs rdiff -u -r1.94 -r1.95 src/sys/dev/ic/smc91cxx.c
cvs rdiff -u -r1.189 -r1.190 src/sys/dev/ic/tulip.c
cvs rdiff -u -r1.21 -r1.22 src/sys/dev/pci/if_ale.c
cvs rdiff -u -r1.63 -r1.64 src/sys/dev/pci/if_ipw.c
cvs rdiff -u -r1.102 -r1.103 src/sys/dev/pci/if_iwi.c
cvs rdiff -u -r1.106 -r1.107 src/sys/dev/pci/if_tl.c
cvs rdiff -u -r1.16 -r1.17 src/sys/dev/pci/if_vte.c
cvs rdiff -u -r1.77 -r1.78 src/sys/dev/pci/if_wpi.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/dev/cadence/if_cemac.c
diff -u src/sys/dev/cadence/if_cemac.c:1.10 src/sys/dev/cadence/if_cemac.c:1.11
--- src/sys/dev/cadence/if_cemac.c:1.10	Thu Dec 15 09:28:04 2016
+++ src/sys/dev/cadence/if_cemac.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_cemac.c,v 1.10 2016/12/15 09:28:04 ozaki-r Exp $	*/
+/*	$NetBSD: if_cemac.c,v 1.11 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*
  * Copyright (c) 2015  Genetec Corporation.  All rights reserved.
@@ -40,7 +40,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_cemac.c,v 1.10 2016/12/15 09:28:04 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_cemac.c,v 1.11 2017/05/23 02:19:14 ozaki-r Exp $");
 
 #include <sys/types.h>
 #include <sys/param.h>
@@ -384,8 +384,8 @@ cemac_intr(void *arg)
 		}
 	}
 
-	if (cemac_gctx(sc) > 0 && IFQ_IS_EMPTY(&ifp->if_snd) == 0)
-		cemac_ifstart(ifp);
+	if (cemac_gctx(sc) > 0)
+		if_schedule_deferred_start(ifp);
 #if 0 // reloop
 	irq = CEMAC_READ(IntStsC);
 	if ((irq & (IntSts_RxSQ|IntSts_ECI)) != 0)
@@ -621,6 +621,7 @@ cemac_init(struct cemac_softc *sc)
 	ifp->if_softc = sc;
         IFQ_SET_READY(&ifp->if_snd);
         if_attach(ifp);
+	if_deferred_start_init(ifp, NULL);
         ether_ifattach(ifp, (sc)->sc_enaddr);
 }
 

Index: src/sys/dev/ic/aic6915.c
diff -u src/sys/dev/ic/aic6915.c:1.34 src/sys/dev/ic/aic6915.c:1.35
--- src/sys/dev/ic/aic6915.c:1.34	Thu Dec 15 09:28:05 2016
+++ src/sys/dev/ic/aic6915.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: aic6915.c,v 1.34 2016/12/15 09:28:05 ozaki-r Exp $	*/
+/*	$NetBSD: aic6915.c,v 1.35 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: aic6915.c,v 1.34 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: aic6915.c,v 1.35 2017/05/23 02:19:14 ozaki-r Exp $");
 
 
 #include <sys/param.h>
@@ -283,6 +283,7 @@ sf_attach(struct sf_softc *sc)
 	 * Attach the interface.
 	 */
 	if_attach(ifp);
+	if_deferred_start_init(ifp, NULL);
 	ether_ifattach(ifp, enaddr);
 
 	/*
@@ -605,7 +606,7 @@ sf_intr(void *arg)
 			sf_init(&sc->sc_ethercom.ec_if);
 
 		/* Try and get more packets going. */
-		sf_start(&sc->sc_ethercom.ec_if);
+		if_schedule_deferred_start(&sc->sc_ethercom.ec_if);
 	}
 
 	return (handled);
Index: src/sys/dev/ic/rt2661.c
diff -u src/sys/dev/ic/rt2661.c:1.34 src/sys/dev/ic/rt2661.c:1.35
--- src/sys/dev/ic/rt2661.c:1.34	Thu Feb  2 10:05:35 2017
+++ src/sys/dev/ic/rt2661.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: rt2661.c,v 1.34 2017/02/02 10:05:35 nonaka Exp $	*/
+/*	$NetBSD: rt2661.c,v 1.35 2017/05/23 02:19:14 ozaki-r Exp $	*/
 /*	$OpenBSD: rt2661.c,v 1.17 2006/05/01 08:41:11 damien Exp $	*/
 /*	$FreeBSD: rt2560.c,v 1.5 2006/06/02 19:59:31 csjp Exp $	*/
 
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rt2661.c,v 1.34 2017/02/02 10:05:35 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rt2661.c,v 1.35 2017/05/23 02:19:14 ozaki-r Exp $");
 
 
 #include <sys/param.h>
@@ -993,7 +993,7 @@ rt2661_tx_intr(struct rt2661_softc *sc)
 
 	sc->sc_tx_timer = 0;
 	ifp->if_flags &= ~IFF_OACTIVE;
-	rt2661_start(ifp);
+	rt2661_start(ifp); /* in softint */
 
 	splx(s);
 }

Index: src/sys/dev/ic/am7990.c
diff -u src/sys/dev/ic/am7990.c:1.75 src/sys/dev/ic/am7990.c:1.76
--- src/sys/dev/ic/am7990.c:1.75	Mon Apr 13 16:33:24 2015
+++ src/sys/dev/ic/am7990.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: am7990.c,v 1.75 2015/04/13 16:33:24 riastradh Exp $	*/
+/*	$NetBSD: am7990.c,v 1.76 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 1997, 1998 The NetBSD Foundation, Inc.
@@ -65,7 +65,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: am7990.c,v 1.75 2015/04/13 16:33:24 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: am7990.c,v 1.76 2017/05/23 02:19:14 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -114,6 +114,7 @@ am7990_config(struct am7990_softc *sc)
 	sc->lsc.sc_start = am7990_start;
 
 	lance_config(&sc->lsc);
+	if_deferred_start_init(ifp, NULL);
 
 	mem = 0;
 	sc->lsc.sc_initaddr = mem;
@@ -356,7 +357,7 @@ am7990_tint(struct lance_softc *sc)
 
 	sc->sc_first_td = bix;
 
-	am7990_start(ifp);
+	if_schedule_deferred_start(ifp);
 
 	if (sc->sc_no_td == 0)
 		ifp->if_timer = 0;

Index: src/sys/dev/ic/am79900.c
diff -u src/sys/dev/ic/am79900.c:1.24 src/sys/dev/ic/am79900.c:1.25
--- src/sys/dev/ic/am79900.c:1.24	Mon Apr 13 16:33:24 2015
+++ src/sys/dev/ic/am79900.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: am79900.c,v 1.24 2015/04/13 16:33:24 riastradh Exp $	*/
+/*	$NetBSD: am79900.c,v 1.25 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -103,7 +103,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: am79900.c,v 1.24 2015/04/13 16:33:24 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: am79900.c,v 1.25 2017/05/23 02:19:14 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -152,6 +152,7 @@ am79900_config(struct am79900_softc *sc)
 	sc->lsc.sc_start = am79900_start;
 
 	lance_config(&sc->lsc);
+	if_deferred_start_init(ifp, NULL);
 
 	mem = 0;
 	sc->lsc.sc_initaddr = mem;
@@ -387,7 +388,7 @@ am79900_tint(struct lance_softc *sc)
 
 	sc->sc_first_td = bix;
 
-	am79900_start(ifp);
+	if_schedule_deferred_start(ifp);
 
 	if (sc->sc_no_td == 0)
 		ifp->if_timer = 0;

Index: src/sys/dev/ic/an.c
diff -u src/sys/dev/ic/an.c:1.64 src/sys/dev/ic/an.c:1.65
--- src/sys/dev/ic/an.c:1.64	Thu Feb  2 10:05:35 2017
+++ src/sys/dev/ic/an.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: an.c,v 1.64 2017/02/02 10:05:35 nonaka Exp $	*/
+/*	$NetBSD: an.c,v 1.65 2017/05/23 02:19:14 ozaki-r Exp $	*/
 /*
  * Copyright (c) 1997, 1998, 1999
  *	Bill Paul <wp...@ctr.columbia.edu>.  All rights reserved.
@@ -77,7 +77,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: an.c,v 1.64 2017/02/02 10:05:35 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: an.c,v 1.65 2017/05/23 02:19:14 ozaki-r Exp $");
 
 
 #include <sys/param.h>
@@ -509,7 +509,7 @@ an_softintr(void *arg)
 		    sc->sc_ic.ic_state == IEEE80211_S_RUN &&
 		    !IFQ_IS_EMPTY(&ifp->if_snd)) {
 			s = splnet();
-			an_start(ifp);
+			an_start(ifp); /* in softint */
 			splx(s);
 		}
 	}

Index: src/sys/dev/ic/arn5008.c
diff -u src/sys/dev/ic/arn5008.c:1.12 src/sys/dev/ic/arn5008.c:1.13
--- src/sys/dev/ic/arn5008.c:1.12	Thu Feb  2 10:05:35 2017
+++ src/sys/dev/ic/arn5008.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: arn5008.c,v 1.12 2017/02/02 10:05:35 nonaka Exp $	*/
+/*	$NetBSD: arn5008.c,v 1.13 2017/05/23 02:19:14 ozaki-r Exp $	*/
 /*	$OpenBSD: ar5008.c,v 1.21 2012/08/25 12:14:31 kettenis Exp $	*/
 
 /*-
@@ -24,7 +24,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: arn5008.c,v 1.12 2017/02/02 10:05:35 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: arn5008.c,v 1.13 2017/05/23 02:19:14 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/sockio.h>
@@ -1056,7 +1056,7 @@ ar5008_tx_intr(struct athn_softc *sc)
 	}
 	if (!SIMPLEQ_EMPTY(&sc->sc_txbufs)) {
 		ifp->if_flags &= ~IFF_OACTIVE;
-		ifp->if_start(ifp);
+		ifp->if_start(ifp); /* in softint */
 	}
 
 	splx(s);

Index: src/sys/dev/ic/arn9003.c
diff -u src/sys/dev/ic/arn9003.c:1.10 src/sys/dev/ic/arn9003.c:1.11
--- src/sys/dev/ic/arn9003.c:1.10	Thu Feb  2 10:05:35 2017
+++ src/sys/dev/ic/arn9003.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: arn9003.c,v 1.10 2017/02/02 10:05:35 nonaka Exp $	*/
+/*	$NetBSD: arn9003.c,v 1.11 2017/05/23 02:19:14 ozaki-r Exp $	*/
 /*	$OpenBSD: ar9003.c,v 1.25 2012/10/20 09:53:32 stsp Exp $	*/
 
 /*-
@@ -24,7 +24,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: arn9003.c,v 1.10 2017/02/02 10:05:35 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: arn9003.c,v 1.11 2017/05/23 02:19:14 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/sockio.h>
@@ -1204,7 +1204,7 @@ ar9003_tx_intr(struct athn_softc *sc)
 
 	if (!SIMPLEQ_EMPTY(&sc->sc_txbufs)) {
 		ifp->if_flags &= ~IFF_OACTIVE;
-		ifp->if_start(ifp);
+		ifp->if_start(ifp); /* in softint */
 	}
 
 	splx(s);

Index: src/sys/dev/ic/awi.c
diff -u src/sys/dev/ic/awi.c:1.91 src/sys/dev/ic/awi.c:1.92
--- src/sys/dev/ic/awi.c:1.91	Thu Feb  2 10:05:35 2017
+++ src/sys/dev/ic/awi.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: awi.c,v 1.91 2017/02/02 10:05:35 nonaka Exp $	*/
+/*	$NetBSD: awi.c,v 1.92 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 1999,2000,2001 The NetBSD Foundation, Inc.
@@ -78,7 +78,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: awi.c,v 1.91 2017/02/02 10:05:35 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: awi.c,v 1.92 2017/05/23 02:19:14 ozaki-r Exp $");
 
 #include "opt_inet.h"
 
@@ -1173,7 +1173,7 @@ awi_tx_int(struct awi_softc *sc)
 	    sc->sc_txdone, sc->sc_txnext, sc->sc_txbase, sc->sc_txend));
 	sc->sc_tx_timer = 0;
 	ifp->if_flags &= ~IFF_OACTIVE;
-	awi_start(ifp);
+	awi_start(ifp); /* in softint */
 }
 
 static struct mbuf *

Index: src/sys/dev/ic/dp8390.c
diff -u src/sys/dev/ic/dp8390.c:1.86 src/sys/dev/ic/dp8390.c:1.87
--- src/sys/dev/ic/dp8390.c:1.86	Thu Dec 15 09:28:05 2016
+++ src/sys/dev/ic/dp8390.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: dp8390.c,v 1.86 2016/12/15 09:28:05 ozaki-r Exp $	*/
+/*	$NetBSD: dp8390.c,v 1.87 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*
  * Device driver for National Semiconductor DS8390/WD83C690 based ethernet
@@ -14,7 +14,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dp8390.c,v 1.86 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dp8390.c,v 1.87 2017/05/23 02:19:14 ozaki-r Exp $");
 
 #include "opt_ipkdb.h"
 #include "opt_inet.h"
@@ -151,6 +151,7 @@ dp8390_config(struct dp8390_softc *sc)
 
 	/* Attach the interface. */
 	if_attach(ifp);
+	if_deferred_start_init(ifp, NULL);
 	ether_ifattach(ifp, sc->sc_enaddr);
 
 	rnd_attach_source(&sc->rnd_source, device_xname(sc->sc_dev),
@@ -786,7 +787,7 @@ dp8390_intr(void *arg)
 		 * to start output on the interface.  This is done after
 		 * handling the receiver to give the receiver priority.
 		 */
-		dp8390_start(ifp);
+		if_schedule_deferred_start(ifp);
 
 		/*
 		 * Return NIC CR to standard state: page 0, remote DMA

Index: src/sys/dev/ic/dp83932.c
diff -u src/sys/dev/ic/dp83932.c:1.39 src/sys/dev/ic/dp83932.c:1.40
--- src/sys/dev/ic/dp83932.c:1.39	Thu Dec 15 09:28:05 2016
+++ src/sys/dev/ic/dp83932.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: dp83932.c,v 1.39 2016/12/15 09:28:05 ozaki-r Exp $	*/
+/*	$NetBSD: dp83932.c,v 1.40 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 2001 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: dp83932.c,v 1.39 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: dp83932.c,v 1.40 2017/05/23 02:19:14 ozaki-r Exp $");
 
 
 #include <sys/param.h>
@@ -212,6 +212,7 @@ sonic_attach(struct sonic_softc *sc, con
 	 * Attach the interface.
 	 */
 	if_attach(ifp);
+	if_deferred_start_init(ifp, NULL);
 	ether_ifattach(ifp, enaddr);
 
 	/*
@@ -612,7 +613,7 @@ sonic_intr(void *arg)
 	if (handled) {
 		if (wantinit)
 			(void)sonic_init(ifp);
-		sonic_start(ifp);
+		if_schedule_deferred_start(ifp);
 	}
 
 	return handled;

Index: src/sys/dev/ic/hme.c
diff -u src/sys/dev/ic/hme.c:1.95 src/sys/dev/ic/hme.c:1.96
--- src/sys/dev/ic/hme.c:1.95	Thu Dec 15 09:28:05 2016
+++ src/sys/dev/ic/hme.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: hme.c,v 1.95 2016/12/15 09:28:05 ozaki-r Exp $	*/
+/*	$NetBSD: hme.c,v 1.96 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: hme.c,v 1.95 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: hme.c,v 1.96 2017/05/23 02:19:14 ozaki-r Exp $");
 
 /* #define HMEDEBUG */
 
@@ -306,6 +306,7 @@ hme_config(struct hme_softc *sc)
 
 	/* Attach the interface. */
 	if_attach(ifp);
+	if_deferred_start_init(ifp, NULL);
 	ether_ifattach(ifp, sc->sc_enaddr);
 
 	if (pmf_device_register1(sc->sc_dev, NULL, NULL, hme_shutdown))
@@ -1021,7 +1022,7 @@ hme_tint(struct hme_softc *sc)
 	/* Update ring */
 	sc->sc_rb.rb_tdtail = ri;
 
-	hme_start(ifp);
+	if_schedule_deferred_start(ifp);
 
 	if (sc->sc_rb.rb_td_nbusy == 0)
 		ifp->if_timer = 0;

Index: src/sys/dev/ic/lemac.c
diff -u src/sys/dev/ic/lemac.c:1.47 src/sys/dev/ic/lemac.c:1.48
--- src/sys/dev/ic/lemac.c:1.47	Thu Dec 15 09:28:05 2016
+++ src/sys/dev/ic/lemac.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: lemac.c,v 1.47 2016/12/15 09:28:05 ozaki-r Exp $ */
+/* $NetBSD: lemac.c,v 1.48 2017/05/23 02:19:14 ozaki-r Exp $ */
 
 /*-
  * Copyright (c) 1994, 1995, 1997 Matt Thomas <m...@3am-software.com>
@@ -34,7 +34,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: lemac.c,v 1.47 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: lemac.c,v 1.48 2017/05/23 02:19:14 ozaki-r Exp $");
 
 #include "opt_inet.h"
 
@@ -171,7 +171,7 @@ lemac_tne_intr(
 	}
     }
     sc->sc_if.if_flags &= ~IFF_OACTIVE;
-    lemac_ifstart(&sc->sc_if);
+    if_schedule_deferred_start(&sc->sc_if);
 }
 
 static void
@@ -997,6 +997,7 @@ lemac_ifattach(
 	IFQ_SET_READY(&ifp->if_snd);
 
 	if_attach(ifp);
+	if_deferred_start_init(ifp, NULL);
 	ether_ifattach(ifp, sc->sc_enaddr);
 
 	rnd_attach_source(&sc->rnd_source, device_xname(sc->sc_dev),

Index: src/sys/dev/ic/mb86960.c
diff -u src/sys/dev/ic/mb86960.c:1.84 src/sys/dev/ic/mb86960.c:1.85
--- src/sys/dev/ic/mb86960.c:1.84	Thu Dec 15 09:28:05 2016
+++ src/sys/dev/ic/mb86960.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: mb86960.c,v 1.84 2016/12/15 09:28:05 ozaki-r Exp $	*/
+/*	$NetBSD: mb86960.c,v 1.85 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*
  * All Rights Reserved, Copyright (C) Fujitsu Limited 1995
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: mb86960.c,v 1.84 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: mb86960.c,v 1.85 2017/05/23 02:19:14 ozaki-r Exp $");
 
 /*
  * Device driver for Fujitsu MB86960A/MB86965A based Ethernet cards.
@@ -247,6 +247,7 @@ mb86960_config(struct mb86960_softc *sc,
 
 	/* Attach the interface. */
 	if_attach(ifp);
+	if_deferred_start_init(ifp, NULL);
 	ether_ifattach(ifp, sc->sc_enaddr);
 
 	rnd_attach_source(&sc->rnd_source, device_xname(sc->sc_dev),
@@ -1140,7 +1141,7 @@ mb86960_intr(void *arg)
 		 * receive operation priority.
 		 */
 		if ((ifp->if_flags & IFF_OACTIVE) == 0)
-			mb86960_start(ifp);
+			if_schedule_deferred_start(ifp);
 
 		if (rstat != 0 || tstat != 0)
 			rnd_add_uint32(&sc->rnd_source, rstat + tstat);

Index: src/sys/dev/ic/rt2560.c
diff -u src/sys/dev/ic/rt2560.c:1.29 src/sys/dev/ic/rt2560.c:1.30
--- src/sys/dev/ic/rt2560.c:1.29	Thu Feb  2 10:05:35 2017
+++ src/sys/dev/ic/rt2560.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: rt2560.c,v 1.29 2017/02/02 10:05:35 nonaka Exp $	*/
+/*	$NetBSD: rt2560.c,v 1.30 2017/05/23 02:19:14 ozaki-r Exp $	*/
 /*	$OpenBSD: rt2560.c,v 1.15 2006/04/20 20:31:12 miod Exp $  */
 /*	$FreeBSD: rt2560.c,v 1.3 2006/03/21 21:15:43 damien Exp $*/
 
@@ -24,7 +24,7 @@
  * http://www.ralinktech.com/
  */
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rt2560.c,v 1.29 2017/02/02 10:05:35 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rt2560.c,v 1.30 2017/05/23 02:19:14 ozaki-r Exp $");
 
 
 #include <sys/param.h>
@@ -1167,7 +1167,7 @@ rt2560_tx_intr(struct rt2560_softc *sc)
 
 	sc->sc_tx_timer = 0;
 	ifp->if_flags &= ~IFF_OACTIVE;
-	rt2560_start(ifp);
+	rt2560_start(ifp); /* in softint */
 
 	splx(s);
 }
@@ -1240,7 +1240,7 @@ rt2560_prio_intr(struct rt2560_softc *sc
 
 	sc->sc_tx_timer = 0;
 	ifp->if_flags &= ~IFF_OACTIVE;
-	rt2560_start(ifp);
+	rt2560_start(ifp); /* in softint */
 
 	splx(s);
 }

Index: src/sys/dev/ic/rt2860.c
diff -u src/sys/dev/ic/rt2860.c:1.25 src/sys/dev/ic/rt2860.c:1.26
--- src/sys/dev/ic/rt2860.c:1.25	Thu Feb  2 10:05:35 2017
+++ src/sys/dev/ic/rt2860.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: rt2860.c,v 1.25 2017/02/02 10:05:35 nonaka Exp $	*/
+/*	$NetBSD: rt2860.c,v 1.26 2017/05/23 02:19:14 ozaki-r Exp $	*/
 /*	$OpenBSD: rt2860.c,v 1.90 2016/04/13 10:49:26 mpi Exp $	*/
 /*	$FreeBSD: head/sys/dev/ral/rt2860.c 306591 2016-10-02 20:35:55Z avos $ */
 
@@ -25,7 +25,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rt2860.c,v 1.25 2017/02/02 10:05:35 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rt2860.c,v 1.26 2017/05/23 02:19:14 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/sockio.h>
@@ -1282,7 +1282,7 @@ rt2860_tx_intr(struct rt2860_softc *sc, 
 	if (ring->queued <= RT2860_TX_RING_ONEMORE)
 		sc->qfullmsk &= ~(1 << qid);
 	ifp->if_flags &= ~IFF_OACTIVE;
-	rt2860_start(ifp);
+	rt2860_start(ifp); /* in softint */
 
 	splx(s);
 }

Index: src/sys/dev/ic/rtw.c
diff -u src/sys/dev/ic/rtw.c:1.125 src/sys/dev/ic/rtw.c:1.126
--- src/sys/dev/ic/rtw.c:1.125	Thu Feb  2 10:05:35 2017
+++ src/sys/dev/ic/rtw.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/* $NetBSD: rtw.c,v 1.125 2017/02/02 10:05:35 nonaka Exp $ */
+/* $NetBSD: rtw.c,v 1.126 2017/05/23 02:19:14 ozaki-r Exp $ */
 /*-
  * Copyright (c) 2004, 2005, 2006, 2007 David Young.  All rights
  * reserved.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rtw.c,v 1.125 2017/02/02 10:05:35 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rtw.c,v 1.126 2017/05/23 02:19:14 ozaki-r Exp $");
 
 
 #include <sys/param.h>
@@ -1858,7 +1858,7 @@ rtw_intr_tx(struct rtw_softc *sc, uint16
 	}
 
 	if ((isr & RTW_INTR_TX) != 0)
-		rtw_start(ifp);
+		rtw_start(ifp); /* in softint */
 
 	splx(s);
 }
@@ -1915,7 +1915,7 @@ rtw_intr_beacon(struct rtw_softc *sc, ui
 		}
 		M_SETCTX(m, ieee80211_ref_node(ic->ic_bss));
 		IF_ENQUEUE(&sc->sc_beaconq, m);
-		rtw_start(&sc->sc_if);
+		rtw_start(&sc->sc_if); /* in softint */
 	}
 
 	splx(s);

Index: src/sys/dev/ic/smc90cx6.c
diff -u src/sys/dev/ic/smc90cx6.c:1.68 src/sys/dev/ic/smc90cx6.c:1.69
--- src/sys/dev/ic/smc90cx6.c:1.68	Thu Dec 15 09:28:05 2016
+++ src/sys/dev/ic/smc90cx6.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: smc90cx6.c,v 1.68 2016/12/15 09:28:05 ozaki-r Exp $ */
+/*	$NetBSD: smc90cx6.c,v 1.69 2017/05/23 02:19:14 ozaki-r Exp $ */
 
 /*-
  * Copyright (c) 1994, 1995, 1998 The NetBSD Foundation, Inc.
@@ -35,7 +35,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smc90cx6.c,v 1.68 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smc90cx6.c,v 1.69 2017/05/23 02:19:14 ozaki-r Exp $");
 
 /* #define BAHSOFTCOPY */
 #define BAHRETRANSMIT /**/
@@ -198,6 +198,7 @@ bah_attach_subr(struct bah_softc *sc)
 	ifp->if_mtu = ARCMTU;
 
 	arc_ifattach(ifp, linkaddress);
+	if_deferred_start_init(ifp, NULL);
 
 #ifdef BAHSOFTCOPY
 	sc->sc_rxcookie = softint_establish(SOFTINT_NET, bah_srint, sc);
@@ -709,7 +710,7 @@ bah_tint(struct bah_softc *sc, int isr)
 	softint_schedule(sc->sc_txcookie);
 #else
 	/* call it directly */
-	bah_start(ifp);
+	if_schedule_deferred_start(ifp);
 #endif
 }
 

Index: src/sys/dev/ic/smc91cxx.c
diff -u src/sys/dev/ic/smc91cxx.c:1.94 src/sys/dev/ic/smc91cxx.c:1.95
--- src/sys/dev/ic/smc91cxx.c:1.94	Thu Dec 15 09:28:05 2016
+++ src/sys/dev/ic/smc91cxx.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: smc91cxx.c,v 1.94 2016/12/15 09:28:05 ozaki-r Exp $	*/
+/*	$NetBSD: smc91cxx.c,v 1.95 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 1997 The NetBSD Foundation, Inc.
@@ -71,7 +71,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: smc91cxx.c,v 1.94 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: smc91cxx.c,v 1.95 2017/05/23 02:19:14 ozaki-r Exp $");
 
 #include "opt_inet.h"
 
@@ -308,6 +308,7 @@ smc91cxx_attach(struct smc91cxx_softc *s
 
 	/* Attach the interface. */
 	if_attach(ifp);
+	if_deferred_start_init(ifp, NULL);
 	ether_ifattach(ifp, myea);
 
 	/*
@@ -1077,7 +1078,7 @@ smc91cxx_intr(void *arg)
 	/*
 	 * Attempt to queue more packets for transmission.
 	 */
-	smc91cxx_start(ifp);
+	if_schedule_deferred_start(ifp);
 
 	/*
 	 * Reenable the interrupts we wish to receive now that processing

Index: src/sys/dev/ic/tulip.c
diff -u src/sys/dev/ic/tulip.c:1.189 src/sys/dev/ic/tulip.c:1.190
--- src/sys/dev/ic/tulip.c:1.189	Thu Dec 15 09:28:05 2016
+++ src/sys/dev/ic/tulip.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: tulip.c,v 1.189 2016/12/15 09:28:05 ozaki-r Exp $	*/
+/*	$NetBSD: tulip.c,v 1.190 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 1998, 1999, 2000, 2002 The NetBSD Foundation, Inc.
@@ -36,7 +36,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: tulip.c,v 1.189 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: tulip.c,v 1.190 2017/05/23 02:19:14 ozaki-r Exp $");
 
 
 #include <sys/param.h>
@@ -524,6 +524,7 @@ tlp_attach(struct tulip_softc *sc, const
 	 * Attach the interface.
 	 */
 	if_attach(ifp);
+	if_deferred_start_init(ifp, NULL);
 	ether_ifattach(ifp, enaddr);
 	ether_set_ifflags_cb(&sc->sc_ethercom, tlp_ifflags_cb);
 
@@ -1199,7 +1200,7 @@ tlp_intr(void *arg)
 	}
 
 	/* Try to get more packets going. */
-	tlp_start(ifp);
+	if_schedule_deferred_start(ifp);
 
 	if (handled)
 		rnd_add_uint32(&sc->sc_rnd_source, status);

Index: src/sys/dev/pci/if_ale.c
diff -u src/sys/dev/pci/if_ale.c:1.21 src/sys/dev/pci/if_ale.c:1.22
--- src/sys/dev/pci/if_ale.c:1.21	Thu Dec 15 09:28:05 2016
+++ src/sys/dev/pci/if_ale.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ale.c,v 1.21 2016/12/15 09:28:05 ozaki-r Exp $	*/
+/*	$NetBSD: if_ale.c,v 1.22 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 2008, Pyun YongHyeon <yong...@freebsd.org>
@@ -32,7 +32,7 @@
 /* Driver for Atheros AR8121/AR8113/AR8114 PCIe Ethernet. */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_ale.c,v 1.21 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ale.c,v 1.22 2017/05/23 02:19:14 ozaki-r Exp $");
 
 #include "vlan.h"
 
@@ -572,6 +572,7 @@ ale_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->ale_eaddr);
 
 	if (pmf_device_register(self, NULL, NULL))
@@ -1313,8 +1314,7 @@ ale_intr(void *xsc)
 		}
 
 		ale_txeof(sc);
-		if (!IFQ_IS_EMPTY(&ifp->if_snd))
-			ale_start(ifp);
+		if_schedule_deferred_start(ifp);
 	}
 
 	/* Re-enable interrupts. */

Index: src/sys/dev/pci/if_ipw.c
diff -u src/sys/dev/pci/if_ipw.c:1.63 src/sys/dev/pci/if_ipw.c:1.64
--- src/sys/dev/pci/if_ipw.c:1.63	Thu Feb  2 10:05:35 2017
+++ src/sys/dev/pci/if_ipw.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_ipw.c,v 1.63 2017/02/02 10:05:35 nonaka Exp $	*/
+/*	$NetBSD: if_ipw.c,v 1.64 2017/05/23 02:19:14 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.63 2017/02/02 10:05:35 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_ipw.c,v 1.64 2017/05/23 02:19:14 ozaki-r Exp $");
 
 /*-
  * Intel(R) PRO/Wireless 2100 MiniPCI driver
@@ -1242,7 +1242,7 @@ ipw_tx_intr(struct ipw_softc *sc)
 
 	/* Call start() since some buffer descriptors have been released */
 	ifp->if_flags &= ~IFF_OACTIVE;
-	ipw_start(ifp);
+	ipw_start(ifp); /* in softint */
 
 	splx(s);
 }

Index: src/sys/dev/pci/if_iwi.c
diff -u src/sys/dev/pci/if_iwi.c:1.102 src/sys/dev/pci/if_iwi.c:1.103
--- src/sys/dev/pci/if_iwi.c:1.102	Thu Feb  2 10:05:35 2017
+++ src/sys/dev/pci/if_iwi.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_iwi.c,v 1.102 2017/02/02 10:05:35 nonaka Exp $  */
+/*	$NetBSD: if_iwi.c,v 1.103 2017/05/23 02:19:14 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.102 2017/02/02 10:05:35 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_iwi.c,v 1.103 2017/05/23 02:19:14 ozaki-r Exp $");
 
 /*-
  * Intel(R) PRO/Wireless 2200BG/2225BG/2915ABG driver
@@ -1485,7 +1485,7 @@ iwi_tx_intr(struct iwi_softc *sc, struct
 		ifp->if_flags &= ~IFF_OACTIVE;
 
 		/* Call start() since some buffer descriptors have been released */
-		iwi_start(ifp);
+		iwi_start(ifp); /* in softint */
 	}
 
 	splx(s);

Index: src/sys/dev/pci/if_tl.c
diff -u src/sys/dev/pci/if_tl.c:1.106 src/sys/dev/pci/if_tl.c:1.107
--- src/sys/dev/pci/if_tl.c:1.106	Thu Dec 15 09:28:05 2016
+++ src/sys/dev/pci/if_tl.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_tl.c,v 1.106 2016/12/15 09:28:05 ozaki-r Exp $	*/
+/*	$NetBSD: if_tl.c,v 1.107 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*
  * Copyright (c) 1997 Manuel Bouyer.  All rights reserved.
@@ -31,7 +31,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_tl.c,v 1.106 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_tl.c,v 1.107 2017/05/23 02:19:14 ozaki-r Exp $");
 
 #undef TLDEBUG
 #define TL_PRIV_STATS
@@ -459,6 +459,7 @@ tl_pci_attach(device_t parent, device_t 
 	ifp->if_timer = 0;
 	IFQ_SET_READY(&ifp->if_snd);
 	if_attach(ifp);
+	if_deferred_start_init(ifp, NULL);
 	ether_ifattach(&(sc)->tl_if, (sc)->tl_enaddr);
 
 	/*
@@ -1168,8 +1169,7 @@ tl_intr(void *v)
 				TL_HR_WRITE(sc, TL_HOST_CMD, HOST_CMD_GO);
 			}
 			sc->tl_if.if_timer = 0;
-			if (IFQ_IS_EMPTY(&sc->tl_if.if_snd) == 0)
-				tl_ifstart(&sc->tl_if);
+			if_schedule_deferred_start(&sc->tl_if);
 			return 1;
 		}
 #ifdef TLDEBUG
@@ -1178,8 +1178,7 @@ tl_intr(void *v)
 		}
 #endif
 		sc->tl_if.if_timer = 0;
-		if (IFQ_IS_EMPTY(&sc->tl_if.if_snd) == 0)
-			tl_ifstart(&sc->tl_if);
+		if_schedule_deferred_start(&sc->tl_if);
 		break;
 	case TL_INTR_Stat:
 		ack++;

Index: src/sys/dev/pci/if_vte.c
diff -u src/sys/dev/pci/if_vte.c:1.16 src/sys/dev/pci/if_vte.c:1.17
--- src/sys/dev/pci/if_vte.c:1.16	Thu Dec 15 09:28:05 2016
+++ src/sys/dev/pci/if_vte.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_vte.c,v 1.16 2016/12/15 09:28:05 ozaki-r Exp $	*/
+/*	$NetBSD: if_vte.c,v 1.17 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*
  * Copyright (c) 2011 Manuel Bouyer.  All rights reserved.
@@ -55,7 +55,7 @@
 /* Driver for DM&P Electronics, Inc, Vortex86 RDC R6040 FastEthernet. */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_vte.c,v 1.16 2016/12/15 09:28:05 ozaki-r Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_vte.c,v 1.17 2017/05/23 02:19:14 ozaki-r Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
@@ -269,6 +269,7 @@ vte_attach(device_t parent, device_t sel
         ifp->if_timer = 0;
         IFQ_SET_READY(&ifp->if_snd);
         if_attach(ifp);
+	if_deferred_start_init(ifp, NULL);
         ether_ifattach(&(sc)->vte_if, (sc)->vte_eaddr);
 
 	if (pmf_device_register1(self, vte_suspend, vte_resume, vte_shutdown))
@@ -974,8 +975,7 @@ vte_intr(void *arg)
 			vte_txeof(sc);
 		if ((status & MISR_EVENT_CNT_OFLOW) != 0)
 			vte_stats_update(sc);
-		if (!IFQ_IS_EMPTY(&ifp->if_snd))
-			vte_ifstart(ifp);
+		if_schedule_deferred_start(ifp);
 		if (--n > 0)
 			status = CSR_READ_2(sc, VTE_MISR);
 		else

Index: src/sys/dev/pci/if_wpi.c
diff -u src/sys/dev/pci/if_wpi.c:1.77 src/sys/dev/pci/if_wpi.c:1.78
--- src/sys/dev/pci/if_wpi.c:1.77	Thu Feb  2 10:05:35 2017
+++ src/sys/dev/pci/if_wpi.c	Tue May 23 02:19:14 2017
@@ -1,4 +1,4 @@
-/*	$NetBSD: if_wpi.c,v 1.77 2017/02/02 10:05:35 nonaka Exp $	*/
+/*	$NetBSD: if_wpi.c,v 1.78 2017/05/23 02:19:14 ozaki-r Exp $	*/
 
 /*-
  * Copyright (c) 2006, 2007
@@ -18,7 +18,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: if_wpi.c,v 1.77 2017/02/02 10:05:35 nonaka Exp $");
+__KERNEL_RCSID(0, "$NetBSD: if_wpi.c,v 1.78 2017/05/23 02:19:14 ozaki-r Exp $");
 
 /*
  * Driver for Intel PRO/Wireless 3945ABG 802.11 network adapters.
@@ -1665,7 +1665,7 @@ wpi_tx_intr(struct wpi_softc *sc, struct
 
 	sc->sc_tx_timer = 0;
 	ifp->if_flags &= ~IFF_OACTIVE;
-	wpi_start(ifp);
+	wpi_start(ifp); /* in softint */
 
 	splx(s);
 }

Reply via email to