Messages in this thread |  | | Date | Fri, 25 Aug 2017 17:10:10 -0400 | From | Steven Rostedt <> | Subject | Re: [patch 14/41] x86/smp: Use static key for reschedule interrupt tracing |
| |
On Fri, 25 Aug 2017 22:07:33 +0200 (CEST) Thomas Gleixner <tglx@linutronix.de> wrote:
> Fixed up version below. >
Reviewed-by: Steven Rostedt (VMware) <rostedt@goodmis.org>
-- Steve
> Thanks, > > tglx > 8<--------------------- > --- a/arch/x86/include/asm/hw_irq.h > +++ b/arch/x86/include/asm/hw_irq.h > @@ -48,7 +48,7 @@ extern asmlinkage void call_function_sin > > #ifdef CONFIG_TRACING > /* Interrupt handlers registered during init_IRQ */ > -extern void trace_reschedule_interrupt(void); > +#define trace_reschedule_interrupt reschedule_interrupt > #define trace_call_function_interrupt call_function_interrupt > #define trace_call_function_single_interrupt call_function_single_interrupt > #define trace_thermal_interrupt thermal_interrupt > --- a/arch/x86/kernel/smp.c > +++ b/arch/x86/kernel/smp.c > @@ -254,37 +254,27 @@ static void native_stop_other_cpus(int w > } > > /* > - * Reschedule call back. > + * Reschedule call back. KVM uses this interrupt to force a cpu out of > + * guest mode > */ > -static inline void __smp_reschedule_interrupt(void) > -{ > - inc_irq_stat(irq_resched_count); > - scheduler_ipi(); > -} > - > __visible void __irq_entry smp_reschedule_interrupt(struct pt_regs *regs) > { > ack_APIC_irq(); > - __smp_reschedule_interrupt(); > - /* > - * KVM uses this interrupt to force a cpu out of guest mode > - */ > -} > - > -__visible void __irq_entry smp_trace_reschedule_interrupt(struct pt_regs *regs) > -{ > - /* > - * Need to call irq_enter() before calling the trace point. > - * __smp_reschedule_interrupt() calls irq_enter/exit() too (in > - * scheduler_ipi(). This is OK, since those functions are allowed > - * to nest. > - */ > - ipi_entering_ack_irq(); > - trace_reschedule_entry(RESCHEDULE_VECTOR); > inc_irq_stat(irq_resched_count); > + > + if (trace_irqvectors_enabled()) { > + /* > + * scheduler_ipi() might call irq_enter() as well, but > + * nested calls are fine. > + */ > + irq_enter(); > + trace_reschedule_entry(RESCHEDULE_VECTOR); > + scheduler_ipi(); > + trace_reschedule_exit(RESCHEDULE_VECTOR); > + irq_exit(); > + return; > + } > scheduler_ipi(); > - trace_reschedule_exit(RESCHEDULE_VECTOR); > - exiting_irq(); > } > > __visible void __irq_entry smp_call_function_interrupt(struct pt_regs *regs) >
|  |