| 1 | # SPDX-License-Identifier: GPL-2.0 |
| 2 | |
| 3 | menu "Microsoft Hyper-V guest support" |
| 4 | |
| 5 | config HYPERV |
| 6 | bool "Microsoft Hyper-V core hypervisor support" |
| 7 | depends on (X86 && X86_LOCAL_APIC && HYPERVISOR_GUEST) || ARM64 |
| 8 | select PARAVIRT |
| 9 | select X86_HV_CALLBACK_VECTOR if X86 |
| 10 | select OF_EARLY_FLATTREE if OF |
| 11 | select IRQ_MSI_LIB if X86 |
| 12 | help |
| 13 | Select this option to run Linux as a Hyper-V client operating |
| 14 | system. |
| 15 | |
| 16 | config HYPERV_VTL_MODE |
| 17 | bool "Enable Linux to boot in VTL context" |
| 18 | depends on (X86_64 && HAVE_STATIC_CALL) || ARM64 |
| 19 | depends on HYPERV |
| 20 | depends on SMP |
| 21 | default n |
| 22 | help |
| 23 | Virtual Secure Mode (VSM) is a set of hypervisor capabilities and |
| 24 | enlightenments offered to host and guest partitions which enables |
| 25 | the creation and management of new security boundaries within |
| 26 | operating system software. |
| 27 | |
| 28 | VSM achieves and maintains isolation through Virtual Trust Levels |
| 29 | (VTLs). Virtual Trust Levels are hierarchical, with higher levels |
| 30 | being more privileged than lower levels. VTL0 is the least privileged |
| 31 | level, and currently only other level supported is VTL2. |
| 32 | |
| 33 | Select this option to build a Linux kernel to run at a VTL other than |
| 34 | the normal VTL0, which currently is only VTL2. This option |
| 35 | initializes the kernel to run in VTL2, and adds the ability to boot |
| 36 | secondary CPUs directly into 64-bit context as required for VTLs other |
| 37 | than 0. A kernel built with this option must run at VTL2, and will |
| 38 | not run as a normal guest. |
| 39 | |
| 40 | If unsure, say N |
| 41 | |
| 42 | config HYPERV_TIMER |
| 43 | def_bool HYPERV && X86 |
| 44 | |
| 45 | config HYPERV_UTILS |
| 46 | tristate "Microsoft Hyper-V Utilities driver" |
| 47 | depends on HYPERV_VMBUS && CONNECTOR && NLS |
| 48 | depends on PTP_1588_CLOCK_OPTIONAL |
| 49 | help |
| 50 | Select this option to enable the Hyper-V Utilities. |
| 51 | |
| 52 | config HYPERV_BALLOON |
| 53 | tristate "Microsoft Hyper-V Balloon driver" |
| 54 | depends on HYPERV_VMBUS |
| 55 | select PAGE_REPORTING |
| 56 | help |
| 57 | Select this option to enable Hyper-V Balloon driver. |
| 58 | |
| 59 | config HYPERV_VMBUS |
| 60 | tristate "Microsoft Hyper-V VMBus driver" |
| 61 | depends on HYPERV |
| 62 | default HYPERV |
| 63 | select SYSFB if EFI && !HYPERV_VTL_MODE |
| 64 | help |
| 65 | Select this option to enable Hyper-V Vmbus driver. |
| 66 | |
| 67 | config MSHV_ROOT |
| 68 | tristate "Microsoft Hyper-V root partition support" |
| 69 | depends on HYPERV && (X86_64 || ARM64) |
| 70 | depends on !HYPERV_VTL_MODE |
| 71 | # The hypervisor interface operates on 4k pages. Enforcing it here |
| 72 | # simplifies many assumptions in the root partition code. |
| 73 | # e.g. When withdrawing memory, the hypervisor gives back 4k pages in |
| 74 | # no particular order, making it impossible to reassemble larger pages |
| 75 | depends on PAGE_SIZE_4KB |
| 76 | depends on HYPERV_VMBUS if HYPERV_VMBUS |
| 77 | select EVENTFD |
| 78 | select VIRT_XFER_TO_GUEST_WORK |
| 79 | select HMM_MIRROR |
| 80 | select MMU_NOTIFIER |
| 81 | default n |
| 82 | help |
| 83 | Select this option to enable support for booting and running as root |
| 84 | partition on Microsoft Hyper-V. |
| 85 | |
| 86 | If unsure, say N. |
| 87 | |
| 88 | config MSHV_VTL |
| 89 | tristate "Microsoft Hyper-V VTL driver" |
| 90 | depends on X86_64 && HYPERV_VTL_MODE |
| 91 | depends on HYPERV_VMBUS |
| 92 | # Mapping VTL0 memory to a userspace process in VTL2 is supported in OpenHCL. |
| 93 | # VTL2 for OpenHCL makes use of Huge Pages to improve performance on VMs, |
| 94 | # specially with large memory requirements. |
| 95 | depends on TRANSPARENT_HUGEPAGE |
| 96 | # MTRRs are controlled by VTL0, and are not specific to individual VTLs. |
| 97 | # Therefore, do not attempt to access or modify MTRRs here. |
| 98 | depends on !MTRR |
| 99 | select CPUMASK_OFFSTACK |
| 100 | select VIRT_XFER_TO_GUEST_WORK |
| 101 | default n |
| 102 | help |
| 103 | Select this option to enable Hyper-V VTL driver support. |
| 104 | This driver provides interfaces for Virtual Machine Manager (VMM) running in VTL2 |
| 105 | userspace to create VTLs and partitions, setup and manage VTL0 memory and |
| 106 | allow userspace to make direct hypercalls. This also allows to map VTL0's address |
| 107 | space to a usermode process in VTL2 and supports getting new VMBus messages and channel |
| 108 | events in VTL2. |
| 109 | |
| 110 | If unsure, say N. |
| 111 | |
| 112 | endmenu |