svn commit: r233318 - in head/sys/mips: atheros mips
Oleksandr Tymoshenko
gonzo at FreeBSD.org
Thu Mar 22 17:47:53 UTC 2012
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
}
More information about the svn-src-head
mailing list