On Thu, Oct 03, 2024 at 12:51:04PM -0700, Nuno Das Neves wrote: > To move toward importing headers from Hyper-V directly, switch to > using hvhdk.h in all Hyper-V code. KVM code that uses Hyper-V > definitions from hyperv-tlfs.h remains untouched. > > Add HYPERV_NONTLFS_HEADERS everywhere mshyperv.h, asm/svm.h, > clocksource/hyperv_timer.h is included in Hyper-V code. > > Replace hyperv-tlfs.h with hvhdk.h directly in linux/hyperv.h, and > define HYPERV_NONTLFS_HEADERS there, since it is only used in > Hyper-V device code. > > Update a couple of definitions to updated names found in the new > headers: HV_EXT_MEM_HEAT_HINT, HV_SUBNODE_TYPE_ANY. > > Signed-off-by: Nuno Das Neves <nunodasneves@xxxxxxxxxxxxxxxxxxx> ... > diff --git a/arch/arm64/hyperv/mshyperv.c b/arch/arm64/hyperv/mshyperv.c > index b1a4de4eee29..62b2a270ae65 100644 > --- a/arch/arm64/hyperv/mshyperv.c > +++ b/arch/arm64/hyperv/mshyperv.c > @@ -15,6 +15,7 @@ > #include <linux/errno.h> > #include <linux/version.h> > #include <linux/cpuhotplug.h> > +#define HYPERV_NONTLFS_HEADERS > #include <asm/mshyperv.h> > > static bool hyperv_initialized; Hi, With this change in place I see allmodconfig x86_64 builds reporting that HV_REGISTER_FEATURES is undeclared. arch/arm64/hyperv/mshyperv.c: In function 'hyperv_init': arch/arm64/hyperv/mshyperv.c:53:26: error: 'HV_REGISTER_FEATURES' undeclared (first use in this function); did you mean 'HV_REGISTER_FEATURES_INFO'? 53 | hv_get_vpreg_128(HV_REGISTER_FEATURES, &result); | ^~~~~~~~~~~~~~~~~~~~ | HV_REGISTER_FEATURES_INFO arch/arm64/hyperv/mshyperv.c:53:26: note: each undeclared identifier is reported only once for each function it appears in arch/arm64/hyperv/mshyperv.c:58:26: error: 'HV_REGISTER_ENLIGHTENMENTS' undeclared (first use in this function); did you mean 'HV_ACCESS_REENLIGHTENMENT'? 58 | hv_get_vpreg_128(HV_REGISTER_ENLIGHTENMENTS, &result); | ^~~~~~~~~~~~~~~~~~~~~~~~~~ | HV_ACCESS_REENLIGHTENMENT > diff --git a/arch/x86/entry/vdso/vma.c b/arch/x86/entry/vdso/vma.c > index 6d83ceb7f1ba..5f4053c49658 100644 > --- a/arch/x86/entry/vdso/vma.c > +++ b/arch/x86/entry/vdso/vma.c > @@ -25,6 +25,7 @@ > #include <asm/page.h> > #include <asm/desc.h> > #include <asm/cpufeature.h> > +#define HYPERV_NONTLFS_HEADERS > #include <clocksource/hyperv_timer.h> > > #undef _ASM_X86_VVAR_H > diff --git a/arch/x86/hyperv/hv_apic.c b/arch/x86/hyperv/hv_apic.c > index f022d5f64fb6..4fe3b3b13256 100644 > --- a/arch/x86/hyperv/hv_apic.c > +++ b/arch/x86/hyperv/hv_apic.c > @@ -26,6 +26,7 @@ > #include <linux/slab.h> > #include <linux/cpuhotplug.h> > #include <asm/hypervisor.h> > +#define HYPERV_NONTLFS_HEADERS > #include <asm/mshyperv.h> > #include <asm/apic.h> > > diff --git a/arch/x86/hyperv/hv_init.c b/arch/x86/hyperv/hv_init.c > index fc3c3d76c181..680c4abc456e 100644 > --- a/arch/x86/hyperv/hv_init.c > +++ b/arch/x86/hyperv/hv_init.c > @@ -19,6 +19,7 @@ > #include <asm/sev.h> > #include <asm/ibt.h> > #include <asm/hypervisor.h> > +#define HYPERV_NONTLFS_HEADERS > #include <asm/mshyperv.h> > #include <asm/idtentry.h> > #include <asm/set_memory.h> And here too, with x86_64 allmodconfig. In file included from ./include/linux/string.h:390, from ./include/linux/efi.h:16, from arch/x86/hyperv/hv_init.c:12: arch/x86/hyperv/hv_init.c: In function 'get_vtl': ./include/linux/overflow.h:372:23: error: invalid application of 'sizeof' to incomplete type 'struct hv_get_vp_registers_input' 372 | sizeof(*(p)) + flex_array_size(p, member, count), \ | ^ ./include/linux/fortify-string.h:502:42: note: in definition of macro '__fortify_memset_chk' 502 | size_t __fortify_size = (size_t)(size); \ | ^~~~ arch/x86/hyperv/hv_init.c:427:9: note: in expansion of macro 'memset' 427 | memset(input, 0, struct_size(input, element, 1)); | ^~~~~~ arch/x86/hyperv/hv_init.c:427:26: note: in expansion of macro 'struct_size' 427 | memset(input, 0, struct_size(input, element, 1)); | ^~~~~~~~~~~ [errors trimmed for the sake of brevity] ... > diff --git a/arch/x86/hyperv/hv_vtl.c b/arch/x86/hyperv/hv_vtl.c > index 04775346369c..a8bb6ad7efb6 100644 > --- a/arch/x86/hyperv/hv_vtl.c > +++ b/arch/x86/hyperv/hv_vtl.c > @@ -10,6 +10,7 @@ > #include <asm/boot.h> > #include <asm/desc.h> > #include <asm/i8259.h> > +#define HYPERV_NONTLFS_HEADERS > #include <asm/mshyperv.h> > #include <asm/realmode.h> > #include <../kernel/smpboot.h> And, likewise, with this patch applied I see a number of errors when compiling this file. This is with allmodconfig on x86_64 with: Modified: CONFIG_HYPERV=y (instead of m) Added: CONFIG_HYPERV_VTL_MODE=y arch/x86/hyperv/hv_vtl.c: In function 'hv_vtl_bringup_vcpu': arch/x86/hyperv/hv_vtl.c:154:34: error: 'HVCALL_ENABLE_VP_VTL' undeclared (first use in this function) 154 | status = hv_do_hypercall(HVCALL_ENABLE_VP_VTL, input, NULL); | ^~~~~~~~~~~~~~~~~~~~ arch/x86/hyperv/hv_vtl.c:154:34: note: each undeclared identifier is reported only once for each function it appears in In file included from ./include/linux/string.h:390, from ./include/linux/bitmap.h:13, from ./include/linux/cpumask.h:12, from ./arch/x86/include/asm/apic.h:5, from arch/x86/hyperv/hv_vtl.c:9: arch/x86/hyperv/hv_vtl.c: In function 'hv_vtl_apicid_to_vp_id': arch/x86/hyperv/hv_vtl.c:189:32: error: invalid application of 'sizeof' to incomplete type 'struct hv_get_vp_from_apic_id_in' 189 | memset(input, 0, sizeof(*input)); | ^ ./include/linux/fortify-string.h:502:42: note: in definition of macro '__fortify_memset_chk' 502 | size_t __fortify_size = (size_t)(size); \ | ^~~~ arch/x86/hyperv/hv_vtl.c:189:9: note: in expansion of macro 'memset' 189 | memset(input, 0, sizeof(*input)); | ^~~~~~ arch/x86/hyperv/hv_vtl.c:190:14: error: invalid use of undefined type 'struct hv_get_vp_from_apic_id_in' 190 | input->partition_id = HV_PARTITION_ID_SELF; | ^~ arch/x86/hyperv/hv_vtl.c:191:14: error: invalid use of undefined type 'struct hv_get_vp_from_apic_id_in' 191 | input->apic_ids[0] = apic_id; | ^~ arch/x86/hyperv/hv_vtl.c:195:45: error: 'HVCALL_GET_VP_ID_FROM_APIC_ID' undeclared (first use in this function) 195 | control = HV_HYPERCALL_REP_COMP_1 | HVCALL_GET_VP_ID_FROM_APIC_ID; | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~ ...