Received: by 2002:ac0:946b:0:0:0:0:0 with SMTP id j40csp1062761imj; Thu, 14 Feb 2019 00:13:43 -0800 (PST) X-Google-Smtp-Source: AHgI3Ia9HWeUU+7YGfTOFbW4ypWrYntMYdrmHREZ5YvT+ZAQaiPbLjuTrg9BPPNbvLTNF86qFnfl X-Received: by 2002:a62:4389:: with SMTP id l9mr2863503pfi.170.1550132023341; Thu, 14 Feb 2019 00:13:43 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1550132023; cv=none; d=google.com; s=arc-20160816; b=m5TAgkpFgw4k4nKqrqzvEnlxv+Ej28eUjeqrMgpjxOwt9tJ5hQaMw3B+D6b1O+xeNL VK1hQVM75Sl8qLNti32X7iC5UjtX1lFUUbzeXduyU73IjTDwA93sHBGYo4rUOnUKpPMd Nl5kzJE9D5vrGQXtCKBaNupZ2ic5DAsdVCb6ecOImI5pnCD29L3R7ggMtYQUt9eQk7Lc wN2+Zi20ER4vvRcwHSY79Ygwlyh6KZXGVzj25wSn+bE9+S/NzOlb1LTY1CeJkmz1e6ND +oW/vJ1wVkZiqcedGJ97AH+pluAvXPjF/rqlZ1L9rjp6Saw+2md1tH75pYa8EwBXrOdG OAOA== 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=UspThm+3Majz6hvt7hVHdTLd5D4/gFarTNExShHd5Q3Zby45NCKuXdTlB8zDOtvyB7 Iq1o2LT3/tSeftU8Si+zylJGhVe1knDKPEq/AGRBPlsB3Ci4isd4VS5pHXB9QwQhIcV8 mIRhKSiUPDt7qc6g30HCG1Hdprz8M1uEyJFqgTZfAg0xbqilA1rkG/okUkU5md+2AE7O XHSB6xy3QjgupX/my6V4jQOqZYGbiBFeolEiByDfYJ/l1+lb+iE0S5D3H0EKmopazcV7 GCVjhYGJV7BLkQ5KAB2pJDkb6NCH5fRXh9hwZJfE0wFF4N4vz7Ig0cb5LXTred8nxvYS ytVg== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@wdc.com header.s=dkim.wdc.com header.b=bRPJ2lW1; 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 e15si1754314pgg.281.2019.02.14.00.13.27; Thu, 14 Feb 2019 00:13:43 -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=bRPJ2lW1; 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 S2394567AbfBMUSW (ORCPT + 99 others); Wed, 13 Feb 2019 15:18:22 -0500 Received: from esa1.hgst.iphmx.com ([68.232.141.245]:63574 "EHLO esa1.hgst.iphmx.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2394556AbfBMUSV (ORCPT ); Wed, 13 Feb 2019 15:18:21 -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=1550089101; x=1581625101; h=from:to:cc:subject:date:message-id:in-reply-to: references; bh=YZUqK4Qfap9iJXTgeai1JroJ8SUKDUcCMd3sVPqcbE8=; b=bRPJ2lW1XnJAt6Kq3deax77XKlKElGX9xJ6cBWQp53i5gkyTExoTE56b HBpQuxSzB+9vuOoJ+CGep7cDxT2Xo8bP6SccHLITku3hh5Q1TUOt8/eVM piFbrFiIEG83oao0ra0ygszH8dxJNRhQjAEz+TsInulaaf95sj/TzBa32 mGb5XAetsRw8feKM+dgUmNPkZwFPE5Q4QgWFDXcIvSe6G8lUlTseEXYKn YOU7GzDXN5ErzUpxXV5qFJYBlIWakm7psJ0b9UzEOM6nVLONqT/W202FG qe/cPGLzAoNkLx7bQpfxCSmoZafYPltH0Ziop7ATdkBCmHImrbXLMSz/I w==; X-IronPort-AV: E=Sophos;i="5.58,366,1544457600"; d="scan'208";a="206321181" 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; 14 Feb 2019 04:18:20 +0800 Received: from uls-op-cesaip02.wdc.com ([10.248.3.37]) by uls-op-cesaep02.wdc.com with ESMTP; 13 Feb 2019 11:58:54 -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; 13 Feb 2019 12:18: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 , Guenter Roeck , Jason Cooper , Johan Hovold , linux-kernel@vger.kernel.org, Marc Zyngier , Palmer Dabbelt , Paul Walmsley , Thomas Gleixner Subject: [v5 PATCH 1/8] RISC-V: Do not wait indefinitely in __cpu_up Date: Wed, 13 Feb 2019 12:18:05 -0800 Message-Id: <1550089092-28783-2-git-send-email-atish.patra@wdc.com> X-Mailer: git-send-email 2.7.4 In-Reply-To: <1550089092-28783-1-git-send-email-atish.patra@wdc.com> References: <1550089092-28783-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