aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAlexander Motin <mav@FreeBSD.org>2022-06-15 15:39:37 +0000
committerAlexander Motin <mav@FreeBSD.org>2022-07-04 17:48:10 +0000
commit5c55abaf0851b3334d3c2a4b9e6cf1ededbac3c8 (patch)
treef7fc5d288a3eaf3cda6e632c214a602460261095
parent194796b3869449a0eb6f8b4eb525bdd3768baa7d (diff)
downloadsrc-5c55abaf0851b3334d3c2a4b9e6cf1ededbac3c8.tar.gz
src-5c55abaf0851b3334d3c2a4b9e6cf1ededbac3c8.zip
hwpmc: Reenable PME before reenabling counters.
Doing otherwise may lead to lost interrupts, that in combination with hardware PMCs freezing may leave them frozen forever. It may also slightly improve profiling accuracy. MFC after: 2 weeks (cherry picked from commit f9e62419f6daf226a7116be2601842f8f07b1928)
-rw-r--r--sys/dev/hwpmc/hwpmc_core.c6
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/dev/hwpmc/hwpmc_core.c b/sys/dev/hwpmc/hwpmc_core.c
index 7c2a5bcd2a1b..692d7fcd52d9 100644
--- a/sys/dev/hwpmc/hwpmc_core.c
+++ b/sys/dev/hwpmc/hwpmc_core.c
@@ -1208,6 +1208,9 @@ core2_intr(struct trapframe *tf)
else
counter_u64_add(pmc_stats.pm_intr_ignored, 1);
+ if (found_interrupt)
+ lapic_reenable_pmc();
+
/*
* Reenable all non-stalled PMCs.
*/
@@ -1228,9 +1231,6 @@ core2_intr(struct trapframe *tf)
(uintmax_t) rdmsr(IA_GLOBAL_CTRL),
(uintmax_t) rdmsr(IA_GLOBAL_STATUS));
- if (found_interrupt)
- lapic_reenable_pmc();
-
return (found_interrupt);
}