Received: by 2002:ac0:98c7:0:0:0:0:0 with SMTP id g7-v6csp703930imd; Thu, 1 Nov 2018 04:21:52 -0700 (PDT) X-Google-Smtp-Source: AJdET5doxBWjFj0T4uHL7dCsLJisdtQLocz8UgaoeMc2Vfs6qXtNtfxr/0UbYBept5TQVr3SRWUv X-Received: by 2002:a65:5347:: with SMTP id w7-v6mr6969769pgr.17.1541071312730; Thu, 01 Nov 2018 04:21:52 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1541071312; cv=none; d=google.com; s=arc-20160816; b=iQhGDJP02BouLW1a5VkfAqJhYtPs1xrfrIO4OXaRycovEBpwnv4IDYQm6f8PZMjFcF yL6Vh+V+2Sl27gfMo1c2qbJrhBcuH26ELPnt4iYk6TS9KPBh+2F6VwVviJcgGSzXA/qf EscAuSy1b9EIN/UTV87cEHIrg95+axyYg+7GmuuiQ6Og0V37RnEMQ9Doy0yDsY+reNoD YixLTcsDOSFKQdO50G311v80W0nKqpH+aEotwymq+cL94ji4qaed60Q4Uu2/YVSt5CGN oilJ82Vs18f/TZWsQQLXGnCFoEuIdCQS8QgJbo1eBRzEQ0yn1jDOAWXJbnMfiQiKiqvr k3Hg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:message-id:date:subject:cc :to:from; bh=sCHrr4kjM35J2MTuZSMFfw2OLi/2pTbIT2lxYy9+500=; b=cb0+AqduZXnposl7/jL2cGw8mucjkQFHO6kaaGoNZlGhbtGnNbe1zmorwPSPuvtsKO NAH+i2oAoy/0UQqYqFcPCHmIVSPoRk7JONUQYBihcOO+Bh0oJ1VepR8kavkJxC54TYW+ jlOWRvLo2DBvXea40NEE3iHZrjGqXu98PArmzL8LVXkkrki3OHHkWfFd4d4oOSrIVv9h 6kHr8ZPEaErQS04N7VJEZUUE24EUYo3jpTCf/lsINxNtN5H1OAWdQsNKmZxsKgLBpUxD 118DL3nRT+q+heBzIBirK+wN321zJjH10ixMZeQec7IxcvOQRQnWUZQJPyhjqoBri9SI 22Cg== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id p20-v6si6518053plq.379.2018.11.01.04.21.37; Thu, 01 Nov 2018 04:21:52 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727999AbeKAUXq (ORCPT + 99 others); Thu, 1 Nov 2018 16:23:46 -0400 Received: from szxga05-in.huawei.com ([45.249.212.191]:14165 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1727736AbeKAUXq (ORCPT ); Thu, 1 Nov 2018 16:23:46 -0400 Received: from DGGEMS405-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 4BC5959B0D180; Thu, 1 Nov 2018 19:21:11 +0800 (CST) Received: from localhost (10.177.25.132) by DGGEMS405-HUB.china.huawei.com (10.3.19.205) with Microsoft SMTP Server id 14.3.408.0; Thu, 1 Nov 2018 19:21:03 +0800 From: Wang Yufen To: CC: , , , , , , , , , , Yufen Wang Subject: [PATCH] ARM:kexec:offline panic_smp_self_stop CPU Date: Thu, 1 Nov 2018 19:20:49 +0800 Message-ID: <1541071249-15660-1-git-send-email-wangyufen@huawei.com> X-Mailer: git-send-email 1.8.1.msysgit.1 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.177.25.132] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org From: Yufen Wang In case panic() and panic() called at the same time on different CPUS. For example: CPU 0: panic() __crash_kexec machine_crash_shutdown crash_smp_send_stop machine_kexec BUG_ON(num_online_cpus() > 1); CPU 1: panic() local_irq_disable panic_smp_self_stop If CPU 1 calls panic_smp_self_stop() before crash_smp_send_stop(), kdump fails. CPU1 can't receive the ipi irq, CPU1 will be always online. I changed BUG_ON to WARN in kexec crash as arm64 does, kdump also fails. Because num_online_cpus() > 1, can't disable the L2 in _soft_restart. To fix this problem, this patch split out the panic_smp_self_stop() and add set_cpu_online(smp_processor_id(), false). Signed-off-by: Yufen Wang --- arch/arm/kernel/setup.c | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c index 31940bd..151861f 100644 --- a/arch/arm/kernel/setup.c +++ b/arch/arm/kernel/setup.c @@ -602,6 +602,16 @@ static void __init smp_build_mpidr_hash(void) } #endif +void panic_smp_self_stop(void) +{ + printk(KERN_DEBUG "CPU %u will stop doing anything useful since another CPU has paniced\n", + smp_processor_id()); + set_cpu_online(smp_processor_id(), false); + while (1) + cpu_relax(); + +} + static void __init setup_processor(void) { struct proc_info_list *list; -- 2.7.4