summaryrefslogtreecommitdiff
path: root/arch/x86/kernel
diff options
context:
space:
mode:
authorThomas Gleixner <tglx@linutronix.de>2017-08-28 08:47:33 +0200
committerIngo Molnar <mingo@kernel.org>2017-08-29 11:42:29 +0200
commit809547472edae0bc68f2b5abc37b92c8a988bc8a (patch)
treee2950f22635cbb3a075239d0f4893eead384eac9 /arch/x86/kernel
parent6f54f3ec6c5d866c0517e9cf444bed762c2a05b7 (diff)
x86/tracing: Disentangle pagefault and resched IPI tracing key
The pagefault and the resched IPI handler are the only ones where it is worth to optimize the code further in case tracepoints are disabled. But it makes no sense to have a single static key for both. Seperate the static keys so the facilities are handled seperately. Signed-off-by: Thomas Gleixner <tglx@linutronix.de> Cc: Andy Lutomirski <luto@kernel.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Steven Rostedt <rostedt@goodmis.org> Link: http://lkml.kernel.org/r/20170828064957.536699116@linutronix.de Signed-off-by: Ingo Molnar <mingo@kernel.org>
Diffstat (limited to 'arch/x86/kernel')
-rw-r--r--arch/x86/kernel/smp.c2
-rw-r--r--arch/x86/kernel/tracepoint.c27
2 files changed, 23 insertions, 6 deletions
diff --git a/arch/x86/kernel/smp.c b/arch/x86/kernel/smp.c
index cfe865b85bc5..5c574dff4c1a 100644
--- a/arch/x86/kernel/smp.c
+++ b/arch/x86/kernel/smp.c
@@ -262,7 +262,7 @@ __visible void __irq_entry smp_reschedule_interrupt(struct pt_regs *regs)
ack_APIC_irq();
inc_irq_stat(irq_resched_count);
- if (trace_irqvectors_enabled()) {
+ if (trace_resched_ipi_enabled()) {
/*
* scheduler_ipi() might call irq_enter() as well, but
* nested calls are fine.
diff --git a/arch/x86/kernel/tracepoint.c b/arch/x86/kernel/tracepoint.c
index 4cae92f15495..c6636d1f60b9 100644
--- a/arch/x86/kernel/tracepoint.c
+++ b/arch/x86/kernel/tracepoint.c
@@ -10,15 +10,32 @@
#include <asm/hw_irq.h>
#include <asm/desc.h>
-DEFINE_STATIC_KEY_FALSE(trace_irqvectors_key);
+DEFINE_STATIC_KEY_FALSE(trace_pagefault_key);
-int trace_irq_vector_regfunc(void)
+int trace_pagefault_reg(void)
{
- static_branch_inc(&trace_irqvectors_key);
+ static_branch_inc(&trace_pagefault_key);
return 0;
}
-void trace_irq_vector_unregfunc(void)
+void trace_pagefault_unreg(void)
{
- static_branch_dec(&trace_irqvectors_key);
+ static_branch_dec(&trace_pagefault_key);
}
+
+#ifdef CONFIG_SMP
+
+DEFINE_STATIC_KEY_FALSE(trace_resched_ipi_key);
+
+int trace_resched_ipi_reg(void)
+{
+ static_branch_inc(&trace_resched_ipi_key);
+ return 0;
+}
+
+void trace_resched_ipi_unreg(void)
+{
+ static_branch_dec(&trace_resched_ipi_key);
+}
+
+#endif