From b16db6d4295d490dc1fe04882b66c3627ea09b26 Mon Sep 17 00:00:00 2001 From: Stephane Eranian Date: Fri, 15 Mar 2013 14:26:07 +0100 Subject: [PATCH] --- yaml --- r: 361311 b: refs/heads/master c: 1d9d8639c063caf6efc2447f5f26aa637f844ff6 h: refs/heads/master i: 361309: c7730f6d505c2fdbe86cc39bb5e0e52eec7c5bea 361307: 7c0ad25766c9d81ebe567247d3680fce1fd83b02 361303: 3ec404127383c5dee924d9c78201ea75b331077f 361295: f7a3e949e68f47436738679cedb70f9eb4d394da 361279: 69f1184200e0ccdcd4886eb1a625c30380f593fa v: v3 --- [refs] | 2 +- trunk/arch/x86/kernel/cpu/perf_event_intel_ds.c | 8 ++++++++ trunk/arch/x86/power/cpu.c | 2 ++ trunk/include/linux/perf_event.h | 2 ++ 4 files changed, 13 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 6fc8d53c18c7..39bad9f171a1 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a2362d24764a4e9a3187fc46b14e1d2cd0657700 +refs/heads/master: 1d9d8639c063caf6efc2447f5f26aa637f844ff6 diff --git a/trunk/arch/x86/kernel/cpu/perf_event_intel_ds.c b/trunk/arch/x86/kernel/cpu/perf_event_intel_ds.c index 826054a4f2ee..0e9bdd3cb01e 100644 --- a/trunk/arch/x86/kernel/cpu/perf_event_intel_ds.c +++ b/trunk/arch/x86/kernel/cpu/perf_event_intel_ds.c @@ -729,3 +729,11 @@ void intel_ds_init(void) } } } + +void perf_restore_debug_store(void) +{ + if (!x86_pmu.bts && !x86_pmu.pebs) + return; + + init_debug_store_on_cpu(smp_processor_id()); +} diff --git a/trunk/arch/x86/power/cpu.c b/trunk/arch/x86/power/cpu.c index 120cee1c3f8d..3c68768d7a75 100644 --- a/trunk/arch/x86/power/cpu.c +++ b/trunk/arch/x86/power/cpu.c @@ -11,6 +11,7 @@ #include #include #include +#include #include #include @@ -228,6 +229,7 @@ static void __restore_processor_state(struct saved_context *ctxt) do_fpu_end(); x86_platform.restore_sched_clock_state(); mtrr_bp_restore(); + perf_restore_debug_store(); } /* Needed by apm.c */ diff --git a/trunk/include/linux/perf_event.h b/trunk/include/linux/perf_event.h index e47ee462c2f2..71caed8626be 100644 --- a/trunk/include/linux/perf_event.h +++ b/trunk/include/linux/perf_event.h @@ -758,6 +758,7 @@ extern void perf_event_enable(struct perf_event *event); extern void perf_event_disable(struct perf_event *event); extern int __perf_event_disable(void *info); extern void perf_event_task_tick(void); +extern void perf_restore_debug_store(void); #else static inline void perf_event_task_sched_in(struct task_struct *prev, @@ -797,6 +798,7 @@ static inline void perf_event_enable(struct perf_event *event) { } static inline void perf_event_disable(struct perf_event *event) { } static inline int __perf_event_disable(void *info) { return -1; } static inline void perf_event_task_tick(void) { } +static inline void perf_restore_debug_store(void) { } #endif #define perf_output_put(handle, x) perf_output_copy((handle), &(x), sizeof(x))