diff options
Diffstat (limited to 'arch')
-rw-r--r-- | arch/x86/kernel/cpu/perf_event.c | 9 |
1 files changed, 5 insertions, 4 deletions
diff --git a/arch/x86/kernel/cpu/perf_event.c b/arch/x86/kernel/cpu/perf_event.c index c1bbed1021d9..d35f26076ae5 100644 --- a/arch/x86/kernel/cpu/perf_event.c +++ b/arch/x86/kernel/cpu/perf_event.c | |||
@@ -2287,7 +2287,7 @@ void callchain_store(struct perf_callchain_entry *entry, u64 ip) | |||
2287 | 2287 | ||
2288 | static DEFINE_PER_CPU(struct perf_callchain_entry, pmc_irq_entry); | 2288 | static DEFINE_PER_CPU(struct perf_callchain_entry, pmc_irq_entry); |
2289 | static DEFINE_PER_CPU(struct perf_callchain_entry, pmc_nmi_entry); | 2289 | static DEFINE_PER_CPU(struct perf_callchain_entry, pmc_nmi_entry); |
2290 | static DEFINE_PER_CPU(int, in_nmi_frame); | 2290 | static DEFINE_PER_CPU(int, in_ignored_frame); |
2291 | 2291 | ||
2292 | 2292 | ||
2293 | static void | 2293 | static void |
@@ -2303,8 +2303,9 @@ static void backtrace_warning(void *data, char *msg) | |||
2303 | 2303 | ||
2304 | static int backtrace_stack(void *data, char *name) | 2304 | static int backtrace_stack(void *data, char *name) |
2305 | { | 2305 | { |
2306 | per_cpu(in_nmi_frame, smp_processor_id()) = | 2306 | per_cpu(in_ignored_frame, smp_processor_id()) = |
2307 | x86_is_stack_id(NMI_STACK, name); | 2307 | x86_is_stack_id(NMI_STACK, name) || |
2308 | x86_is_stack_id(DEBUG_STACK, name); | ||
2308 | 2309 | ||
2309 | return 0; | 2310 | return 0; |
2310 | } | 2311 | } |
@@ -2313,7 +2314,7 @@ static void backtrace_address(void *data, unsigned long addr, int reliable) | |||
2313 | { | 2314 | { |
2314 | struct perf_callchain_entry *entry = data; | 2315 | struct perf_callchain_entry *entry = data; |
2315 | 2316 | ||
2316 | if (per_cpu(in_nmi_frame, smp_processor_id())) | 2317 | if (per_cpu(in_ignored_frame, smp_processor_id())) |
2317 | return; | 2318 | return; |
2318 | 2319 | ||
2319 | if (reliable) | 2320 | if (reliable) |