RE: [PATCH v2 4/4] hyperv: Switch from hyperv-tlfs.h to hyperv/hvhdk.h

Michael Kelley
2024-11-11T04:13:50Z

From: Nuno Das Neves <nunodasneves@linux.microsoft.com> Sent: Thursday, November 7, 2024 2:32 PM
>
> Switch to using hvhdk.h everywhere in the kernel. This header includes
> all the new Hyper-V headers in include/hyperv, which form a superset of
> the definitions found in hyperv-tlfs.h.
>
> This makes it easier to add new Hyper-V interfaces without being
> restricted to those in the TLFS doc (reflected in hyperv-tlfs.h).
>
> To be more consistent with the original Hyper-V code, the names of some
> definitions are changed slightly. Update those where needed.
>
> hyperv-tlfs.h is no longer included anywhere - hvhdk.h can serve
> the same role, but with an easier path for adding new definitions.

Is hyperv-tlfs.h and friends being deleted? If not, the risk is that
someone adds a new #include of it without realizing that it has been
superseded by hvhdk.h.

Note also that this patch does not apply cleanly to 6.12 rc's, or to
current linux-next trees. There's an unrelated #include added to
arch/x86/include/asm/kvm_host.h that causes a merge failure
in that file.

Michael

>
> Signed-off-by: Nuno Das Neves <nunodasneves@linux.microsoft.com>
> ---
> arch/arm64/hyperv/hv_core.c | 2 +-
> arch/arm64/hyperv/mshyperv.c | 4 ++--
> arch/arm64/include/asm/mshyperv.h | 2 +-
> arch/x86/hyperv/hv_init.c | 20 ++++++++++----------
> arch/x86/hyperv/hv_proc.c | 2 +-
> arch/x86/hyperv/nested.c | 2 +-
> arch/x86/include/asm/kvm_host.h | 2 +-
> arch/x86/include/asm/mshyperv.h | 2 +-
> arch/x86/include/asm/svm.h | 2 +-
> arch/x86/kernel/cpu/mshyperv.c | 2 +-
> arch/x86/kvm/vmx/hyperv_evmcs.h | 2 +-
> arch/x86/kvm/vmx/vmx_onhyperv.h | 2 +-
> drivers/clocksource/hyperv_timer.c | 2 +-
> drivers/hv/hv_balloon.c | 4 ++--
> drivers/hv/hv_common.c | 2 +-
> drivers/hv/hv_kvp.c | 2 +-
> drivers/hv/hv_snapshot.c | 2 +-
> drivers/hv/hyperv_vmbus.h | 2 +-
> include/asm-generic/mshyperv.h | 2 +-
> include/clocksource/hyperv_timer.h | 2 +-
> include/linux/hyperv.h | 2 +-
> net/vmw_vsock/hyperv_transport.c | 2 +-
> 22 files changed, 33 insertions(+), 33 deletions(-)
>
> diff --git a/arch/arm64/hyperv/hv_core.c b/arch/arm64/hyperv/hv_core.c
> index 7a746a5a6b42..69004f619c57 100644
> --- a/arch/arm64/hyperv/hv_core.c
> +++ b/arch/arm64/hyperv/hv_core.c
> @@ -14,7 +14,7 @@
> #include <linux/arm-smccc.h>
> #include <linux/module.h>
> #include <asm-generic/bug.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
> #include <asm/mshyperv.h>
>
> /*
> diff --git a/arch/arm64/hyperv/mshyperv.c b/arch/arm64/hyperv/mshyperv.c
> index b1a4de4eee29..fc49949b7df6 100644
> --- a/arch/arm64/hyperv/mshyperv.c
> +++ b/arch/arm64/hyperv/mshyperv.c
> @@ -49,12 +49,12 @@ static int __init hyperv_init(void)
> hv_set_vpreg(HV_REGISTER_GUEST_OS_ID, guest_id);
>
> /* Get the features and hints from Hyper-V */
> - hv_get_vpreg_128(HV_REGISTER_FEATURES, &result);
> + hv_get_vpreg_128(HV_REGISTER_PRIVILEGES_AND_FEATURES_INFO, &result);
> ms_hyperv.features = result.as32.a;
> ms_hyperv.priv_high = result.as32.b;
> ms_hyperv.misc_features = result.as32.c;
>
> - hv_get_vpreg_128(HV_REGISTER_ENLIGHTENMENTS, &result);
> + hv_get_vpreg_128(HV_REGISTER_FEATURES_INFO, &result);
> ms_hyperv.hints = result.as32.a;
>
> pr_info("Hyper-V: privilege flags low 0x%x, high 0x%x, hints 0x%x, misc
> 0x%x\n",
> diff --git a/arch/arm64/include/asm/mshyperv.h
> b/arch/arm64/include/asm/mshyperv.h
> index a975e1a689dd..7595fb35fae6 100644
> --- a/arch/arm64/include/asm/mshyperv.h
> +++ b/arch/arm64/include/asm/mshyperv.h
> @@ -20,7 +20,7 @@
>
> #include <linux/types.h>
> #include <linux/arm-smccc.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
>
> /*
> * Declare calls to get and set Hyper-V VP register values on ARM64, which
> diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c
> index 1a6354b3e582..3f9aef157c88 100644
> --- a/arch/x86/hyperv/hv_init.c
> +++ b/arch/x86/hyperv/hv_init.c
> @@ -19,7 +19,7 @@
> #include <asm/sev.h>
> #include <asm/ibt.h>
> #include <asm/hypervisor.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
> #include <asm/mshyperv.h>
> #include <asm/idtentry.h>
> #include <asm/set_memory.h>
> @@ -416,24 +416,24 @@ static void __init hv_get_partition_id(void)
> static u8 __init get_vtl(void)
> {
> u64 control = HV_HYPERCALL_REP_COMP_1 | HVCALL_GET_VP_REGISTERS;
> - struct hv_get_vp_registers_input *input;
> - struct hv_get_vp_registers_output *output;
> + struct hv_input_get_vp_registers *input;
> + struct hv_register_assoc *output;
> unsigned long flags;
> u64 ret;
>
> local_irq_save(flags);
> input = *this_cpu_ptr(hyperv_pcpu_input_arg);
> - output = (struct hv_get_vp_registers_output *)input;
> + output = (struct hv_register_assoc *)input;
>
> - memset(input, 0, struct_size(input, element, 1));
> - input->header.partitionid = HV_PARTITION_ID_SELF;
> - input->header.vpindex = HV_VP_INDEX_SELF;
> - input->header.inputvtl = 0;
> - input->element[0].name0 = HV_X64_REGISTER_VSM_VP_STATUS;
> + memset(input, 0, struct_size(input, names, 1));
> + input->partition_id = HV_PARTITION_ID_SELF;
> + input->vp_index = HV_VP_INDEX_SELF;
> + input->input_vtl.as_uint8 = 0;
> + input->names[0] = HV_X64_REGISTER_VSM_VP_STATUS;
>
> ret = hv_do_hypercall(control, input, output);
> if (hv_result_success(ret)) {
> - ret = output->as64.low & HV_X64_VTL_MASK;
> + ret = output->value.reg8 & HV_X64_VTL_MASK;
> } else {
> pr_err("Failed to get VTL(error: %lld) exiting...\n", ret);
> BUG();
> diff --git a/arch/x86/hyperv/hv_proc.c b/arch/x86/hyperv/hv_proc.c
> index b74c06c04ff1..ac4c834d4435 100644
> --- a/arch/x86/hyperv/hv_proc.c
> +++ b/arch/x86/hyperv/hv_proc.c
> @@ -176,7 +176,7 @@ int hv_call_create_vp(int node, u64 partition_id, u32 vp_index,
> u32 flags)
> input->partition_id = partition_id;
> input->vp_index = vp_index;
> input->flags = flags;
> - input->subnode_type = HvSubnodeAny;
> + input->subnode_type = HV_SUBNODE_ANY;
> input->proximity_domain_info = hv_numa_node_to_pxm_info(node);
> status = hv_do_hypercall(HVCALL_CREATE_VP, input, NULL);
> local_irq_restore(irq_flags);
> diff --git a/arch/x86/hyperv/nested.c b/arch/x86/hyperv/nested.c
> index 9dc259fa322e..1083dc8646f9 100644
> --- a/arch/x86/hyperv/nested.c
> +++ b/arch/x86/hyperv/nested.c
> @@ -11,7 +11,7 @@
>
>
> #include <linux/types.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
> #include <asm/mshyperv.h>
> #include <asm/tlbflush.h>
>
> diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
> index 3627eab994a3..38cd609f37c7 100644
> --- a/arch/x86/include/asm/kvm_host.h
> +++ b/arch/x86/include/asm/kvm_host.h
> @@ -34,7 +34,7 @@
> #include <asm/asm.h>
> #include <asm/kvm_page_track.h>
> #include <asm/kvm_vcpu_regs.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
>
> #define __KVM_HAVE_ARCH_VCPU_DEBUGFS
>
> diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h
> index 47ca48062547..f0564e599b7f 100644
> --- a/arch/x86/include/asm/mshyperv.h
> +++ b/arch/x86/include/asm/mshyperv.h
> @@ -6,9 +6,9 @@
> #include <linux/nmi.h>
> #include <linux/msi.h>
> #include <linux/io.h>
> -#include <asm/hyperv-tlfs.h>
> #include <asm/nospec-branch.h>
> #include <asm/paravirt.h>
> +#include <hyperv/hvhdk.h>
>
> /*
> * Hyper-V always provides a single IO-APIC at this MMIO address.
> diff --git a/arch/x86/include/asm/svm.h b/arch/x86/include/asm/svm.h
> index f0dea3750ca9..913af68ad660 100644
> --- a/arch/x86/include/asm/svm.h
> +++ b/arch/x86/include/asm/svm.h
> @@ -5,7 +5,7 @@
> #include <uapi/asm/svm.h>
> #include <uapi/asm/kvm.h>
>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
>
> /*
> * 32-bit intercept words in the VMCB Control Area, starting
> diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c
> index e0fd57a8ba84..be0d1f4491d9 100644
> --- a/arch/x86/kernel/cpu/mshyperv.c
> +++ b/arch/x86/kernel/cpu/mshyperv.c
> @@ -20,7 +20,7 @@
> #include <linux/random.h>
> #include <asm/processor.h>
> #include <asm/hypervisor.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
> #include <asm/mshyperv.h>
> #include <asm/desc.h>
> #include <asm/idtentry.h>
> diff --git a/arch/x86/kvm/vmx/hyperv_evmcs.h b/arch/x86/kvm/vmx/hyperv_evmcs.h
> index a543fccfc574..6536290f4274 100644
> --- a/arch/x86/kvm/vmx/hyperv_evmcs.h
> +++ b/arch/x86/kvm/vmx/hyperv_evmcs.h
> @@ -6,7 +6,7 @@
> #ifndef __KVM_X86_VMX_HYPERV_EVMCS_H
> #define __KVM_X86_VMX_HYPERV_EVMCS_H
>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
>
> #include "capabilities.h"
> #include "vmcs12.h"
> diff --git a/arch/x86/kvm/vmx/vmx_onhyperv.h
> b/arch/x86/kvm/vmx/vmx_onhyperv.h
> index eb48153bfd73..2b94ff301712 100644
> --- a/arch/x86/kvm/vmx/vmx_onhyperv.h
> +++ b/arch/x86/kvm/vmx/vmx_onhyperv.h
> @@ -3,7 +3,7 @@
> #ifndef __ARCH_X86_KVM_VMX_ONHYPERV_H__
> #define __ARCH_X86_KVM_VMX_ONHYPERV_H__
>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
> #include <asm/mshyperv.h>
>
> #include <linux/jump_label.h>
> diff --git a/drivers/clocksource/hyperv_timer.c b/drivers/clocksource/hyperv_timer.c
> index b2a080647e41..c1cc96a168c7 100644
> --- a/drivers/clocksource/hyperv_timer.c
> +++ b/drivers/clocksource/hyperv_timer.c
> @@ -23,7 +23,7 @@
> #include <linux/acpi.h>
> #include <linux/hyperv.h>
> #include <clocksource/hyperv_timer.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
> #include <asm/mshyperv.h>
>
> static struct clock_event_device __percpu *hv_clock_event;
> diff --git a/drivers/hv/hv_balloon.c b/drivers/hv/hv_balloon.c
> index c38dcdfcb914..d792df113962 100644
> --- a/drivers/hv/hv_balloon.c
> +++ b/drivers/hv/hv_balloon.c
> @@ -28,7 +28,7 @@
> #include <linux/sizes.h>
>
> #include <linux/hyperv.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
>
> #include <asm/mshyperv.h>
>
> @@ -1585,7 +1585,7 @@ static int hv_free_page_report(struct
> page_reporting_dev_info *pr_dev_info,
> return -ENOSPC;
> }
>
> - hint->type = HV_EXT_MEMORY_HEAT_HINT_TYPE_COLD_DISCARD;
> + hint->heat_type = HV_EXTMEM_HEAT_HINT_COLD_DISCARD;
> hint->reserved = 0;
> for_each_sg(sgl, sg, nents, i) {
> union hv_gpa_page_range *range;
> diff --git a/drivers/hv/hv_common.c b/drivers/hv/hv_common.c
> index 9c452bfbd571..9ea05cbbf50d 100644
> --- a/drivers/hv/hv_common.c
> +++ b/drivers/hv/hv_common.c
> @@ -28,7 +28,7 @@
> #include <linux/slab.h>
> #include <linux/dma-map-ops.h>
> #include <linux/set_memory.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
> #include <asm/mshyperv.h>
>
> /*
> diff --git a/drivers/hv/hv_kvp.c b/drivers/hv/hv_kvp.c
> index d35b60c06114..bfb7a518b4ed 100644
> --- a/drivers/hv/hv_kvp.c
> +++ b/drivers/hv/hv_kvp.c
> @@ -27,7 +27,7 @@
> #include <linux/connector.h>
> #include <linux/workqueue.h>
> #include <linux/hyperv.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
>
> #include "hyperv_vmbus.h"
> #include "hv_utils_transport.h"
> diff --git a/drivers/hv/hv_snapshot.c b/drivers/hv/hv_snapshot.c
> index 0d2184be1691..097ebd58f14e 100644
> --- a/drivers/hv/hv_snapshot.c
> +++ b/drivers/hv/hv_snapshot.c
> @@ -12,7 +12,7 @@
> #include <linux/connector.h>
> #include <linux/workqueue.h>
> #include <linux/hyperv.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
>
> #include "hyperv_vmbus.h"
> #include "hv_utils_transport.h"
> diff --git a/drivers/hv/hyperv_vmbus.h b/drivers/hv/hyperv_vmbus.h
> index 76ac5185a01a..2bea654858e3 100644
> --- a/drivers/hv/hyperv_vmbus.h
> +++ b/drivers/hv/hyperv_vmbus.h
> @@ -15,10 +15,10 @@
> #include <linux/list.h>
> #include <linux/bitops.h>
> #include <asm/sync_bitops.h>
> -#include <asm/hyperv-tlfs.h>
> #include <linux/atomic.h>
> #include <linux/hyperv.h>
> #include <linux/interrupt.h>
> +#include <hyperv/hvhdk.h>
>
> #include "hv_trace.h"
>
> diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h
> index 8fe7aaab2599..138e416a0f9c 100644
> --- a/include/asm-generic/mshyperv.h
> +++ b/include/asm-generic/mshyperv.h
> @@ -25,7 +25,7 @@
> #include <linux/cpumask.h>
> #include <linux/nmi.h>
> #include <asm/ptrace.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
>
> #define VTPM_BASE_ADDRESS 0xfed40000
>
> diff --git a/include/clocksource/hyperv_timer.h b/include/clocksource/hyperv_timer.h
> index 6cdc873ac907..a4c81a60f53d 100644
> --- a/include/clocksource/hyperv_timer.h
> +++ b/include/clocksource/hyperv_timer.h
> @@ -15,7 +15,7 @@
>
> #include <linux/clocksource.h>
> #include <linux/math64.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
>
> #define HV_MAX_MAX_DELTA_TICKS 0xffffffff
> #define HV_MIN_DELTA_TICKS 1
> diff --git a/include/linux/hyperv.h b/include/linux/hyperv.h
> index d0893ec488ae..ed65b20defea 100644
> --- a/include/linux/hyperv.h
> +++ b/include/linux/hyperv.h
> @@ -24,7 +24,7 @@
> #include <linux/mod_devicetable.h>
> #include <linux/interrupt.h>
> #include <linux/reciprocal_div.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
>
> #define MAX_PAGE_BUFFER_COUNT 32
> #define MAX_MULTIPAGE_BUFFER_COUNT 32 /* 128K */
> diff --git a/net/vmw_vsock/hyperv_transport.c b/net/vmw_vsock/hyperv_transport.c
> index e2157e387217..152b6ed8877d 100644
> --- a/net/vmw_vsock/hyperv_transport.c
> +++ b/net/vmw_vsock/hyperv_transport.c
> @@ -13,7 +13,7 @@
> #include <linux/hyperv.h>
> #include <net/sock.h>
> #include <net/af_vsock.h>
> -#include <asm/hyperv-tlfs.h>
> +#include <hyperv/hvhdk.h>
>
> /* Older (VMBUS version 'VERSION_WIN10' or before) Windows hosts have some
> * stricter requirements on the hv_sock ring buffer size of six 4K pages.
> --
> 2.34.1