From: Jonathan Cameron <Jonathan.Cameron@Huawei.com>
To: Huacai Chen <chenhuacai@kernel.org>
Cc: Marc Zyngier <maz@kernel.org>, Will Deacon <will@kernel.org>,
"Catalin Marinas" <catalin.marinas@arm.com>,
<linux-acpi@vger.kernel.org>, <linux-arch@vger.kernel.org>,
<linux-kernel@vger.kernel.org>,
<linux-arm-kernel@lists.infradead.org>,
<linux-pm@vger.kernel.org>, "Mark Rutland" <mark.rutland@arm.com>,
Thomas Gleixner <tglx@linutronix.de>,
"Peter Zijlstra" <peterz@infradead.org>,
<loongarch@lists.linux.dev>, <x86@kernel.org>,
Russell King <linux@armlinux.org.uk>,
"Rafael J . Wysocki" <rafael@kernel.org>,
Miguel Luis <miguel.luis@oracle.com>,
James Morse <james.morse@arm.com>,
Salil Mehta <salil.mehta@huawei.com>,
"Jean-Philippe Brucker" <jean-philippe@linaro.org>,
Hanjun Guo <guohanjun@huawei.com>, Gavin Shan <gshan@redhat.com>,
Ingo Molnar <mingo@redhat.com>, "Borislav Petkov" <bp@alien8.de>,
Dave Hansen <dave.hansen@linux.intel.com>, <linuxarm@huawei.com>,
<justin.he@arm.com>, <jianyong.wu@arm.com>
Subject: Re: [PATCH v10 18/19] arm64: document virtual CPU hotplug's expectations
Date: Wed, 10 Jul 2024 09:23:47 +0100 [thread overview]
Message-ID: <20240710092347.00005b99@Huawei.com> (raw)
In-Reply-To: <CAAhV-H6Ghfj74hcOQCn6yz4t-_p=WkYdmWRrw=v8FK6t+f_EkA@mail.gmail.com>
On Sun, 30 Jun 2024 20:53:51 +0800
Huacai Chen <chenhuacai@kernel.org> wrote:
> Hi, Jonathan,
>
> On Wed, May 29, 2024 at 9:44 PM Jonathan Cameron
> <Jonathan.Cameron@huawei.com> wrote:
> >
> > From: James Morse <james.morse@arm.com>
> >
> > Add a description of physical and virtual CPU hotplug, explain the
> > differences and elaborate on what is required in ACPI for a working
> > virtual hotplug system.
> >
> > Signed-off-by: James Morse <james.morse@arm.com>
> > Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
> > Tested-by: Miguel Luis <miguel.luis@oracle.com>
> > Reviewed-by: Gavin Shan <gshan@redhat.com>
> > Signed-off-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
> > ---
> > Documentation/arch/arm64/cpu-hotplug.rst | 79 ++++++++++++++++++++++++
> > Documentation/arch/arm64/index.rst | 1 +
> > 2 files changed, 80 insertions(+)
> >
> > diff --git a/Documentation/arch/arm64/cpu-hotplug.rst b/Documentation/arch/arm64/cpu-hotplug.rst
> > new file mode 100644
> > index 000000000000..76ba8d932c72
> > --- /dev/null
> > +++ b/Documentation/arch/arm64/cpu-hotplug.rst
> > @@ -0,0 +1,79 @@
> > +.. SPDX-License-Identifier: GPL-2.0
> > +.. _cpuhp_index:
> > +
> > +====================
> > +CPU Hotplug and ACPI
> > +====================
> > +
> > +CPU hotplug in the arm64 world is commonly used to describe the kernel taking
> > +CPUs online/offline using PSCI. This document is about ACPI firmware allowing
> > +CPUs that were not available during boot to be added to the system later.
> > +
> > +``possible`` and ``present`` refer to the state of the CPU as seen by linux.
> > +
> > +
> > +CPU Hotplug on physical systems - CPUs not present at boot
> > +----------------------------------------------------------
> > +
> > +Physical systems need to mark a CPU that is ``possible`` but not ``present`` as
> > +being ``present``. An example would be a dual socket machine, where the package
> > +in one of the sockets can be replaced while the system is running.
> > +
> > +This is not supported.
> > +
> > +In the arm64 world CPUs are not a single device but a slice of the system.
> > +There are no systems that support the physical addition (or removal) of CPUs
> > +while the system is running, and ACPI is not able to sufficiently describe
> > +them.
> > +
> > +e.g. New CPUs come with new caches, but the platform's cache toplogy is
> > +described in a static table, the PPTT. How caches are shared between CPUs is
> > +not discoverable, and must be described by firmware.
> > +
> > +e.g. The GIC redistributor for each CPU must be accessed by the driver during
> > +boot to discover the system wide supported features. ACPI's MADT GICC
> > +structures can describe a redistributor associated with a disabled CPU, but
> > +can't describe whether the redistributor is accessible, only that it is not
> > +'always on'.
> > +
> > +arm64's ACPI tables assume that everything described is ``present``.
> > +
> > +
> > +CPU Hotplug on virtual systems - CPUs not enabled at boot
> > +---------------------------------------------------------
> In my opinion "enabled" is not a good description here. It is too
> general and confusing. For example, in enable_nonboot_cpus(), "enable"
> means make a "present" CPU "online", while in ACPI MADT, "enabled"
> means "possible" but not "present". So I suggest rename "enabled" to
> "pending" or "usable" or some other better words. Thanks.
Hi Huacai,
Tricky to find a good word given the mess of terms being reused.
The use of enabled is specifically referring to the terms used in ACPI
so I think will be hard to get away from without making that connection
really non obvious.
The 'enabled' text in ACPI does describe 'enabled' as
meaning 'ready for use'. So perhaps
CPU Hotplug on virtual systems - CPUs that are not ready for use at boot
and rely on the existing text that says this is about the enabled and
online capable bits to make that connection?
The snag is that phrasing kind of suggests they are just late for some
reason rather than it being a policy thing in the hypervisor.
James, I think this is your text, any thoughts?
Jonathan
>
> Huacai.
>
> > +
> > +Virtual systems have the advantage that all the properties the system will
> > +ever have can be described at boot. There are no power-domain considerations
> > +as such devices are emulated.
> > +
> > +CPU Hotplug on virtual systems is supported. It is distinct from physical
> > +CPU Hotplug as all resources are described as ``present``, but CPUs may be
> > +marked as disabled by firmware. Only the CPU's online/offline behaviour is
> > +influenced by firmware. An example is where a virtual machine boots with a
> > +single CPU, and additional CPUs are added once a cloud orchestrator deploys
> > +the workload.
> > +
> > +For a virtual machine, the VMM (e.g. Qemu) plays the part of firmware.
> > +
> > +Virtual hotplug is implemented as a firmware policy affecting which CPUs can be
> > +brought online. Firmware can enforce its policy via PSCI's return codes. e.g.
> > +``DENIED``.
> > +
> > +The ACPI tables must describe all the resources of the virtual machine. CPUs
> > +that firmware wishes to disable either from boot (or later) should not be
> > +``enabled`` in the MADT GICC structures, but should have the ``online capable``
> > +bit set, to indicate they can be enabled later. The boot CPU must be marked as
> > +``enabled``. The 'always on' GICR structure must be used to describe the
> > +redistributors.
> > +
> > +CPUs described as ``online capable`` but not ``enabled`` can be set to enabled
> > +by the DSDT's Processor object's _STA method. On virtual systems the _STA method
> > +must always report the CPU as ``present``. Changes to the firmware policy can
> > +be notified to the OS via device-check or eject-request.
> > +
> > +CPUs described as ``enabled`` in the static table, should not have their _STA
> > +modified dynamically by firmware. Soft-restart features such as kexec will
> > +re-read the static properties of the system from these static tables, and
> > +may malfunction if these no longer describe the running system. Linux will
> > +re-discover the dynamic properties of the system from the _STA method later
> > +during boot.
> > diff --git a/Documentation/arch/arm64/index.rst b/Documentation/arch/arm64/index.rst
> > index d08e924204bf..78544de0a8a9 100644
> > --- a/Documentation/arch/arm64/index.rst
> > +++ b/Documentation/arch/arm64/index.rst
> > @@ -13,6 +13,7 @@ ARM64 Architecture
> > asymmetric-32bit
> > booting
> > cpu-feature-registers
> > + cpu-hotplug
> > elf_hwcaps
> > hugetlbpage
> > kdump
> > --
> > 2.39.2
> >
> >
next prev parent reply other threads:[~2024-07-10 8:24 UTC|newest]
Thread overview: 31+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-05-29 13:34 [PATCH v10 00/19] ACPI/arm64: add support for virtual cpu hotplug Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 01/19] ACPI: processor: Simplify initial onlining to use same path for cold and hotplug Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 02/19] cpu: Do not warn on arch_register_cpu() returning -EPROBE_DEFER Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 03/19] ACPI: processor: Drop duplicated check on _STA (enabled + present) Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 04/19] ACPI: processor: Return an error if acpi_processor_get_info() fails in processor_add() Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 05/19] ACPI: processor: Fix memory leaks in error paths of processor_add() Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 06/19] ACPI: processor: Move checks and availability of acpi_processor earlier Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 07/19] ACPI: processor: Add acpi_get_processor_handle() helper Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 08/19] ACPI: processor: Register deferred CPUs from acpi_processor_get_info() Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 09/19] ACPI: scan: switch to flags for acpi_scan_check_and_detach() Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 10/19] ACPI: Add post_eject to struct acpi_scan_handler for cpu hotplug Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 11/19] arm64: acpi: Move get_cpu_for_acpi_id() to a header Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 12/19] arm64: acpi: Harden get_cpu_for_acpi_id() against missing CPU entry Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 13/19] irqchip/gic-v3: Don't return errors from gic_acpi_match_gicc() Jonathan Cameron
2024-06-19 8:11 ` Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 14/19] irqchip/gic-v3: Add support for ACPI's disabled but 'online capable' CPUs Jonathan Cameron
2024-06-19 12:10 ` Marc Zyngier
2024-05-29 13:34 ` [PATCH v10 15/19] arm64: psci: Ignore DENIED CPUs Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 16/19] arm64: arch_register_cpu() variant to check if an ACPI handle is now available Jonathan Cameron
2024-05-29 13:34 ` [PATCH v10 17/19] arm64: Kconfig: Enable hotplug CPU on arm64 if ACPI_PROCESSOR is enabled Jonathan Cameron
2024-06-30 0:39 ` Gavin Shan
2024-06-30 9:26 ` Catalin Marinas
2024-07-01 0:17 ` Gavin Shan
2024-05-29 13:34 ` [PATCH v10 18/19] arm64: document virtual CPU hotplug's expectations Jonathan Cameron
2024-06-30 12:53 ` Huacai Chen
2024-07-10 8:23 ` Jonathan Cameron [this message]
2024-05-29 13:34 ` [PATCH v10 19/19] cpumask: Add enabled cpumask for present CPUs that can be brought online Jonathan Cameron
2024-06-13 10:25 ` [PATCH v10 00/19] ACPI/arm64: add support for virtual cpu hotplug Jonathan Cameron
2024-06-19 12:11 ` Marc Zyngier
2024-06-28 14:49 ` Jonathan Cameron
2024-06-28 17:56 ` Catalin Marinas
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20240710092347.00005b99@Huawei.com \
--to=jonathan.cameron@huawei.com \
--cc=bp@alien8.de \
--cc=catalin.marinas@arm.com \
--cc=chenhuacai@kernel.org \
--cc=dave.hansen@linux.intel.com \
--cc=gshan@redhat.com \
--cc=guohanjun@huawei.com \
--cc=james.morse@arm.com \
--cc=jean-philippe@linaro.org \
--cc=jianyong.wu@arm.com \
--cc=justin.he@arm.com \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux@armlinux.org.uk \
--cc=linuxarm@huawei.com \
--cc=loongarch@lists.linux.dev \
--cc=mark.rutland@arm.com \
--cc=maz@kernel.org \
--cc=miguel.luis@oracle.com \
--cc=mingo@redhat.com \
--cc=peterz@infradead.org \
--cc=rafael@kernel.org \
--cc=salil.mehta@huawei.com \
--cc=tglx@linutronix.de \
--cc=will@kernel.org \
--cc=x86@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).