]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
hyperv: Switch from hyperv-tlfs.h to hyperv/hvhdk.h
authorNuno Das Neves <nunodasneves@linux.microsoft.com>
Mon, 25 Nov 2024 23:24:43 +0000 (15:24 -0800)
committerWei Liu <wei.liu@kernel.org>
Fri, 10 Jan 2025 00:54:21 +0000 (00:54 +0000)
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.

Update comments in mshyperv.h files to point to include/hyperv for
adding new definitions.

Signed-off-by: Nuno Das Neves <nunodasneves@linux.microsoft.com>
Reviewed-by: Michael Kelley <mhklinux@outlook.com>
Reviewed-by: Easwar Hariharan <eahariha@linux.microsoft.com>
Signed-off-by: Roman Kisel <romank@linux.microsoft.com>
Reviewed-by: Easwar Hariharan <eahariha@linux.microsoft.com>
Link: https://lore.kernel.org/r/1732577084-2122-5-git-send-email-nunodasneves@linux.microsoft.com
Link: https://lore.kernel.org/r/20250108222138.1623703-3-romank@linux.microsoft.com
Signed-off-by: Wei Liu <wei.liu@kernel.org>
22 files changed:
arch/arm64/hyperv/hv_core.c
arch/arm64/hyperv/mshyperv.c
arch/arm64/include/asm/mshyperv.h
arch/x86/hyperv/hv_init.c
arch/x86/hyperv/hv_proc.c
arch/x86/hyperv/nested.c
arch/x86/include/asm/kvm_host.h
arch/x86/include/asm/mshyperv.h
arch/x86/include/asm/svm.h
arch/x86/kernel/cpu/mshyperv.c
arch/x86/kvm/vmx/hyperv_evmcs.h
arch/x86/kvm/vmx/vmx_onhyperv.h
drivers/clocksource/hyperv_timer.c
drivers/hv/hv_balloon.c
drivers/hv/hv_common.c
drivers/hv/hv_kvp.c
drivers/hv/hv_snapshot.c
drivers/hv/hyperv_vmbus.h
include/asm-generic/mshyperv.h
include/clocksource/hyperv_timer.h
include/linux/hyperv.h
net/vmw_vsock/hyperv_transport.c

