From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-12.7 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, UNPARSEABLE_RELAY,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 52DC6C4727F for ; Thu, 24 Sep 2020 09:01:40 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 0E2402376F for ; Thu, 24 Sep 2020 09:01:39 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="l6/iDRXv" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 0E2402376F Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=collabora.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=nrmMscpWBaJU9/n3aUjuDT3romvVdOTQb43uSu/CU/A=; b=l6/iDRXvsj5j2LcczybxIyhPD 4/7ouZnIJUNnSxkTVGTYteOOOeLIW3y6ourn8yVeOiYuisao+oK4r9x6bY4at9iU36hiAlWg2OXjg x+4Gm4Akp3DsMQtp2YEH5mPflya7WttNEzinr6MDIv+7k+KoyIJM2q1lssfDzXIkDDjGCmIzp5/PL W5K6v267wm4cw7/Q6g8GDObm/Ty67gUWE4uY4+911d6saKHMmIjrku3k1AVy0R4/Tooe5/zoFrdcM zJIdPXHvmaAXJnDzpeQgvnagk3SinM0m+pjY4PPnlTVE7moIotzv0qbHTiwlFJFkGHc7OOxVVbOAB zOJTuA+cA==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kLN6w-00011R-Jd; Thu, 24 Sep 2020 09:00:18 +0000 Received: from bhuna.collabora.co.uk ([2a00:1098:0:82:1000:25:2eeb:e3e3]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kLN6t-0000zq-Jp for linux-arm-kernel@lists.infradead.org; Thu, 24 Sep 2020 09:00:16 +0000 Received: from [127.0.0.1] (localhost [127.0.0.1]) (Authenticated sender: gtucker) with ESMTPSA id 94D5029B8B9 Subject: Re: [PATCH v3 16/16] ARM: Remove custom IRQ stat accounting To: Marc Zyngier , Valentin Schneider References: <20200901144324.1071694-1-maz@kernel.org> <20200901144324.1071694-17-maz@kernel.org> From: Guillaume Tucker Message-ID: Date: Thu, 24 Sep 2020 10:00:09 +0100 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 MIME-Version: 1.0 In-Reply-To: <20200901144324.1071694-17-maz@kernel.org> Content-Language: en-US X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200924_050015_839251_70A09C71 X-CRM114-Status: GOOD ( 27.94 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Sumit Garg , Florian Fainelli , Russell King , Jason Cooper , Saravana Kannan , Andrew Lunn , Catalin Marinas , Gregory Clement , linux-kernel@vger.kernel.org, kernelci-results@groups.io, Will Deacon , Thomas Gleixner , kernel-team@android.com, linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Marc, On 01/09/2020 15:43, Marc Zyngier wrote: > Let's switch the arm code to the core accounting, which already > does everything we need. > > Reviewed-by: Valentin Schneider > Signed-off-by: Marc Zyngier > --- > arch/arm/include/asm/hardirq.h | 17 ----------------- > arch/arm/kernel/smp.c | 20 ++++---------------- > 2 files changed, 4 insertions(+), 33 deletions(-) This appears to be causing a NULL pointer dereference on beaglebone-black, it got bisected automatically several times. None of the other platforms in the KernelCI labs appears to be affected. Here's the error in the full job log, with next-20200923: https://storage.staging.kernelci.org/kernelci/staging.kernelci.org/staging-20200924.0/arm/multi_v7_defconfig/gcc-8/lab-baylibre/baseline-beaglebone-black.html#L460 and some meta-data: https://staging.kernelci.org/test/case/id/5f6bea67f724eb1b34dce584/ The full bisection report is available here: https://groups.io/g/kernelci-results-staging/message/2094 I've also run it again with a debug build to locate the problem, see below. > diff --git a/arch/arm/include/asm/hardirq.h b/arch/arm/include/asm/hardirq.h > index 7a88f160b1fb..b95848ed2bc7 100644 > --- a/arch/arm/include/asm/hardirq.h > +++ b/arch/arm/include/asm/hardirq.h > @@ -6,29 +6,12 @@ > #include > #include > > -/* number of IPIS _not_ including IPI_CPU_BACKTRACE */ > -#define NR_IPI 7 > - > typedef struct { > unsigned int __softirq_pending; > -#ifdef CONFIG_SMP > - unsigned int ipi_irqs[NR_IPI]; > -#endif > } ____cacheline_aligned irq_cpustat_t; > > #include /* Standard mappings for irq_cpustat_t above */ > > -#define __inc_irq_stat(cpu, member) __IRQ_STAT(cpu, member)++ > -#define __get_irq_stat(cpu, member) __IRQ_STAT(cpu, member) > - > -#ifdef CONFIG_SMP > -u64 smp_irq_stat_cpu(unsigned int cpu); > -#else > -#define smp_irq_stat_cpu(cpu) 0 > -#endif > - > -#define arch_irq_stat_cpu smp_irq_stat_cpu > - > #define __ARCH_IRQ_EXIT_IRQS_DISABLED 1 > > #endif /* __ASM_HARDIRQ_H */ > diff --git a/arch/arm/kernel/smp.c b/arch/arm/kernel/smp.c > index d51e64955a26..aead847ac8b9 100644 > --- a/arch/arm/kernel/smp.c > +++ b/arch/arm/kernel/smp.c > @@ -65,6 +65,7 @@ enum ipi_msg_type { > IPI_CPU_STOP, > IPI_IRQ_WORK, > IPI_COMPLETION, > + NR_IPI, > /* > * CPU_BACKTRACE is special and not included in NR_IPI > * or tracable with trace_ipi_* > @@ -529,27 +530,16 @@ void show_ipi_list(struct seq_file *p, int prec) > unsigned int cpu, i; > > for (i = 0; i < NR_IPI; i++) { > + unsigned int irq = irq_desc_get_irq(ipi_desc[i]); It looks like irq_desc_get_irq() gets called with a NULL pointer (well, 0x0000001c): (gdb) l *0xc030ef38 0xc030ef38 is in show_ipi_list (../include/linux/irqdesc.h:123). 118 return container_of(data->common, struct irq_desc, irq_common_data); 119 } 120 121 static inline unsigned int irq_desc_get_irq(struct irq_desc *desc) 122 { 123 return desc->irq_data.irq; 124 } 125 126 static inline struct irq_data *irq_desc_get_irq_data(struct irq_desc *desc) 127 { Full job log: https://lava.baylibre.com/scheduler/job/142375#L727 I haven't looked any further but hopefully this should be a good enough clue to find the root cause. I don't know if you have a platform at hand to reproduce the issue, please let me know if you need some help with debugging or testing a fix. Hope this helps, Guillaume > seq_printf(p, "%*s%u: ", prec - 1, "IPI", i); > > for_each_online_cpu(cpu) > - seq_printf(p, "%10u ", > - __get_irq_stat(cpu, ipi_irqs[i])); > + seq_printf(p, "%10u ", kstat_irqs_cpu(irq, cpu)); > > seq_printf(p, " %s\n", ipi_types[i]); > } > } > > -u64 smp_irq_stat_cpu(unsigned int cpu) > -{ > - u64 sum = 0; > - int i; > - > - for (i = 0; i < NR_IPI; i++) > - sum += __get_irq_stat(cpu, ipi_irqs[i]); > - > - return sum; > -} > - > void arch_send_call_function_ipi_mask(const struct cpumask *mask) > { > smp_cross_call(mask, IPI_CALL_FUNC); > @@ -630,10 +620,8 @@ static void do_handle_IPI(int ipinr) > { > unsigned int cpu = smp_processor_id(); > > - if ((unsigned)ipinr < NR_IPI) { > + if ((unsigned)ipinr < NR_IPI) > trace_ipi_entry_rcuidle(ipi_types[ipinr]); > - __inc_irq_stat(cpu, ipi_irqs[ipinr]); > - } > > switch (ipinr) { > case IPI_WAKEUP: > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel