RE: [PATCH v3 2/7] Drivers: hv: Enable VTL mode for arm64
From: Michael Kelley <hidden>
Date: 2024-08-05 19:51:40
Also in:
linux-acpi, linux-arch, linux-hyperv, linux-pci, lkml
From: Roman Kisel <redacted> Sent: Monday, August 5, 2024 8:24 AM
On 8/4/2024 9:05 PM, Saurabh Singh Sengar wrote:quoted
On Mon, Aug 05, 2024 at 03:01:58AM +0000, Michael Kelley wrote:quoted
From: Roman Kisel <redacted> Sent: Friday, July 26, 2024 3:59PMquoted
quoted
quoted
Kconfig dependencies for arm64 guests on Hyper-V require that be ACPI enabled, and limit VTL mode to x86/x64. To enable VTL mode on arm64 as well, update the dependencies. Since VTL mode requires DeviceTree instead of ACPI, don't require arm64 guests on Hyper-V to have ACPI. Signed-off-by: Roman Kisel <redacted> --- drivers/hv/Kconfig | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-)diff --git a/drivers/hv/Kconfig b/drivers/hv/Kconfig index 862c47b191af..a5cd1365e248 100644 --- a/drivers/hv/Kconfig +++ b/drivers/hv/Kconfig@@ -5,7 +5,7 @@ menu "Microsoft Hyper-V guest support" config HYPERV tristate "Microsoft Hyper-V client drivers" depends on (X86 && X86_LOCAL_APIC && HYPERVISOR_GUEST) \ - || (ACPI && ARM64 && !CPU_BIG_ENDIAN) + || (ARM64 && !CPU_BIG_ENDIAN) select PARAVIRT select X86_HV_CALLBACK_VECTOR if X86 select OF_EARLY_FLATTREE if OF@@ -15,7 +15,7 @@ config HYPERV config HYPERV_VTL_MODE bool "Enable Linux to boot in VTL context" - depends on X86_64 && HYPERV + depends on HYPERV depends on SMP default n help@@ -31,7 +31,7 @@ config HYPERV_VTL_MODE Select this option to build a Linux kernel to run at a VTL other than the normal VTL0, which currently is only VTL2. This option - initializes the x86 platform for VTL2, and adds the ability to boot + initializes the kernel to run in VTL2, and adds the ability to boot secondary CPUs directly into 64-bit context as required for VTLs other than 0. A kernel built with this option must run at VTL2, and will not run as a normal guest. --2.34.1In v2 of this patch, I suggested [1] making a couple additional minor changes so that kernels built *without* HYPER_VTL_MODE would still require ACPI. Did that suggestion not work out? If that's the case, I'm curious about what goes wrong.Hi Michael/Roman, I was considering making HYPERV_VTL_MODE depend on CONFIG_OF. That shouldaddressquoted
above concern as well. Do you see any potential issue with it.Michael, I ran into a pretty gnarly recursive dependencies which in all fairness might stem from not being fluent enough in the Kconfig language. Any help of how to approach implementing your idea would be greatly appreciated!
This is what I had in mind:
--- a/drivers/hv/Kconfig
+++ b/drivers/hv/Kconfig@@ -5,7 +5,8 @@ menu "Microsoft Hyper-V guest support" config HYPERV tristate "Microsoft Hyper-V client drivers" depends on (X86 && X86_LOCAL_APIC && HYPERVISOR_GUEST) \ - || (ACPI && ARM64 && !CPU_BIG_ENDIAN) + || (ARM64 && !CPU_BIG_ENDIAN) + depends on (ACPI || HYPERV_VTL_MODE) select PARAVIRT select X86_HV_CALLBACK_VECTOR if X86 select OF_EARLY_FLATTREE if OF
@@ -15,7 +16,7 @@ config HYPERV config HYPERV_VTL_MODE bool "Enable Linux to boot in VTL context" - depends on X86_64 && HYPERV + depends on X86_64 depends on SMP default n help
HYPERV_VTL_MODE can now be selected independently of HYPERV. The existing code should be such that even if someone is building a random config and gets HYPERV_VTL_MODE without HYPERV, the kernel will build and run in a non-Hyper-V environment and isn't broken somehow. For HYPERV to be selected, either ACPI must already be selected, or HYPERV_VTL_MODE must already be selected. So "normal" kernels are still enforced to require ACPI. But if building with HYPERV_VTL_MODE, then ACPI is optional. Saurabh's idea of adding "depends on OF" to HYPERV_VTL_MODE should also work with these changes. I haven't fully tested the above with all the relevant combinations on both x86 and arm64, but I think the logic makes sense. Michael