index 7a746a5a6b42fb9e8e6389a01189d231b2dd28d3..69004f619c579fea5a3ae4acf58e35f2f47990ca 100644 (file)
@@ -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>
 
 /*
index b1a4de4eee2930f622409b7e68a7c82d50e27496..fc49949b7df6222e5ed0645b48ff93820268e288 100644 (file)
@@ -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",
index a975e1a689ddba3cb7e2cccde2b0fe7f1efb534b..2e2f83bafcfbbbf7b586e2d7ca0c2833babd2851 100644 (file)
@@ -6,9 +6,8 @@
  * the ARM64 architecture.  See include/asm-generic/mshyperv.h for
  * definitions are that architecture independent.
  *
- * Definitions that are specified in the Hyper-V Top Level Functional
- * Spec (TLFS) should not go in this file, but should instead go in
- * hyperv-tlfs.h.
+ * Definitions that are derived from Hyper-V code or headers should not go in
+ * this file, but should instead go in the relevant files in include/hyperv.
  *
  * Copyright (C) 2021, Microsoft, Inc.
  *
@@ -20,7 +19,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
index 3562826915f94d3170f5c43168bce7862c2fedf8..ba469d6b8250634526b8c5787c8efaf6868390ec 100644 (file)
@@ -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>
@@ -415,24 +415,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_output_get_vp_registers *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_output_get_vp_registers *)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_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->values[0].reg8 & HV_X64_VTL_MASK;
        } else {
                pr_err("Failed to get VTL(error: %lld) exiting...\n", ret);
                BUG();
index b74c06c04ff1d21aa6351bbb12c5eb88ac07c24b..ac4c834d44357cad1ec182c1bc9c53185da9bfe3 100644 (file)
@@ -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);
index 9dc259fa322e0c388bc06c5c88b8b270ca25c712..1083dc8646f9d2f7874daf76cb8c0f93e3dfa0e0 100644 (file)
@@ -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>
 
index 46f354b124889ea10bd9d23fe3ae5f23663477d0..e8aeb4b4f868e87ff00e02277d4600133c2ac228 100644 (file)
@@ -35,8 +35,8 @@
 #include <asm/asm.h>
 #include <asm/kvm_page_track.h>
 #include <asm/kvm_vcpu_regs.h>
-#include <asm/hyperv-tlfs.h>
 #include <asm/reboot.h>
+#include <hyperv/hvhdk.h>
 
 #define __KVM_HAVE_ARCH_VCPU_DEBUGFS
 
index 6f866fb9ffee788007d912a634b2767539a5f301..f91ab1e75f9ffc456f08241550b865b93c5f34ef 100644 (file)
@@ -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.
index 2b59b9951c90ee249a1c8e3d969a8485a05de5e7..77704eddba548b23b4a9137de5a3d2786bcab8b3 100644 (file)
@@ -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
index dc12fe5ef3caa94ff67a51b662ef9eb3269706ff..f285757618fc8cf6e67b62c3d1a725d9b6ba70ed 100644 (file)
@@ -19,7 +19,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>
index a543fccfc5747a50b709b9d582f502dd6a6a09dc..6536290f42747912c75c33f1784b16ac8af61547 100644 (file)
@@ -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"
index bba24ed99ee6cac80c528c5da0fc74c37c502f81..cdf8cbb69209dea9fbd6b8f9007ed4af2fafac45 100644 (file)
@@ -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>
index b39dee7b93af04fa20261a0a4f37cabb42d703d4..f00019b078a71ab766dfbdac7b381b2965de8bdd 100644 (file)
@@ -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;
index a99112e6f0b8534cf5c8c963e343019061bd34f6..871b73ca3a0fb81276f0824dc9c167bb7a6e4531 100644 (file)
@@ -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>
 
@@ -1586,7 +1586,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;
index 7a35c82976e0ff8cad6ab37d1a18b2c21c78c28b..c4fd07d9bf1ae164decccfde956622149f8b38cb 100644 (file)
@@ -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>
 
 /*
index 7400a5a4d2bd75d56c578caf019c70c95c5c3730..62795f6cbb001938893538d0c46ca4daa71a4f18 100644 (file)
@@ -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"
index bde637a96c379bef91820c71762bc2a4c2706978..2e7f537d53cf27c74006a7f21a6fda8ac8a8d909 100644 (file)
@@ -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"
index 52cb744b4d7fdec68a44ee6422a29c87ac7729c7..fad31e30cd53225b282ad09639fc31ea161025db 100644 (file)
 #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"
 
index 8fe7aaab25990aa2fdebd81463b9ac9dedd36945..a7bbe504e4f326f6360fffc60e1a95703052f7ed 100644 (file)
@@ -6,9 +6,8 @@
  * independent. See arch/<arch>/include/asm/mshyperv.h for definitions
  * that are specific to architecture <arch>.
  *
- * Definitions that are specified in the Hyper-V Top Level Functional
- * Spec (TLFS) should not go in this file, but should instead go in
- * hyperv-tlfs.h.
+ * Definitions that are derived from Hyper-V code or headers should not go in
+ * this file, but should instead go in the relevant files in include/hyperv.
  *
  * Copyright (C) 2019, Microsoft, Inc.
  *
@@ -25,7 +24,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
 
index aa5233b1eba970bba537fdc5cad93d2ad778ca06..d48dd4176fd35b7095065cd54422bce88dc6f322 100644 (file)
@@ -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
index b0dbba3b9108e0dfe39325442557d195edbca6b8..4179add2864b41fb8aa81471d205f969eda29673 100644 (file)
@@ -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 */
index 56c232cf5b0f4f4f2c716bc6de9a6f473c8e603f..31342ab502b4fc35feb812d2c94e0e35ded73771 100644 (file)
 #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.
- * hyperv-tlfs defines HV_HYP_PAGE_SIZE as 4K. Newer hosts don't have this
- * limitation; but, keep the defaults the same for compat.
+ * HV_HYP_PAGE_SIZE is defined as 4K. Newer hosts don't have this limitation;
+ * but, keep the defaults the same for compat.
  */
 #define RINGBUFFER_HVS_RCV_SIZE (HV_HYP_PAGE_SIZE * 6)
 #define RINGBUFFER_HVS_SND_SIZE (HV_HYP_PAGE_SIZE * 6)