Skip site navigation (1)Skip section navigation (2)
Date:      Tue, 16 Dec 2008 11:04:02 +0000 (UTC)
From:      Joseph Koshy <jkoshy@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r186177 - head/sys/dev/hwpmc
Message-ID:  <200812161104.mBGB429L035976@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: jkoshy
Date: Tue Dec 16 11:04:02 2008
New Revision: 186177
URL: http://svn.freebsd.org/changeset/base/186177

Log:
  Bug fixes:
  - Initialize variables before use.
  - Remove a KASSERT() that could falsely trigger if there are other sources
    of NMIs in the system.
  
  Efficiency tweak:
  - When checking PMCs that overflowed, ignore PMCs that were not configured for
    sampling.

Modified:
  head/sys/dev/hwpmc/hwpmc_core.c

Modified: head/sys/dev/hwpmc/hwpmc_core.c
==============================================================================
--- head/sys/dev/hwpmc/hwpmc_core.c	Tue Dec 16 11:01:36 2008	(r186176)
+++ head/sys/dev/hwpmc/hwpmc_core.c	Tue Dec 16 11:04:02 2008	(r186177)
@@ -1491,17 +1491,18 @@ core_intr(int cpu, struct trapframe *tf)
 	PMCDBG(MDP,INT, 1, "cpu=%d tf=0x%p um=%d", cpu, (void *) tf,
 	    TRAPF_USERMODE(tf));
 
+	found_interrupt = 0;
 	cc = core_pcpu[cpu];
 
 	for (ri = 0; ri < core_iap_npmc; ri++) {
 
-		if (!iap_pmc_has_overflowed(ri))
-			continue;
-
 		if ((pm = cc->pc_corepmcs[ri].phw_pmc) == NULL ||
 		    !PMC_IS_SAMPLING_MODE(PMC_TO_MODE(pm)))
 			continue;
 
+		if (!iap_pmc_has_overflowed(ri))
+			continue;
+
 		found_interrupt = 1;
 
 		if (pm->pm_state != PMC_STATE_RUNNING)
@@ -1560,7 +1561,9 @@ core2_intr(int cpu, struct trapframe *tf
 	PMCDBG(MDP,INT, 1, "cpu=%d intrstatus=%jx", cpu,
 	    (uintmax_t) intrstatus);
 
+	found_interrupt = 0;
 	cc = core_pcpu[cpu];
+
 	KASSERT(cc != NULL, ("[core,%d] null pcpu", __LINE__));
 
 	cc->pc_globalctrl &= ~intrenable;
@@ -1574,7 +1577,6 @@ core2_intr(int cpu, struct trapframe *tf
 	    IA_GLOBAL_STATUS_FLAG_OVFBUF |
 	    IA_GLOBAL_STATUS_FLAG_CONDCHG);
 
-
 	/*
 	 * Look for interrupts from fixed function PMCs.
 	 */
@@ -1634,9 +1636,6 @@ core2_intr(int cpu, struct trapframe *tf
 		wrmsr(IAP_PMC0 + n, v);
 	}
 
-	KASSERT(found_interrupt,
-	    ("[core,%d] no interrupting PMCs were found", __LINE__));
-
 	/*
 	 * Reenable all non-stalled PMCs.
 	 */



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200812161104.mBGB429L035976>