Re: [PATCH v2 1/6] arm64/hyperv: Support DeviceTree
From: Roman Kisel <hidden>
Date: 2024-06-11 14:55:28
Also in:
linux-acpi, linux-arch, linux-arm-kernel, linux-pci, lkml
On 5/16/2024 8:27 AM, Roman Kisel wrote:
On 5/15/2024 3:02 PM, Elliot Berman wrote:quoted
On Tue, May 14, 2024 at 03:43:48PM -0700, Roman Kisel wrote:quoted
The Virtual Trust Level platforms rely on DeviceTree, and the arm64/hyperv code supports ACPI only. Update the logic to support DeviceTree on boot as well as ACPI.Could you use Call UID query from SMCCC? KVM [1] and Gunyah [2] have been using this to identify if guest is running under those respective hypervisors. This works in both DT and ACPI cases. [1]: https://lore.kernel.org/all/20210330145430.996981-2-maz@kernel.org/ (local) [2]: https://lore.kernel.org/all/20240222-gunyah-v17-4-1e9da6763d38@quicinc.com/ (local)That would be very neat indeed, thanks! Talking to the hypervisor folks.
We have that now. Will send out the revised patches sometime during the next week most likely.
quoted
quoted
Signed-off-by: Roman Kisel <redacted> --- arch/arm64/hyperv/mshyperv.c | 34 +++++++++++++++++++++++++++++----- 1 file changed, 29 insertions(+), 5 deletions(-)diff --git a/arch/arm64/hyperv/mshyperv.c b/arch/arm64/hyperv/mshyperv.c index b1a4de4eee29..208a3bcb9686 100644 --- a/arch/arm64/hyperv/mshyperv.c +++ b/arch/arm64/hyperv/mshyperv.c@@ -15,6 +15,9 @@#include <linux/errno.h> #include <linux/version.h> #include <linux/cpuhotplug.h> +#include <linux/libfdt.h> +#include <linux/of.h> +#include <linux/of_fdt.h> #include <asm/mshyperv.h> static bool hyperv_initialized;@@ -27,6 +30,29 @@ int hv_get_hypervisor_version(unionhv_hypervisor_version_info *info) return 0; } +static bool hyperv_detect_fdt(void) +{ +#ifdef CONFIG_OF + const unsigned long hyp_node = of_get_flat_dt_subnode_by_name( + of_get_flat_dt_root(), "hypervisor"); + + return (hyp_node != -FDT_ERR_NOTFOUND) && + of_flat_dt_is_compatible(hyp_node, "microsoft,hyperv"); +#else + return false; +#endif +} + +static bool hyperv_detect_acpi(void) +{ +#ifdef CONFIG_ACPI + return !acpi_disabled && + !strncmp((char *)&acpi_gbl_FADT.hypervisor_id, "MsHyperV", 8); +#else + return false; +#endif +} + static int __init hyperv_init(void) { struct hv_get_vp_registers_output result;@@ -35,13 +61,11 @@ static int __init hyperv_init(void)/* * Allow for a kernel built with CONFIG_HYPERV to be running in - * a non-Hyper-V environment, including on DT instead of ACPI. + * a non-Hyper-V environment. + * * In such cases, do nothing and return success. */ - if (acpi_disabled) - return 0; - - if (strncmp((char *)&acpi_gbl_FADT.hypervisor_id, "MsHyperV", 8)) + if (!hyperv_detect_fdt() && !hyperv_detect_acpi()) return 0; /* Setup the guest ID */ -- 2.45.0 _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
-- Thank you, Roman