Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp1106581imj; Thu, 7 Feb 2019 17:54:17 -0800 (PST) X-Google-Smtp-Source: AHgI3IZkF2IbE8PFFQLw7C3qGN0KnuHSc7oTd7DuAtoMvgHR1ESv5GTjKAqjgMynL0pUtGiPZ6Nj X-Received: by 2002:a62:7dcb:: with SMTP id y194mr19593399pfc.113.1549590857242; Thu, 07 Feb 2019 17:54:17 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1549590857; cv=none; d=google.com; s=arc-20160816; b=bD47mtr/H8uXXZBYkGPLWDS+iHbSQgUXbn7+4vH8J9WIxSjrvZO5j1/8EnhGPq+jgE p9+siu+byAxHziKj6puGUEO1w+VntP6Kk0I1r7SX9rQtUeHZx9JKfkIaN+/p1ahZOeqs AKpKZdZONktQy70KpHzfPHNfD+LsaKDPQT7j1grf1zovKRUY6hQe1jEqdHGSUM27bvFe 0twZaYAweiboC2ZnUysxIk6vucxX9pAxBPHcEHtBBOpOVy5VpxCaPZej5ohDeyeNOOVI rfI09mYl/HXPlbiSBwhb+xeJO4K/VNd8dGZOI5qIDwKzh3C/7hOwDhjmqBosU5i1ZNYw MO4g== 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=Ij9zG6r90XrJu4Qj2eVcFhyvdY5ZxA0/7FAvSNitSqU=; b=C2xDoEEg728M83gf2x/DHXfIzhv3WULBMc6po7iUeBDbnJoxKboiQEURBdyXxqLHDc 1N/JVUXM8f1Sz+/XiCN8CYhAzAH1wdw+MW4R+9KHFsrhCmzaNimdG301hyEWkiCtvtPB xHGNqqzoXur157eVp9IFRJS37LfTkX2U+uWkzZGs9v4TIdutibiOQXuh+YyZDP6s3M76 HyRasPlJuTmv0KlB7NW8CNhMxPfVsHs58mgtgSjcYqzVpUArf3zOHpx+/L76P2EiJGwO 7HCf+64ITCFwX6cFeJh4qbYA0Z7kt4COYOXTs6NUDvpt4NfalkchH+nBGric+UYk7XoQ 7R6w== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=K9wXloD8; 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 j61si735109plb.232.2019.02.07.17.54.01; Thu, 07 Feb 2019 17:54:17 -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=K9wXloD8; 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 S1727210AbfBHBvh (ORCPT + 99 others); Thu, 7 Feb 2019 20:51:37 -0500 Received: from esa4.hgst.iphmx.com ([216.71.154.42]:13327 "EHLO esa4.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1727123AbfBHBvg (ORCPT ); Thu, 7 Feb 2019 20:51:36 -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=1549590696; x=1581126696; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=vXTNOfhaX1sMa2pzdV0jZjxGYA61VvpiJl8l5v0afQI=; b=K9wXloD84Gy8sjjmwjnFDy3e1IIhbiUN924u9rP/kb1z6lq0Co+I0WWW vR/j2+zqrWmIh271sW+IV8dMJ6vGd5TV1R7G/tInyJUERpjQdkDc+oIOa QrUCOvjWapO7N39Q+hCrgbp2cVWd56oIgREpv0SzDxCOmAonXzLJa8K+o 1mOgWr5nM6wEwf3+JirwWP8TGSZNj5dusTRviIga7MfmyQ8HfpGTUsIYp NpJRSZGyf01n8SkgV2EcNebT9nBWzVUU/sce+hJfFcmEXkryjnu1ZmXYz SYtns/5/Az/peOprxT9XbOaZRm70NTg1XfgQ6fqLC7Q8JDR0TGgkmDowl A==; X-IronPort-AV: E=Sophos;i="5.58,346,1544457600"; d="scan'208";a="100752783" Received: from uls-op-cesaip02.wdc.com (HELO uls-op-cesaep02.wdc.com) ([199.255.45.15]) by ob1.hgst.iphmx.com with ESMTP; 08 Feb 2019 09:51:35 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP; 07 Feb 2019 17:32:18 -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; 07 Feb 2019 17:51:35 -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 , linux-kernel@vger.kernel.org, Marc Zyngier , Palmer Dabbelt , =?UTF-8?q?Patrick=20St=C3=A4hlin?= , Paul Walmsley , Thomas Gleixner , Zong Li , Damien Le Moal Subject: [v3 PATCH 1/8] RISC-V: Do not wait indefinitely in __cpu_up Date: Thu, 7 Feb 2019 17:51:14 -0800 Message-Id: <1549590681-24125-2-git-send-email-atish.patra@wdc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1549590681-24125-1-git-send-email-atish.patra@wdc.com> References: <1549590681-24125-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 --- 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 18cda0e8..669eb332 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