Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 22 Mar 2012 17:47:53 +0000 (UTC)
From:      Oleksandr Tymoshenko <gonzo@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r233318 - in head/sys/mips: atheros mips
Message-ID:  <201203221747.q2MHlrKn034819@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: gonzo
Date: Thu Mar 22 17:47:52 2012
New Revision: 233318
URL: http://svn.freebsd.org/changeset/base/233318

Log:
  Move PMC hook invocation to cpu_intr. The idea is the same as with ast()
  call but there is no reason to implement it in assembler.

Modified:
  head/sys/mips/atheros/apb.c
  head/sys/mips/mips/intr_machdep.c

Modified: head/sys/mips/atheros/apb.c
==============================================================================
--- head/sys/mips/atheros/apb.c	Thu Mar 22 17:44:36 2012	(r233317)
+++ head/sys/mips/atheros/apb.c	Thu Mar 22 17:47:52 2012	(r233318)
@@ -348,7 +348,6 @@ apb_filter(void *arg)
 	uint32_t reg, irq;
 	struct thread *td;
 	struct trapframe *tf;
-	register_t s;
 
 	reg = ATH_READ_REG(AR71XX_MISC_INTR_STATUS);
 	for (irq = 0; irq < APB_NIRQS; irq++) {
@@ -373,28 +372,12 @@ apb_filter(void *arg)
 					td = PCPU_GET(curthread);
 					tf = td->td_intr_frame;
 
-					s = intr_disable();
+					if (pmc_intr)
+						(*pmc_intr)(PCPU_GET(cpuid), tf);
+
 					mips_intrcnt_inc(sc->sc_intr_counter[irq]);
 
-					if (pmc_intr) {
-						/*
-						 * Make sure at least one of counters 
-						 * generated this interrupt
-						 */
-						if (!(*pmc_intr)(PCPU_GET(cpuid), tf)) {
-							intr_restore(s);
-							continue;
-						}
-					}
-
-					intr_restore(s);
-
-					if (pmc_hook && (td->td_pflags & TDP_CALLCHAIN))
-						pmc_hook(PCPU_GET(curthread),
-							PMC_FN_USER_CALLCHAIN, tf);
-				
 					continue;
-
 				}
 				/* Ignore timer interrupts */
 				if (irq != 0)

Modified: head/sys/mips/mips/intr_machdep.c
==============================================================================
--- head/sys/mips/mips/intr_machdep.c	Thu Mar 22 17:44:36 2012	(r233317)
+++ head/sys/mips/mips/intr_machdep.c	Thu Mar 22 17:47:52 2012	(r233318)
@@ -29,10 +29,14 @@
 #include <sys/cdefs.h>
 __FBSDID("$FreeBSD$");
 
+#include "opt_hwpmc_hooks.h"
+
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/bus.h>
 #include <sys/interrupt.h>
+#include <sys/pmc.h>
+#include <sys/pmckern.h>
 
 #include <machine/clock.h>
 #include <machine/cpu.h>
@@ -266,4 +270,9 @@ cpu_intr(struct trapframe *tf)
 	KASSERT(i == 0, ("all interrupts handled"));
 
 	critical_exit();
+
+#ifdef HWPMC_HOOKS
+	if (pmc_hook && (PCPU_GET(curthread)->td_pflags & TDP_CALLCHAIN))
+		pmc_hook(PCPU_GET(curthread), PMC_FN_USER_CALLCHAIN, tf);
+#endif
 }



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