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;
_______________________________________________
[email protected] mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "[email protected]"

Reply via email to