From patchwork Sun Feb 23 19:29:27 2020 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Qais Yousef X-Patchwork-Id: 11399033 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 6CB2F14BC for ; Sun, 23 Feb 2020 19:31:29 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (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 4F2F520836 for ; Sun, 23 Feb 2020 19:31:29 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 4F2F520836 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=arm.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j5wwt-0003Yr-At; Sun, 23 Feb 2020 19:29:55 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j5wws-0003Ym-Ve for xen-devel@lists.xenproject.org; Sun, 23 Feb 2020 19:29:55 +0000 X-Inumbo-ID: dd1f2524-5672-11ea-ade5-bc764e2007e4 Received: from foss.arm.com (unknown [217.140.110.172]) by us1-rack-iad1.inumbo.com (Halon) with ESMTP id dd1f2524-5672-11ea-ade5-bc764e2007e4; Sun, 23 Feb 2020 19:29:52 +0000 (UTC) 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 11DE230E; Sun, 23 Feb 2020 11:29:52 -0800 (PST) Received: from e107158-lin.cambridge.arm.com (e107158-lin.cambridge.arm.com [10.1.195.21]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 09B863F6CF; Sun, 23 Feb 2020 11:29:45 -0800 (PST) From: Qais Yousef To: Thomas Gleixner Date: Sun, 23 Feb 2020 19:29:27 +0000 Message-Id: <20200223192942.18420-1-qais.yousef@arm.com> X-Mailer: git-send-email 2.17.1 Subject: [Xen-devel] [PATCH v3 00/15] Convert cpu_up/down to device_online/offline X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Mark Rutland , x86@kernel.org, linux-ia64@vger.kernel.org, "Rafael J. Wysocki" , "Peter Zijlstra \(Intel\)" , Benjamin Herrenschmidt , Ram Pai , linux-kernel@vger.kernel.org, "James E.J. Bottomley" , Richard Fontana , Nadav Amit , "H. Peter Anvin" , sparclinux@vger.kernel.org, Will Deacon , Ingo Molnar , Davidlohr Bueso , Michael Ellerman , Helge Deller , Daniel Lezcano , Russell King , Qais Yousef , Eiichi Tsukata , Catalin Marinas , xen-devel@lists.xenproject.org, Fenghua Yu , Juergen Gross , "Paul E . McKenney" , Josh Triplett , Nicholas Piggin , Lorenzo Pieralisi , Borislav Petkov , Josh Poimboeuf , Bjorn Helgaas , Boris Ostrovsky , Pavankumar Kondeti , linux-arm-kernel@lists.infradead.org, Christophe Leroy , Tony Luck , linux-parisc@vger.kernel.org, Steve Capper , Greg Kroah-Hartman , linuxppc-dev@lists.ozlabs.org, Zhenzhong Duan , Armijn Hemel , James Morse , Stefano Stabellini , Sakari Ailus , Jiri Kosina , Paul Mackerras , Enrico Weigelt , "David S. Miller" , Thiago Jung Bauermann MIME-Version: 1.0 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" Changes in v3: * Fixup smp_shutdown_nonboot_cpus() to hold the right lock as suggested by Russel King. * Split the combined arm/arm64 patch into 2 separate patches. * Add new add/remove_cpu() functions that wraps lock, device_online/offline, unlock as suggested by Paul McKenney * Use the new add/remove instead of device_online/offline where appropriate * Dropped a patch that exported device_online/offline() since the new add/remove_cpu() are exported and used by torture test which could build as a module * Rebsed on top 5.6-rc1 from linus/master git clone git://linux-arm.org/linux-qy.git -b cpu-hp-cleanup-v3 Older post can be found here: https://lore.kernel.org/linuxppc-dev/20191125112754.25223-1-qais.yousef@arm.com/ https://lore.kernel.org/lkml/20191125112754.25223-2-qais.yousef@arm.com/ Using cpu_up/down directly to bring cpus online/offline loses synchronization with sysfs and could suffer from a race similar to what is described in commit a6717c01ddc2 ("powerpc/rtas: use device model APIs and serialization during LPM"). cpu_up/down seem to be more of a internal implementation detail for the cpu subsystem to use to boot up cpus, perform suspend/resume and low level hotplug operations. Users outside of the cpu subsystem would be better using the device core API to bring a cpu online/offline which is the interface used to hotplug memory and other system devices. Several users have already migrated to use the device core API, this series converts the remaining users and hides cpu_up/down from internal users at the end. I noticed this problem while working on a hack to disable offlining a particular CPU but noticed that setting the offline_disabled attribute in the device struct isn't enough because users can easily bypass the device core. While my hack isn't a valid use case but it did highlight the inconsistency in the way cpus are being onlined/offlined and this attempt hopefully improves on this. The first 9 patches fix arch users. The remaining 6 patches fix generic code users. Particularly creating a new special exported API for the device core to use instead of cpu_up/down. The last patch removes cpu_up/down from cpu.h and unexport the functions. In some cases where the use of cpu_up/down seemed legitimate, I encapsulated the logic in a higher level - special purposed function; and converted the code to use that instead. I did re-run the rcu torture, lock torture and psci checker tests and no problem was noticed. I did perform build tests on all arch affected except for parisc. Hopefully I got the CC list right for all the patches. Apologies in advance if some people were omitted from some patches but they should have been CCed. CC: Armijn Hemel CC: Benjamin Herrenschmidt CC: Bjorn Helgaas CC: Borislav Petkov CC: Boris Ostrovsky CC: Catalin Marinas CC: Christophe Leroy CC: Daniel Lezcano CC: Davidlohr Bueso CC: "David S. Miller" CC: Eiichi Tsukata CC: Enrico Weigelt CC: Fenghua Yu CC: Greg Kroah-Hartman CC: Helge Deller CC: "H. Peter Anvin" CC: Ingo Molnar CC: "James E.J. Bottomley" CC: James Morse CC: Jiri Kosina CC: Josh Poimboeuf CC: Josh Triplett CC: Juergen Gross CC: Lorenzo Pieralisi CC: Mark Rutland CC: Michael Ellerman CC: Nadav Amit CC: Nicholas Piggin CC: "Paul E. McKenney" CC: Paul Mackerras CC: Pavankumar Kondeti CC: "Peter Zijlstra (Intel)" CC: "Rafael J. Wysocki" CC: Ram Pai CC: Richard Fontana CC: Russell King CC: Sakari Ailus CC: Stefano Stabellini CC: Steve Capper CC: Thiago Jung Bauermann CC: Thomas Gleixner CC: Tony Luck CC: Will Deacon CC: Zhenzhong Duan CC: linux-arm-kernel@lists.infradead.org CC: linux-ia64@vger.kernel.org CC: linux-kernel@vger.kernel.org CC: linux-parisc@vger.kernel.org CC: linuxppc-dev@lists.ozlabs.org CC: sparclinux@vger.kernel.org CC: x86@kernel.org CC: xen-devel@lists.xenproject.org Qais Yousef (15): cpu: Add new {add,remove}_cpu() functions smp: Create a new function to shutdown nonboot cpus ia64: Replace cpu_down with smp_shutdown_nonboot_cpus() arm: Don't use disable_nonboot_cpus() arm64: Don't use disable_nonboot_cpus() arm64: hibernate.c: Create a new function to handle cpu_up(sleep_cpu) x86: Replace cpu_up/down with add/remove_cpu powerpc: Replace cpu_up/down with add/remove_cpu sparc: Replace cpu_up/down with add/remove_cpu parisc: Replace cpu_up/down with add/remove_cpu driver: xen: Replace cpu_up/down with device_online/offline firmware: psci: Replace cpu_up/down with add/remove_cpu torture: Replace cpu_up/down with add/remove_cpu smp: Create a new function to bringup nonboot cpus online cpu: Hide cpu_up/down arch/arm/kernel/reboot.c | 4 +- arch/arm64/kernel/hibernate.c | 13 +-- arch/arm64/kernel/process.c | 4 +- arch/ia64/kernel/process.c | 8 +- arch/parisc/kernel/processor.c | 2 +- arch/powerpc/kexec/core_64.c | 2 +- arch/sparc/kernel/ds.c | 4 +- arch/x86/kernel/topology.c | 22 ++--- arch/x86/mm/mmio-mod.c | 4 +- arch/x86/xen/smp.c | 2 +- drivers/base/cpu.c | 4 +- drivers/firmware/psci/psci_checker.c | 4 +- drivers/xen/cpu_hotplug.c | 2 +- include/linux/cpu.h | 10 +- kernel/cpu.c | 134 ++++++++++++++++++++++++++- kernel/smp.c | 9 +- kernel/torture.c | 9 +- 17 files changed, 172 insertions(+), 65 deletions(-)