svn commit: r244169 - head/sys/dev/smc

Oleksandr Tymoshenko gonzo at FreeBSD.org
Thu Dec 13 03:33:02 UTC 2012


Author: gonzo
Date: Thu Dec 13 03:33:01 2012
New Revision: 244169
URL: http://svnweb.freebsd.org/changeset/base/244169

Log:
  Disable interrupts in filter in order to avoid interrupt storm and
      CPU starvation

Modified:
  head/sys/dev/smc/if_smc.c

Modified: head/sys/dev/smc/if_smc.c
==============================================================================
--- head/sys/dev/smc/if_smc.c	Thu Dec 13 02:21:05 2012	(r244168)
+++ head/sys/dev/smc/if_smc.c	Thu Dec 13 03:33:01 2012	(r244169)
@@ -807,6 +807,10 @@ smc_intr(void *context)
 	struct smc_softc	*sc;
 	
 	sc = (struct smc_softc *)context;
+	/*
+	 * Block interrupts in order to let smc_task_intr to kick in
+	 */
+	smc_write_1(sc, MSK, 0);
 	taskqueue_enqueue_fast(sc->smc_tq, &sc->smc_intr);
 	return (FILTER_HANDLED);
 }
@@ -827,13 +831,6 @@ smc_task_intr(void *context, int pending
 	smc_select_bank(sc, 2);
 
 	/*
-	 * Get the current mask, and then block all interrupts while we're
-	 * working.
-	 */
-	if ((ifp->if_capenable & IFCAP_POLLING) == 0)
-		smc_write_1(sc, MSK, 0);
-
-	/*
 	 * Find out what interrupts are flagged.
 	 */
 	status = smc_read_1(sc, IST) & sc->smc_mask;


More information about the svn-src-all mailing list