Received: by 2002:a25:31c3:0:0:0:0:0 with SMTP id x186csp65605ybx; Wed, 30 Oct 2019 11:24:21 -0700 (PDT) X-Google-Smtp-Source: APXvYqyGWpqCPsmqvDihf8yQqdM5VWBhYMhvXi7gCZx9RpFFLD8Oi/9OezOtV3CwdNTPZVUSPygb X-Received: by 2002:aa7:c645:: with SMTP id z5mr1244411edr.204.1572459860991; Wed, 30 Oct 2019 11:24:20 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572459860; cv=none; d=google.com; s=arc-20160816; b=b2H0NoS+nPXEOvx2JvhDpW8F1e1Kjy35APL5cjbDk0tWUXayR+oGAqdUUaZ/Oz4wVG HYyys6UR1ATfcHehp0hoSgvMDLFnxVoGYuFByVitCwEj8ZVfQNXUL9/81F8IpCb6dCHL UVR2cxGN7VcXtF7TML8gOPsRWUJU/8mqIVE82m/OISA3ByrzsxVPS9RzqVpHhrNRj0RN mZ91MiedEjBTy5bZlPueZP0MqlO0zGgd6tho+VU16clRfMFpLEh/6EXin8NCIXxa8Scn bBU3yLzMAOTvYbO+6JyFpdfRYubbzA9FNPf5zHkqGNJddL4dTemA0WdVKjBNqahRat76 6R5g== 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; bh=qIPKTNOsDz5lJPBOmxmCaqDe0xMT1inqlAW1pSlbqhA=; b=pcgxgdYqyGqc2WEVI7ucCOLU5cjxXM28p6DnhAJE7Al+wRO0CFyN/TkaNJ8xCq6SRI nj7f7D7Os06g2S1B4FC3krjA5ZUrOJSsuUnOItsVVUPCesv43rUg4HyXbupbxIJeY8d3 KXwfnvS0MfXvGiKs1e2tY3hKJdpq/a7jBuTjF88/fD/Vx/a6HALZpf3g5L6pCCRPQ3FA LZjwXvPKD4l5gCdxFAPpxvj6b8zeCIAQCWJjaQmn5TPYKWN8VE60NL9nxrI+Cr3nelPY nb4IUCp14zs4UAGMpyzksqjCzrN0+mv7QQ6SH+9m3Aoas3Hoy23NX+loOazYpNdN9cFl 4+8A== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id dd14si1923464ejb.163.2019.10.30.11.23.26; Wed, 30 Oct 2019 11:24:20 -0700 (PDT) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1726538AbfJ3PmG (ORCPT + 99 others); Wed, 30 Oct 2019 11:42:06 -0400 Received: from foss.arm.com ([217.140.110.172]:36558 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726273AbfJ3PmG (ORCPT ); Wed, 30 Oct 2019 11:42:06 -0400 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 BADFF4F5; Wed, 30 Oct 2019 08:42:05 -0700 (PDT) Received: from e107158-lin.cambridge.arm.com (e107158-lin.cambridge.arm.com [10.1.195.37]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 67D883F6C4; Wed, 30 Oct 2019 08:42:03 -0700 (PDT) From: Qais Yousef To: Thomas Gleixner , Greg Kroah-Hartman Cc: Qais Yousef , Catalin Marinas , Will Deacon , Steve Capper , Richard Fontana , James Morse , Mark Rutland , Josh Poimboeuf , Ingo Molnar , "Peter Zijlstra (Intel)" , Nicholas Piggin , Daniel Lezcano , Jiri Kosina , Pavankumar Kondeti , Zhenzhong Duan , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org Subject: [PATCH 01/12] arm64: hibernate.c: create a new function to handle cpu_up(sleep_cpu) Date: Wed, 30 Oct 2019 15:38:26 +0000 Message-Id: <20191030153837.18107-2-qais.yousef@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20191030153837.18107-1-qais.yousef@arm.com> References: <20191030153837.18107-1-qais.yousef@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org In preparation to make cpu_up/down private - move the user in arm64 hibernate.c to use a new generic function that provides what arm64 needs. Signed-off-by: Qais Yousef CC: Catalin Marinas CC: Will Deacon CC: Steve Capper CC: Richard Fontana CC: James Morse CC: Mark Rutland CC: Thomas Gleixner CC: Josh Poimboeuf CC: Ingo Molnar CC: "Peter Zijlstra (Intel)" CC: Nicholas Piggin CC: Daniel Lezcano CC: Jiri Kosina CC: Pavankumar Kondeti CC: Zhenzhong Duan CC: linux-arm-kernel@lists.infradead.org CC: linux-kernel@vger.kernel.org --- AFAICT we can't use device_online() directly here because suspend happens via cpu_down() not device_offline(). If it is actually safe to use device_online() then that would be simpler than creating the new function. Although the operation seems generic enough to me and could benefit another arch user in the future so the new function makes sense. arch/arm64/kernel/hibernate.c | 13 +++++-------- include/linux/cpu.h | 1 + kernel/cpu.c | 14 ++++++++++++++ 3 files changed, 20 insertions(+), 8 deletions(-) diff --git a/arch/arm64/kernel/hibernate.c b/arch/arm64/kernel/hibernate.c index e0a7fce0e01c..3b178055022f 100644 --- a/arch/arm64/kernel/hibernate.c +++ b/arch/arm64/kernel/hibernate.c @@ -166,14 +166,11 @@ int arch_hibernation_header_restore(void *addr) sleep_cpu = -EINVAL; return -EINVAL; } - if (!cpu_online(sleep_cpu)) { - pr_info("Hibernated on a CPU that is offline! Bringing CPU up.\n"); - ret = cpu_up(sleep_cpu); - if (ret) { - pr_err("Failed to bring hibernate-CPU up!\n"); - sleep_cpu = -EINVAL; - return ret; - } + + ret = hibernation_bringup_sleep_cpu(sleep_cpu); + if (ret) { + sleep_cpu = -EINVAL; + return ret; } resume_hdr = *hdr; diff --git a/include/linux/cpu.h b/include/linux/cpu.h index 88dc0c653925..3b1fbe192989 100644 --- a/include/linux/cpu.h +++ b/include/linux/cpu.h @@ -87,6 +87,7 @@ int cpu_up(unsigned int cpu); void notify_cpu_starting(unsigned int cpu); extern void cpu_maps_update_begin(void); extern void cpu_maps_update_done(void); +extern int hibernation_bringup_sleep_cpu(unsigned int sleep_cpu); #else /* CONFIG_SMP */ #define cpuhp_tasks_frozen 0 diff --git a/kernel/cpu.c b/kernel/cpu.c index e1967e9eddc2..219f9033f438 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -1197,6 +1197,20 @@ int cpu_up(unsigned int cpu) } EXPORT_SYMBOL_GPL(cpu_up); +int hibernation_bringup_sleep_cpu(unsigned int sleep_cpu) +{ + int ret; + + if (!cpu_online(sleep_cpu)) { + pr_info("Hibernated on a CPU that is offline! Bringing CPU up.\n"); + ret = cpu_up(sleep_cpu); + if (ret) { + pr_err("Failed to bring hibernate-CPU up!\n"); + return ret; + } + } +} + #ifdef CONFIG_PM_SLEEP_SMP static cpumask_var_t frozen_cpus; -- 2.17.1