From: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
To: linux-pm@vger.kernel.org, loongarch@lists.linux.dev,
linux-acpi@vger.kernel.org, linux-arch@vger.kernel.org,
linux-kernel@vger.kernel.org,
linux-arm-kernel@lists.infradead.org,
linux-riscv@lists.infradead.org, kvmarm@lists.linux.dev,
x86@kernel.org, linux-csky@vger.kernel.org,
linux-doc@vger.kernel.org, linux-ia64@vger.kernel.org,
linux-parisc@vger.kernel.org
Cc: Salil Mehta <salil.mehta@huawei.com>,
Jean-Philippe Brucker <jean-philippe@linaro.org>,
jianyong.wu@arm.com, justin.he@arm.com,
James Morse <james.morse@arm.com>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Len Brown <lenb@kernel.org>
Subject: [PATCH 35/39] ACPI: add support to register CPUs based on the _STA enabled bit
Date: Tue, 24 Oct 2023 16:19:09 +0100 [thread overview]
Message-ID: <E1qvJBV-00AqSE-Cu@rmk-PC.armlinux.org.uk> (raw)
In-Reply-To: <ZTffkAdOqL2pI2la@shell.armlinux.org.uk>
From: James Morse <james.morse@arm.com>
acpi_processor_get_info() registers all present CPUs. Registering a
CPU is what creates the sysfs entries and triggers the udev
notifications.
arm64 virtual machines that support 'virtual cpu hotplug' use the
enabled bit to indicate whether the CPU can be brought online, as
the existing ACPI tables require all hardware to be described and
present.
If firmware describes a CPU as present, but disabled, skip the
registration. Such CPUs are present, but can't be brought online for
whatever reason. (e.g. firmware/hypervisor policy).
Once firmware sets the enabled bit, the CPU can be registered and
brought online by user-space. Online CPUs, or CPUs that are missing
an _STA method must always be registered.
Signed-off-by: James Morse <james.morse@arm.com>
Reviewed-by: Gavin Shan <gshan@redhat.com>
Reviewed-by: Jonathan Cameron <Jonathan.Cameron@huawei.com>
Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk>
---
drivers/acpi/acpi_processor.c | 31 ++++++++++++++++++++++++++++++-
1 file changed, 30 insertions(+), 1 deletion(-)
diff --git a/drivers/acpi/acpi_processor.c b/drivers/acpi/acpi_processor.c
index b7a94c1348b0..5dabb426481f 100644
--- a/drivers/acpi/acpi_processor.c
+++ b/drivers/acpi/acpi_processor.c
@@ -228,6 +228,32 @@ static int acpi_processor_make_present(struct acpi_processor *pr)
return ret;
}
+static int acpi_processor_make_enabled(struct acpi_processor *pr)
+{
+ unsigned long long sta;
+ acpi_status status;
+ bool present, enabled;
+
+ if (!acpi_has_method(pr->handle, "_STA"))
+ return arch_register_cpu(pr->id);
+
+ status = acpi_evaluate_integer(pr->handle, "_STA", NULL, &sta);
+ if (ACPI_FAILURE(status))
+ return -ENODEV;
+
+ present = sta & ACPI_STA_DEVICE_PRESENT;
+ enabled = sta & ACPI_STA_DEVICE_ENABLED;
+
+ if (cpu_online(pr->id) && (!present || !enabled)) {
+ pr_err_once(FW_BUG "CPU %u is online, but described as not present or disabled!\n", pr->id);
+ add_taint(TAINT_FIRMWARE_WORKAROUND, LOCKDEP_STILL_OK);
+ } else if (!present || !enabled) {
+ return -ENODEV;
+ }
+
+ return arch_register_cpu(pr->id);
+}
+
static int acpi_processor_get_info(struct acpi_device *device)
{
union acpi_object object = { 0 };
@@ -318,7 +344,7 @@ static int acpi_processor_get_info(struct acpi_device *device)
*/
if (!invalid_logical_cpuid(pr->id) && cpu_present(pr->id) &&
!get_cpu_device(pr->id)) {
- int ret = arch_register_cpu(pr->id);
+ int ret = acpi_processor_make_enabled(pr);
if (ret)
return ret;
@@ -526,6 +552,9 @@ static void acpi_processor_post_eject(struct acpi_device *device)
acpi_processor_make_not_present(device);
return;
}
+
+ if (cpu_present(pr->id) && !(sta & ACPI_STA_DEVICE_ENABLED))
+ arch_unregister_cpu(pr->id);
}
#ifdef CONFIG_ARCH_MIGHT_HAVE_ACPI_PDC
--
2.30.2
next prev parent reply other threads:[~2023-10-24 15:19 UTC|newest]
Thread overview: 58+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-10-24 15:15 [RFC PATCH v3 00/39] ACPI/arm64: add support for virtual cpuhotplug Russell King (Oracle)
2023-10-24 15:16 ` [PATCH 01/39] parisc: simplify smp_prepare_boot_cpu() Russell King (Oracle)
2023-10-24 15:16 ` [PATCH 02/39] ACPI: Use the acpi_device_is_present() helper in more places Russell King
2023-10-24 15:16 ` [PATCH 03/39] ACPI: Rename acpi_scan_device_not_present() to be about enumeration Russell King
2023-10-24 15:16 ` [PATCH 04/39] arm64, irqchip/gic-v3, ACPI: Move MADT GICC enabled check into a helper Russell King
2023-10-24 15:16 ` [PATCH 05/39] ACPI: Move ACPI_HOTPLUG_CPU to be disabled on arm64 and riscv Russell King
2023-10-24 15:16 ` [PATCH 06/39] drivers: base: Use present CPUs in GENERIC_CPU_DEVICES Russell King
2023-10-24 15:16 ` [PATCH 07/39] drivers: base: Allow parts of GENERIC_CPU_DEVICES to be overridden Russell King
2023-10-24 15:16 ` [PATCH 08/39] drivers: base: Move cpu_dev_init() after node_dev_init() Russell King
2023-10-24 15:16 ` [PATCH 09/39] drivers: base: remove unnecessary call to register_cpu_under_node() Russell King (Oracle)
2023-10-24 15:17 ` [PATCH 10/39] drivers: base: Print a warning instead of panic() when register_cpu() fails Russell King
2023-10-24 15:17 ` [PATCH 11/39] arm64: setup: Switch over to GENERIC_CPU_DEVICES using arch_register_cpu() Russell King
2023-10-24 15:17 ` [PATCH 12/39] ia64/topology: Switch over to GENERIC_CPU_DEVICES Russell King
2023-10-24 15:17 ` [PATCH 13/39] x86: intel_epb: Don't rely on link order Russell King
2023-10-24 15:17 ` [PATCH 14/39] x86/topology: Switch over to GENERIC_CPU_DEVICES Russell King
2023-10-24 15:17 ` [PATCH 15/39] LoongArch: " Russell King
2023-10-24 15:17 ` [PATCH 16/39] riscv: " Russell King
2023-10-24 15:17 ` [PATCH 17/39] arch_topology: Make register_cpu_capacity_sysctl() tolerant to late CPUs Russell King
2023-10-24 15:17 ` [PATCH 18/39] ACPI: Only enumerate enabled (or functional) devices Russell King
2023-10-24 18:07 ` Rafael J. Wysocki
2023-10-24 15:17 ` [PATCH 19/39] ACPI: processor: Add support for processors described as container packages Russell King
2023-10-24 15:17 ` [PATCH 20/39] ACPI: processor: Register CPUs that are online, but not described in the DSDT Russell King
2023-10-24 15:17 ` [PATCH 21/39] ACPI: processor: Register all CPUs from acpi_processor_get_info() Russell King
2023-10-24 15:18 ` [PATCH 22/39] ACPI: Rename ACPI_HOTPLUG_CPU to include 'present' Russell King
2023-10-24 15:18 ` [PATCH 23/39] drivers: base: Implement weak arch_unregister_cpu() Russell King
2023-10-24 15:18 ` [PATCH 24/39] ACPI: Move acpi_bus_trim_one() before acpi_scan_hot_remove() Russell King
2023-10-24 15:18 ` [PATCH 25/39] ACPI: Rename acpi_processor_hotadd_init and remove pre-processor guards Russell King
2023-10-24 15:18 ` [PATCH 26/39] ACPI: Add post_eject to struct acpi_scan_handler for cpu hotplug Russell King
2023-10-24 15:18 ` [PATCH 27/39] ACPI: Check _STA present bit before making CPUs not present Russell King
2023-10-24 15:18 ` [PATCH 28/39] ACPI: Warn when the present bit changes but the feature is not enabled Russell King
2023-10-24 15:18 ` [PATCH 29/39] LoongArch: Use the __weak version of arch_unregister_cpu() Russell King
2023-10-24 15:18 ` [PATCH 30/39] arm64: acpi: Move get_cpu_for_acpi_id() to a header Russell King
2023-10-24 15:18 ` [PATCH 31/39] ACPICA: Add new MADT GICC flags fields Russell King
2023-10-24 15:18 ` [PATCH 32/39] irqchip/gic-v3: Don't return errors from gic_acpi_match_gicc() Russell King
2023-10-24 15:18 ` [PATCH 33/39] irqchip/gic-v3: Add support for ACPI's disabled but 'online capable' CPUs Russell King
2023-10-24 15:19 ` [PATCH 34/39] arm64: psci: Ignore DENIED CPUs Russell King
2023-11-16 7:45 ` Jianyong Wu
2023-11-20 9:24 ` Russell King (Oracle)
2023-11-20 9:36 ` Jianyong Wu
2023-11-20 9:58 ` Russell King (Oracle)
2023-11-21 1:44 ` Jianyong Wu
2023-10-24 15:19 ` Russell King [this message]
2023-10-24 15:19 ` [PATCH 36/39] arm64: document virtual CPU hotplug's expectations Russell King
2023-10-24 15:19 ` [PATCH 37/39] ACPI: Add _OSC bits to advertise OS support for toggling CPU present/enabled Russell King
2023-10-24 15:19 ` [PATCH 38/39] cpumask: Add enabled cpumask for present CPUs that can be brought online Russell King
2023-10-24 15:32 ` Andy Shevchenko
2023-10-24 16:02 ` Greg Kroah-Hartman
2023-10-24 16:05 ` Russell King (Oracle)
2023-10-24 15:19 ` [PATCH 39/39] ACPI: processor: Only call arch_unregister_cpu() if HOTPLUG_CPU is selected Russell King
2023-10-24 16:31 ` [RFC PATCH v3 00/39] ACPI/arm64: add support for virtual cpuhotplug Russell King (Oracle)
2023-10-24 18:26 ` Rafael J. Wysocki
2023-10-24 19:28 ` Russell King (Oracle)
2023-12-04 18:23 ` Russell King (Oracle)
2023-12-12 19:58 ` Russell King (Oracle)
2023-12-12 20:05 ` Rafael J. Wysocki
2023-12-12 20:16 ` Russell King (Oracle)
2023-10-30 16:41 ` Miguel Luis
2023-10-30 17:51 ` Russell King (Oracle)
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=E1qvJBV-00AqSE-Cu@rmk-PC.armlinux.org.uk \
--to=rmk+kernel@armlinux.org.uk \
--cc=james.morse@arm.com \
--cc=jean-philippe@linaro.org \
--cc=jianyong.wu@arm.com \
--cc=justin.he@arm.com \
--cc=kvmarm@lists.linux.dev \
--cc=lenb@kernel.org \
--cc=linux-acpi@vger.kernel.org \
--cc=linux-arch@vger.kernel.org \
--cc=linux-arm-kernel@lists.infradead.org \
--cc=linux-csky@vger.kernel.org \
--cc=linux-doc@vger.kernel.org \
--cc=linux-ia64@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-parisc@vger.kernel.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=loongarch@lists.linux.dev \
--cc=rafael@kernel.org \
--cc=salil.mehta@huawei.com \
--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).