From: Naman Jain <[email protected]> Sent: Thursday, April 23, 2026 5:42 AM > > Move hv_call_get_vp_registers() and hv_call_set_vp_registers() > declarations from drivers/hv/mshv.h to include/asm-generic/mshyperv.h. > > These functions are defined in mshv_common.c and are going to be called > from both drivers/hv/ and arch/x86/hyperv/hv_vtl.c. The latter never > included mshv.h, relying on implicit declaration visibility. Moving the > declarations to the arch-generic Hyper-V header makes them properly > visible to all architecture-specific callers. > > Provide static inline stubs returning -EOPNOTSUPP when neither > CONFIG_MSHV_ROOT nor CONFIG_MSHV_VTL is enabled.
Looking at the drivers/hv/Kconfig, it's possible to build with CONFIG_HYPERV_VTL_MODE=y, but not CONFIG_MSHV_VTL. In such a case, mshv_common.o doesn't get built, which is why the stubs are needed. Is such a configuration desirable for some scenarios? I wonder if having CONFIG_HYPERV_VTL_MODE force the building of mshv_common.o would be a better approach. Then the stubs wouldn't be needed. The "ifneq" statement in drivers/hv/Makefile could use CONFIG_HYPERV_VTL_MODE instead of CONFIG_MSHV_VTL, and everything would be good since CONFIG_MSHV_VTL depends on CONFIG_HYPERV_VTL_MODE. > > Signed-off-by: Naman Jain <[email protected]> > --- > drivers/hv/mshv.h | 8 -------- > include/asm-generic/mshyperv.h | 26 ++++++++++++++++++++++++++ > 2 files changed, 26 insertions(+), 8 deletions(-) > > diff --git a/drivers/hv/mshv.h b/drivers/hv/mshv.h > index d4813df92b9c..0fcb7f9ba6a9 100644 > --- a/drivers/hv/mshv.h > +++ b/drivers/hv/mshv.h > @@ -14,14 +14,6 @@ > memchr_inv(&((STRUCT).MEMBER), \ > 0, sizeof_field(typeof(STRUCT), MEMBER)) > > -int hv_call_get_vp_registers(u32 vp_index, u64 partition_id, u16 count, > - union hv_input_vtl input_vtl, > - struct hv_register_assoc *registers); > - > -int hv_call_set_vp_registers(u32 vp_index, u64 partition_id, u16 count, > - union hv_input_vtl input_vtl, > - struct hv_register_assoc *registers); > - > int hv_call_get_partition_property(u64 partition_id, u64 property_code, > u64 *property_value); > > diff --git a/include/asm-generic/mshyperv.h b/include/asm-generic/mshyperv.h > index 8cdf2a9fbdfb..ef0b9466808c 100644 > --- a/include/asm-generic/mshyperv.h > +++ b/include/asm-generic/mshyperv.h > @@ -394,6 +394,32 @@ static inline int hv_deposit_memory(u64 partition_id, u64 > status) > return hv_deposit_memory_node(NUMA_NO_NODE, partition_id, status); > } > > +#if IS_ENABLED(CONFIG_MSHV_ROOT) || IS_ENABLED(CONFIG_MSHV_VTL) > +int hv_call_get_vp_registers(u32 vp_index, u64 partition_id, u16 count, > + union hv_input_vtl input_vtl, > + struct hv_register_assoc *registers); > + > +int hv_call_set_vp_registers(u32 vp_index, u64 partition_id, u16 count, > + union hv_input_vtl input_vtl, > + struct hv_register_assoc *registers); > +#else > +static inline int hv_call_get_vp_registers(u32 vp_index, u64 partition_id, > + u16 count, > + union hv_input_vtl input_vtl, > + struct hv_register_assoc *registers) > +{ > + return -EOPNOTSUPP; > +} > + > +static inline int hv_call_set_vp_registers(u32 vp_index, u64 partition_id, > + u16 count, > + union hv_input_vtl input_vtl, > + struct hv_register_assoc *registers) > +{ > + return -EOPNOTSUPP; > +} > +#endif /* CONFIG_MSHV_ROOT || CONFIG_MSHV_VTL */ > + > #if IS_ENABLED(CONFIG_HYPERV_VTL_MODE) > u8 __init get_vtl(void); > void mshv_vtl_return_call(struct mshv_vtl_cpu_context *vtl0); > -- > 2.43.0 >

