Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp3712473imj; Tue, 12 Feb 2019 03:27:27 -0800 (PST) X-Google-Smtp-Source: AHgI3IZ6JGr+OGUx0JNAm7At5s7B4ZpNj8c1hmdXc+07EWbv79OqJDcZqgzoB6wG4ddhygwVVg+4 X-Received: by 2002:a65:6150:: with SMTP id o16mr3240900pgv.434.1549970847659; Tue, 12 Feb 2019 03:27:27 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549970847; cv=none; d=google.com; s=arc-20160816; b=QJT4TMxW4U5bSakoiWpDXCnvvNYwhj9FumK1lqMZoDEPrNaOVymb5wcW5Ekri8o/1V 1u7LOBoQMlMXqoGEJWunDdvtrV6mxsRCDtpMCsjgft2dTJRROSO1tXwefep1iCkWCdMs KWixIw/IdhsFsU0qB+tOlkssPBe0nwAL7l6QpUWaXbC+A8dSG1IXdibn9hb5fX5AdQmE ay7cwul9Qi/JCHLRtEDTkxFGq3Bf+hlhcmDedBjLFZ0dTtlYW+zZygosWnhOot0wH6Cw SDE/VgLdzX3arZCgMveFbPd2bToLEpazaGOSc4t2XdQtwY8KQVAhC3kkF2iVLcjvtPcw tDFQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature; bh=g8e40E27J5MSW5B1/XTe1vJUg76OzSonBT54XQgBXs0=; b=B9eR09dzMyrfI6EHMVeoBOWmmri8mzMLmXPtCfEgtdV84hM+CR3WWQE8X4wporyzKv lf81oJyJg/fuoUFoYtnc3r9PBJE1n16gbxoIdI5iO9UhL/0b0XxwJqee2HuoN209SfKd ymTAHWyQtrS+V6HMa16mw3ukDj9KT693MSZQ6ErDL+m1FVHKQsEB66xgqEiev8r5dCxK 5EA5S8uMn2EGRtgyO0t0dgEBBoMvmsBjwD9BHUwt7upRUvFUEKJ7SmqL3oaCPB1G0G6B VLBm1QzPhFT0uGW+5Jvrgb24HL2uEo0IRC+5S3jgosDPxpQE3eVGYstK00xpGAs3W39m kDKg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=CzN+8crp; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=wdc.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w21si12933723ply.143.2019.02.12.03.27.12; Tue, 12 Feb 2019 03:27:27 -0800 (PST) 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; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=CzN+8crp; 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=wdc.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1729287AbfBLLKd (ORCPT + 99 others); Tue, 12 Feb 2019 06:10:33 -0500 Received: from esa2.hgst.iphmx.com ([68.232.143.124]:42874 "EHLO esa2.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729250AbfBLLKc (ORCPT ); Tue, 12 Feb 2019 06:10:32 -0500 DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1549969888; x=1581505888; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=YZUqK4Qfap9iJXTgeai1JroJ8SUKDUcCMd3sVPqcbE8=; b=CzN+8crpWaCyw1gul8xf/8KvMMr2fVk9L5KIBJV8k2BCpxzGXVet9s/6 X88gGZ5N1ZdN9bAurJo2/N8Hg/NYaMbUB3OSBnbi6hWCmLpyavhmB7PXI eNzQupODU7YR1fI8L0aJa326sY0912am6i2yMgX2k2oBE90ma/BLZ+SMp +oYK5Rfu4ENhasMcOYvr5dGX/NEGvJ/BPcEEfaPCvH9ZeGlcIZRIGsIm2 PXIa32oG65FRhxTzSaFIdXjvhgr/X9U0Ql6WOteIYL0DcO6WeAaOdwLQb 3t4IoQMxUALWHjXx2BrijV24PG3P4vmaRHkmpVFFUmoi5PztSSz8RWhDg g==; X-IronPort-AV: E=Sophos;i="5.58,361,1544457600"; d="scan'208";a="199201825" Received: from h199-255-45-15.hgst.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 12 Feb 2019 19:11:09 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP; 12 Feb 2019 02:50:56 -0800 Received: from jedi-01.sdcorp.global.sandisk.com (HELO jedi-01.int.fusionio.com) ([10.11.143.218]) by uls-op-cesaip02.wdc.com with ESMTP; 12 Feb 2019 03:10:20 -0800 From: Atish Patra To: linux-riscv@lists.infradead.org Cc: Atish Patra , Alan Kao , Albert Ou , Andreas Schwab , Anup Patel , Daniel Lezcano , Dmitriy Cherkasov , Jason Cooper , Johan Hovold , linux-kernel@vger.kernel.org, Marc Zyngier , Palmer Dabbelt , Paul Walmsley , Rob Herring , Thomas Gleixner Subject: [v4 PATCH 1/8] RISC-V: Do not wait indefinitely in __cpu_up Date: Tue, 12 Feb 2019 03:10:05 -0800 Message-Id: <1549969812-22502-2-git-send-email-atish.patra@wdc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1549969812-22502-1-git-send-email-atish.patra@wdc.com> References: <1549969812-22502-1-git-send-email-atish.patra@wdc.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In SMP path, __cpu_up waits for other CPU to come online indefinitely. This is wrong as other CPU might be disabled in machine mode and possible CPU is set to the cpus present in DT. Introduce a completion variable and waits only for a second. Signed-off-by: Atish Patra Reviewed-by: Anup Patel Reviewed-by: Christoph Hellwig --- arch/riscv/kernel/smpboot.c | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/arch/riscv/kernel/smpboot.c b/arch/riscv/kernel/smpboot.c index 6e281325..d369b669 100644 --- a/arch/riscv/kernel/smpboot.c +++ b/arch/riscv/kernel/smpboot.c @@ -39,6 +39,7 @@ void *__cpu_up_stack_pointer[NR_CPUS]; void *__cpu_up_task_pointer[NR_CPUS]; +static DECLARE_COMPLETION(cpu_running); void __init smp_prepare_boot_cpu(void) { @@ -77,6 +78,7 @@ void __init setup_smp(void) int __cpu_up(unsigned int cpu, struct task_struct *tidle) { + int ret = 0; int hartid = cpuid_to_hartid_map(cpu); tidle->thread_info.cpu = cpu; @@ -92,10 +94,16 @@ int __cpu_up(unsigned int cpu, struct task_struct *tidle) task_stack_page(tidle) + THREAD_SIZE); WRITE_ONCE(__cpu_up_task_pointer[hartid], tidle); - while (!cpu_online(cpu)) - cpu_relax(); + lockdep_assert_held(&cpu_running); + wait_for_completion_timeout(&cpu_running, + msecs_to_jiffies(1000)); - return 0; + if (!cpu_online(cpu)) { + pr_crit("CPU%u: failed to come online\n", cpu); + ret = -EIO; + } + + return ret; } void __init smp_cpus_done(unsigned int max_cpus) @@ -121,6 +129,7 @@ asmlinkage void __init smp_callin(void) * a local TLB flush right now just in case. */ local_flush_tlb_all(); + complete(&cpu_running); /* * Disable preemption before enabling interrupts, so we don't try to * schedule a CPU that hasn't actually started yet. -- 2.7.4