| From | Andi Kleen <> | Subject | [PATCH] [21/58] i386: Reserve the right performance counter for the Intel PerfMon NMI watchdog | Date | Thu, 19 Jul 2007 11:55:06 +0200 (CEST) |
| |
From: [** iso-8859-1 charset **] BjörnSteinbrink <B.Steinbrink@gmx.de>
The Intel PerfMon NMI watchdog was using the generic reservation function which always reserves the first performance counter. But the watchdog actually uses the second performance counter, thus we need a specialised function.
Signed-off-by: Björn Steinbrink <B.Steinbrink@gmx.de> Signed-off-by: Andi Kleen <ak@suse.de>
--- arch/i386/kernel/cpu/perfctr-watchdog.c | 22 ++++++++++++++++++++-- 1 file changed, 20 insertions(+), 2 deletions(-)
Index: linux/arch/i386/kernel/cpu/perfctr-watchdog.c =================================================================== --- linux.orig/arch/i386/kernel/cpu/perfctr-watchdog.c +++ linux/arch/i386/kernel/cpu/perfctr-watchdog.c @@ -593,9 +593,27 @@ static int setup_intel_arch_watchdog(uns return 1; } +static int intel_arch_reserve(void) +{ + if (!reserve_perfctr_nmi(MSR_ARCH_PERFMON_PERFCTR1)) + return 0; + + if (!reserve_evntsel_nmi(MSR_ARCH_PERFMON_EVENTSEL1)) { + release_perfctr_nmi(MSR_ARCH_PERFMON_PERFCTR1); + return 0; + } + return 1; +} + +static void intel_arch_unreserve(void) +{ + release_evntsel_nmi(MSR_ARCH_PERFMON_EVENTSEL1); + release_perfctr_nmi(MSR_ARCH_PERFMON_PERFCTR1); +} + static struct wd_ops intel_arch_wd_ops = { - .reserve = single_msr_reserve, - .unreserve = single_msr_unreserve, + .reserve = intel_arch_reserve, + .unreserve = intel_arch_unreserve, .setup = setup_intel_arch_watchdog, .rearm = p6_rearm, .stop = single_msr_stop_watchdog, - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
|