From owner-p4-projects@FreeBSD.ORG Wed Oct 27 17:41:43 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 80E0416A4D4; Wed, 27 Oct 2004 17:41:43 +0000 (GMT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 3D6BC16A4D2 for ; Wed, 27 Oct 2004 17:41:43 +0000 (GMT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 131D643D1F for ; Wed, 27 Oct 2004 17:41:43 +0000 (GMT) (envelope-from jhb@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.11/8.12.11) with ESMTP id i9RHfgVV005555 for ; Wed, 27 Oct 2004 17:41:42 GMT (envelope-from jhb@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.11/8.12.11/Submit) id i9RHfgIw005552 for perforce@freebsd.org; Wed, 27 Oct 2004 17:41:42 GMT (envelope-from jhb@freebsd.org) Date: Wed, 27 Oct 2004 17:41:42 GMT Message-Id: <200410271741.i9RHfgIw005552@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to jhb@freebsd.org using -f From: John Baldwin To: Perforce Change Reviews Subject: PERFORCE change 63834 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 27 Oct 2004 17:41:44 -0000 http://perforce.freebsd.org/chv.cgi?CH=63834 Change 63834 by jhb@jhb_slimer on 2004/10/27 17:41:06 Put bde's hacks to istorm under #ifdef HACK and bring back the simpler code by default. Affected files ... .. //depot/projects/smpng/sys/kern/kern_intr.c#53 edit Differences ... ==== //depot/projects/smpng/sys/kern/kern_intr.c#53 (text+ko) ==== @@ -485,14 +485,22 @@ struct intrhand *ih; /* and our interrupt handler chain */ struct thread *td; struct proc *p; +#ifdef HACK int count, warming, warned; +#else + int count, warned; +#endif td = curthread; p = td->td_proc; ithd = (struct ithd *)arg; /* point to myself */ KASSERT(ithd->it_td == td && td->td_ithd == ithd, ("%s: ithread and proc linkage out of sync", __func__)); +#ifdef HACK warming = 10 * intr_storm_threshold; +#else + count = 0; +#endif warned = 0; /* @@ -514,7 +522,9 @@ CTR4(KTR_INTR, "%s: pid %d: (%s) need=%d", __func__, p->p_pid, p->p_comm, ithd->it_need); +#ifdef HACK count = 0; +#endif while (ithd->it_need) { /* * Service interrupts. If another interrupt @@ -548,9 +558,29 @@ if ((ih->ih_flags & IH_MPSAFE) == 0) mtx_unlock(&Giant); } + +#ifndef HACK + /* + * If we detect an interrupt storm, pause with the + * source masked until the next hardclock tick. + */ + if (intr_storm_threshold != 0 && + count >= intr_storm_threshold) { + if (!warned) { + printf( + "Interrupt storm detected on \"%s\"; throttling interrupt source\n", + p->p_comm); + warned = 1; + } + tsleep(&count, td->td_priority, "istorm", 1); + count = 0; + } else + count++; +#endif + if (ithd->it_enable != NULL) { ithd->it_enable(ithd->it_vector); - +#ifdef HACK /* * Storm detection needs a delay here * to see slightly delayed interrupts @@ -565,8 +595,10 @@ DELAY(1); --warming; } +#endif } +#ifdef HACK /* * If we detect an interrupt storm, sleep until * the next hardclock tick. We sleep at the @@ -574,7 +606,8 @@ * to ensure that we see slightly delayed * interrupts. */ - if (count >= intr_storm_threshold) { + if (intr_storm_threshold != 0 && + count >= intr_storm_threshold) { if (!warned) { printf( "Interrupt storm detected on \"%s\"; throttling interrupt source\n", @@ -598,6 +631,7 @@ count = INT_MAX - 1; } count++; +#endif } WITNESS_WARN(WARN_PANIC, NULL, "suspending ithread"); mtx_assert(&Giant, MA_NOTOWNED); @@ -610,6 +644,9 @@ mtx_lock_spin(&sched_lock); if (!ithd->it_need) { TD_SET_IWAIT(td); +#ifndef HACK + count = 0; +#endif CTR2(KTR_INTR, "%s: pid %d: done", __func__, p->p_pid); mi_switch(SW_VOL, NULL); CTR2(KTR_INTR, "%s: pid %d: resumed", __func__, p->p_pid);