From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1946629AbcBRPTp (ORCPT ); Thu, 18 Feb 2016 10:19:45 -0500 Received: from mout.kundenserver.de ([212.227.126.130]:56040 "EHLO mout.kundenserver.de" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1426127AbcBRPT3 (ORCPT ); Thu, 18 Feb 2016 10:19:29 -0500 From: Arnd Bergmann To: Russell King - ARM Linux Cc: linux-arm-kernel@lists.infradead.org, Ard Biesheuvel , Nicolas Pitre , Jon Medhurst , Marc Zyngier , Daniel Thompson , linux-kernel@vger.kernel.org Subject: Re: [PATCH 2/9] ARM: change NR_IPIS to 8 Date: Thu, 18 Feb 2016 16:18:59 +0100 Message-ID: <2915766.O3WEnikESX@wuerfel> User-Agent: KMail/4.11.5 (Linux/3.16.0-10-generic; KDE/4.11.5; x86_64; ; ) In-Reply-To: <20160218143709.GQ19428@n2100.arm.linux.org.uk> References: <1455804123-2526139-1-git-send-email-arnd@arndb.de> <1455804123-2526139-3-git-send-email-arnd@arndb.de> <20160218143709.GQ19428@n2100.arm.linux.org.uk> MIME-Version: 1.0 Content-Transfer-Encoding: 7Bit Content-Type: text/plain; charset="us-ascii" X-Provags-ID: V03:K0:zsHsv1o84G31uh+HLXLqg7Bd5ju902wKIbFt0HoVD03q3e/0tNO jrvBRENyPvnVUDxupWnYxKPAxVY9/HA8fRxuBo34vwz1Bn9SybvZEzGLhdcyM9OZPb+Ki26 z4fMV9jm0BfGpVECuJ5HEjPjquHPxu9F+nZzASHer9kVRVboWgo4ePy8B+tSnvhvAQp/XdD cwz/T0mcIjV0asGite6Dg== X-UI-Out-Filterresults: notjunk:1;V01:K0:F57w/vn6hDw=:xKcwce7a8TjLVb+EHm2GRo pYpMsIS7F6gdIit57lBYykQZVY4N+XI0ifcjEzy4zKUuOy+XRaQSLcd79fRi1gGmz/eCxuVdx vESWLm53LX1LjTfYpTYLgYLKSwO+h2VrANUW7t6sNQ+vWpRF/JJcu0hVpT1TNaEyFN7ls2iRA T6ZrAJAnefJHWFte/U/s5dA6jM7JnmAbQEEYow4o04Fib+sKsJEeymoPC15sqYZKUHZBL0wEn yMoSk8IGvWPlbuHnpHHItYJH4yBPXsVrQs8OomAp5zUPUbqSqJn3/RGaoCSFUrQV3XPoRnnxL F/8Wr9hHRZCMt/pLMAIuVzn4jYAgLs7JxJmxoPsEfYvRCAlIRPlIZnAstI+xfzQgtgI6juLuc oNMZFLH2SDJsPe0DknuKBsQQqvpMxT+f4bSinSqyf5rVRQUy3QMxE13B0deG3GDSYRe+MkaWB CBRcTNAagQp/vSNCR2LYhOMWU5eHS5ZQd39cNYPBWoxeX2lqpUHrqa9qq+iIhcUAzYmhEEsS6 CoevEpyu1Bgayq0E/+HScF1QH6V6phzYokKR15mHSNfQrp2aU4fxxjV1sZkgUmc0bzeD2MVVi SqgZykExwbHhNknK3XkW6wWSUizpH0cD5LLDS2UGmgpDW7+GawVTFxE5EKz7Mwc5rDFZPAqSE H+/PkMtwYH+cN557jSkxyJIq2d6yXhEX1gpLw8I1zS/0MQbavF7SP1hoov+WErsfyTVIFK1hp yUF/U1AvEB7KySZp Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Thursday 18 February 2016 14:37:09 Russell King - ARM Linux wrote: > On Thu, Feb 18, 2016 at 03:01:54PM +0100, Arnd Bergmann wrote: > > When function tracing for IPIs is enabled, we get a warning for an > > overflow of the ipi_types array with the IPI_CPU_BACKTRACE type > > as triggered by raise_nmi(): > > > > arch/arm/kernel/smp.c: In function 'raise_nmi': > > arch/arm/kernel/smp.c:489:2: error: array subscript is above array bounds [-Werror=array-bounds] > > trace_ipi_raise(target, ipi_types[ipinr]); > > We really don't want to treat the backtrace IPI as a normal IPI at all - > we want it to invoke the least amount of code possible. Hence this code > which avoids the issue: > > if ((unsigned)ipinr < NR_IPI) { > trace_ipi_entry_rcuidle(ipi_types[ipinr]); > __inc_irq_stat(cpu, ipi_irqs[ipinr]); > } > > However, what's missing is that the addition of tracing here missed > that CPU_BACKTRACE is not to be traced. The call in raise_nmi() > should have been converted to __smp_cross_call() to avoid the > tracing code. I've replaced the patch locally with the version below now, and will throw it into the randconfig build test infrastructure to make sure I didn't screw up in an obvious way here. Arnd >>From 7528c9b0558fdf4de785e62e61f0dd2ffe874110 Mon Sep 17 00:00:00 2001 From: Arnd Bergmann Date: Sun, 31 Jan 2016 22:26:21 +0100 Subject: [PATCH] ARM: prevent tracing IPI_CPU_BACKTRACE When function tracing for IPIs is enabled, we get a warning for an overflow of the ipi_types array with the IPI_CPU_BACKTRACE type as triggered by raise_nmi(): arch/arm/kernel/smp.c: In function 'raise_nmi': arch/arm/kernel/smp.c:489:2: error: array subscript is above array bounds [-Werror=array-bounds] trace_ipi_raise(target, ipi_types[ipinr]); This is a correct warning as we actually overflow the array here. This patch raise_nmi() to call __smp_cross_call() instead of smp_cross_call(), to avoid calling into ftrace. For clarification, I'm also adding a two new code comments describing how this one is special. The warning appears to have shown up after patch e7273ff49acf ("ARM: 8488/1: Make IPI_CPU_BACKTRACE a "non-secure" SGI"), which changed the number assignment from '15' to '8', but as far as I can tell has existed since the IPI tracepoints were first introduced. If we decide to backport this patch to stable kernels, we probably need to backport e7273ff49acf as well. Signed-off-by: Arnd Bergmann Fixes: e7273ff49acf ("ARM: 8488/1: Make IPI_CPU_BACKTRACE a "non-secure" SGI") Fixes: 365ec7b17327 ("ARM: add IPI tracepoints") # v3.17 Signed-off-by: Arnd Bergmann diff --git a/arch/arm/include/asm/hardirq.h b/arch/arm/include/asm/hardirq.h index 3d7351c844aa..2fd0a2619b0b 100644 --- a/arch/arm/include/asm/hardirq.h +++ b/arch/arm/include/asm/hardirq.h @@ -5,6 +5,7 @@ #include #include +/* number of IPIS _not_ including IPI_CPU_BACKTRACE */ #define NR_IPI 7 typedef struct { diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c index b4048e370730..9802a94260db 100644 --- a/arch/arm/kernel/smp.c +++ b/arch/arm/kernel/smp.c @@ -72,6 +72,10 @@ enum ipi_msg_type { IPI_CPU_STOP, IPI_IRQ_WORK, IPI_COMPLETION, + /* + * CPU_BACKTRACE is special and not included in NR_IPI + * or tracable with trace_ipi_* + */ IPI_CPU_BACKTRACE, /* * SGI8-15 can be reserved by secure firmware, and thus may @@ -757,7 +761,7 @@ static void raise_nmi(cpumask_t *mask) if (cpumask_test_cpu(smp_processor_id(), mask) && irqs_disabled()) nmi_cpu_backtrace(NULL); - smp_cross_call(mask, IPI_CPU_BACKTRACE); + __smp_cross_call(mask, IPI_CPU_BACKTRACE); } void arch_trigger_all_cpu_backtrace(bool include_self)