From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1758406AbdHYTkU (ORCPT ); Fri, 25 Aug 2017 15:40:20 -0400 Received: from mail.kernel.org ([198.145.29.99]:56014 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1758333AbdHYTkT (ORCPT ); Fri, 25 Aug 2017 15:40:19 -0400 DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3916E21A1D Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=goodmis.org Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=rostedt@goodmis.org Date: Fri, 25 Aug 2017 15:40:16 -0400 From: Steven Rostedt To: Thomas Gleixner Cc: LKML , Ingo Molnar , Peter Anvin , Peter Zijlstra , Andy Lutomirski , Borislav Petkov Subject: Re: [patch 14/41] x86/smp: Use static key for reschedule interrupt tracing Message-ID: <20170825154016.2b692126@gandalf.local.home> In-Reply-To: <20170825104414.076899278@linutronix.de> References: <20170825103103.287814238@linutronix.de> <20170825104414.076899278@linutronix.de> X-Mailer: Claws Mail 3.14.0 (GTK+ 2.24.31; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Fri, 25 Aug 2017 12:31:17 +0200 Thomas Gleixner wrote: > -__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); > + if (trace_irqvectors_enabled()) { > + /* > + * scheduler_ipi() might call irq_enter() as well, but > + * nested calls are fine. > + */ > + irq_enter(); > + trace_reschedule_entry(RESCHEDULE_VECTOR); > + } > + > inc_irq_stat(irq_resched_count); > scheduler_ipi(); > - trace_reschedule_exit(RESCHEDULE_VECTOR); > - exiting_irq(); > + > + if (trace_irqvectors_enabled()) { > + trace_reschedule_exit(RESCHEDULE_VECTOR); > + irq_exit(); This is racy. If the static key gets changed on one and not the other, we lose the irq_enter/irq_exit match. -- Steve > + } > } > > __visible void __irq_entry smp_call_function_interrupt(struct pt_regs *regs) >