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=-8.2 required=3.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham 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 1F0CBC3A5A3 for ; Tue, 27 Aug 2019 16:04:32 +0000 (UTC) Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (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 E60DC2173E for ; Tue, 27 Aug 2019 16:04:31 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Rc5DlX0t" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org E60DC2173E Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+infradead-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=bombadil.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:References: Message-ID:Subject:To:From:Date:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=Qb3Fh3B25c0g2tGNkOl9QMqkKB53bHrohvBSYIZ+6wE=; b=Rc5DlX0tysDYPp HQe4HZcmB8uqaSlbnGBJ3qlgy3Tqsm+CCgyPiwQYrue3kVy0wZ9io/OSWwgMUqoG0BCbyqgqEP54B AmMCs54mwxxmsZIsaBv2eCqrjeASyL1DTKNKvdx9O5ZKFfluIgYE7Wzv1KrRx0T8q3Jgy+EIOqsDY H3Y4/t1B2mdxBhnffApsg0eqbcz/nJWiBhoqPDZhPUxtMu9sNV7TrukoKBNlSMxkmljs9yNcVuk1m G3YWXkdbFRQJ0RjkBFewSYoh95TEFM4bUx3I80Bp9TwIH/cbgW/BQxY2JnR6zvHtPlT5AYs1eV0wM r+LMwsUjIHLS4wwTsvGQ==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1i2dxH-0008O2-A3; Tue, 27 Aug 2019 16:04:23 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.92 #3 (Red Hat Linux)) id 1i2dxD-0008N9-VY for linux-arm-kernel@lists.infradead.org; Tue, 27 Aug 2019 16:04:21 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 67E28337; Tue, 27 Aug 2019 09:04:19 -0700 (PDT) Received: from lakrids.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D1A013F59C; Tue, 27 Aug 2019 09:04:18 -0700 (PDT) Date: Tue, 27 Aug 2019 17:04:16 +0100 From: Mark Rutland To: Will Deacon Subject: Re: [PATCH 2/3] arm64: smp: Don't enter kernel with NULL stack pointer or task struct Message-ID: <20190827160416.GC43183@lakrids.cambridge.arm.com> References: <20190827151815.2160-1-will@kernel.org> <20190827151815.2160-3-will@kernel.org> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20190827151815.2160-3-will@kernel.org> User-Agent: Mutt/1.11.1+11 (2f07cb52) (2018-12-01) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20190827_090420_060141_0BD3AB6E X-CRM114-Status: GOOD ( 18.23 ) 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: catalin.marinas@arm.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+infradead-linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Tue, Aug 27, 2019 at 04:18:14PM +0100, Will Deacon wrote: > Although SMP bringup is inherently racy, we can significantly reduce > the window during which secondary CPUs can unexpectedly enter the > kernel by sanity checking the 'stack' and 'task' fields of the > 'secondary_data' structure. If the booting CPU gave up waiting for us, > then they will have been cleared to NULL and we should spin in a WFE; WFI > loop instead. > > Signed-off-by: Will Deacon In future I think that we can handle this better using the MPIDR hash and atomics to flip the values and cater for races, but this is better than what we have, so FWIW: Reviewed-by: Mark Rutland Thanks, Mark. > --- > arch/arm64/kernel/head.S | 8 ++++++++ > arch/arm64/kernel/smp.c | 1 + > 2 files changed, 9 insertions(+) > > diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S > index 2cdacd1c141b..0baadf335172 100644 > --- a/arch/arm64/kernel/head.S > +++ b/arch/arm64/kernel/head.S > @@ -724,14 +724,22 @@ __secondary_switched: > > adr_l x0, secondary_data > ldr x1, [x0, #CPU_BOOT_STACK] // get secondary_data.stack > + cbz x1, __secondary_too_slow > mov sp, x1 > ldr x2, [x0, #CPU_BOOT_TASK] > + cbz x2, __secondary_too_slow > msr sp_el0, x2 > mov x29, #0 > mov x30, #0 > b secondary_start_kernel > ENDPROC(__secondary_switched) > > +__secondary_too_slow: > + wfe > + wfi > + b __secondary_too_slow > +ENDPROC(__secondary_too_slow) > + > /* > * The booting CPU updates the failed status @__early_cpu_boot_status, > * with MMU turned off. > diff --git a/arch/arm64/kernel/smp.c b/arch/arm64/kernel/smp.c > index 63c7a7682e93..1f8aeb77cba5 100644 > --- a/arch/arm64/kernel/smp.c > +++ b/arch/arm64/kernel/smp.c > @@ -136,6 +136,7 @@ int __cpu_up(unsigned int cpu, struct task_struct *idle) > > secondary_data.task = NULL; > secondary_data.stack = NULL; > + __flush_dcache_area(&secondary_data, sizeof(secondary_data)); > status = READ_ONCE(secondary_data.status); > if (ret && status) { > > -- > 2.11.0 > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel