From patchwork Fri Oct 18 12:46:37 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Yunfeng Ye X-Patchwork-Id: 11198379 Return-Path: Received: from mail.kernel.org (pdx-korg-mail-1.web.codeaurora.org [172.30.200.123]) by pdx-korg-patchwork-2.web.codeaurora.org (Postfix) with ESMTP id 5A699913 for ; Fri, 18 Oct 2019 12:47:09 +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 3835B222C2 for ; Fri, 18 Oct 2019 12:47:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="eRg663jm" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 3835B222C2 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=huawei.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.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:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:Date:Message-ID:To:Subject :From:Reply-To:Cc:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:In-Reply-To:References: List-Owner; bh=4xS4QeEPiMnoVlbjv0KSAcnajWDWQQGomky+AN8/sb8=; b=eRg663jm7YvXUa WFhKltgzrLY3Ezv6x8QsJZ8bhMLfbKgZxVB3zt2AQmWlFa3Yqv0e9iZwrJWH0kosPlgZPsTz652aC ++ZBOKgL9OPyxmiGu18Idru8hLWEZAceBb5rQxlAjjasT1QgDyvxYVq1papz6A9oiCyfCVnN5nLEH gn0RF8xkm8vqqcIfgNaqXM1Ge4evBsTI65ixScbJe2EXPfaVh1rAM/0wpeqRXuu/0iPVTyTsOHfaN L6JTF83yIXvDGaN/hke/SNf/uL0GTC1d0dZt1F9EBQDAaHQWl6Ej07X+QD1afDMMUwtV4BGAof0lG o4wa7IieQNQ7VYDGvX2g==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1iLReu-0002wW-8e; Fri, 18 Oct 2019 12:47:08 +0000 Received: from szxga07-in.huawei.com ([45.249.212.35] helo=huawei.com) by bombadil.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1iLReq-0002ue-DS for linux-arm-kernel@lists.infradead.org; Fri, 18 Oct 2019 12:47:06 +0000 Received: from DGGEMS407-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id F342A55B7BD5DBA9C6C3; Fri, 18 Oct 2019 20:46:56 +0800 (CST) Received: from [127.0.0.1] (10.177.251.225) by DGGEMS407-HUB.china.huawei.com (10.3.19.207) with Microsoft SMTP Server id 14.3.439.0; Fri, 18 Oct 2019 20:46:50 +0800 From: Yunfeng Ye Subject: [PATCH v4] arm64: psci: Reduce the waiting time for cpu_psci_cpu_kill() To: , , , , , , , , , , , , , Message-ID: <04ab51e4-bc08-8250-4e70-4c87c58c8ad0@huawei.com> Date: Fri, 18 Oct 2019 20:46:37 +0800 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:60.0) Gecko/20100101 Thunderbird/60.6.1 MIME-Version: 1.0 Content-Language: en-US X-Originating-IP: [10.177.251.225] X-CFilter-Loop: Reflected X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20191018_054704_624643_8FCF154B X-CRM114-Status: GOOD ( 14.03 ) X-Spam-Score: -2.3 (--) X-Spam-Report: SpamAssassin version 3.4.2 on bombadil.infradead.org summary: Content analysis details: (-2.3 points) pts rule name description ---- ---------------------- -------------------------------------------------- -2.3 RCVD_IN_DNSWL_MED RBL: Sender listed at https://www.dnswl.org/, medium trust [45.249.212.35 listed in list.dnswl.org] -0.0 SPF_HELO_PASS SPF: HELO matches SPF record -0.0 SPF_PASS SPF: sender matches SPF record 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: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org In case like suspend-to-disk and uspend-to-ram, a large number of CPU cores need to be shut down. At present, the CPU hotplug operation is serialised, and the CPU cores can only be shut down one by one. In this process, if PSCI affinity_info() does not return LEVEL_OFF quickly, cpu_psci_cpu_kill() needs to wait for 10ms. If hundreds of CPU cores need to be shut down, it will take a long time. Normally, there is no need to wait 10ms in cpu_psci_cpu_kill(). So change the wait interval from 10 ms to max 1 ms and use usleep_range() instead of msleep() for more accurate timer. In addition, reducing the time interval will increase the messages output, so remove the "Retry ..." message, instead, put the number of waiting times to the sucessful message. Signed-off-by: Yunfeng Ye --- v3 -> v4: - using time_before(jiffies, timeout) to check - update the comment as review suggest v2 -> v3: - update the comment - remove the busy-wait logic, modify the loop logic and output message v1 -> v2: - use usleep_range() instead of udelay() after waiting for a while arch/arm64/kernel/psci.c | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/arch/arm64/kernel/psci.c b/arch/arm64/kernel/psci.c index c9f72b2665f1..77965c3ba477 100644 --- a/arch/arm64/kernel/psci.c +++ b/arch/arm64/kernel/psci.c @@ -81,7 +81,8 @@ static void cpu_psci_cpu_die(unsigned int cpu) static int cpu_psci_cpu_kill(unsigned int cpu) { - int err, i; + int err, i = 0; + unsigned long timeout; if (!psci_ops.affinity_info) return 0; @@ -91,16 +92,17 @@ static int cpu_psci_cpu_kill(unsigned int cpu) * while it is dying. So, try again a few times. */ - for (i = 0; i < 10; i++) { + timeout = jiffies + msecs_to_jiffies(100); + do { + i++; err = psci_ops.affinity_info(cpu_logical_map(cpu), 0); if (err == PSCI_0_2_AFFINITY_LEVEL_OFF) { - pr_info("CPU%d killed.\n", cpu); + pr_info("CPU%d killed (polled %d times)\n", cpu, i); return 0; } - msleep(10); - pr_info("Retrying again to check for CPU kill\n"); - } + usleep_range(100, 1000); + } while (time_before(jiffies, timeout)); pr_warn("CPU%d may not have shut down cleanly (AFFINITY_INFO reports %d)\n", cpu, err);