On 4/27/2026 11:10 AM, Michael Kelley wrote:
From: Naman Jain <[email protected]> Sent: Thursday, April 23, 2026 
5:42 AM

Move hv_vtl_configure_reg_page() from drivers/hv/mshv_vtl_main.c to
arch/x86/hyperv/hv_vtl.c. The register page overlay is an x86-specific
feature that uses HV_X64_REGISTER_REG_PAGE, so its configuration belongs
in architecture-specific code.

Move struct mshv_vtl_per_cpu and union hv_synic_overlay_page_msr to
include/asm-generic/mshyperv.h so they are visible to both arch and
driver code.

Change the return type from void to bool so the caller can determine
whether the register page was successfully configured and set
mshv_has_reg_page accordingly.

Signed-off-by: Naman Jain <[email protected]>
---
  arch/x86/hyperv/hv_vtl.c       | 32 ++++++++++++++++++++++
  drivers/hv/mshv_vtl_main.c     | 49 +++-------------------------------
  include/asm-generic/mshyperv.h | 17 ++++++++++++
  3 files changed, 53 insertions(+), 45 deletions(-)


<snip>

  #if IS_ENABLED(CONFIG_HYPERV_VTL_MODE)
+/* SYNIC_OVERLAY_PAGE_MSR - internal, identical to hv_synic_simp */

This comment pre-dates your patch, but I don't understand the point
it is trying to make. The comment is factually true, but I don't know
why calling that out is relevant. The REG_PAGE MSR seems to be
conceptually separate and distinct from the SIMP MSR, so the fact
that the layouts are the same is just a coincidence. Or is there some
relationship between the two MSRs that I'm not aware of, and the
comment is trying (and failing?) to point out?

This was added as per suggestion from Nuno in my initial series for MSHV_VTL. If the reference in "identical to" is misleading, I should remove it.

https://lore.kernel.org/all/[email protected]/

Quoting:
"""
it is a generic structure that
appears to be used for several overlay page MSRs (SIMP, SIEF, etc).

But, the type doesn't appear in the hv*dk headers explicitly; it's just
used internally by the hypervisor.

I think it should be renamed with a hv_ prefix to indicate it's part of
the hypervisor ABI, and a brief comment with the provenance:

/* SYNIC_OVERLAY_PAGE_MSR - internal, identical to hv_synic_simp */
union hv_synic_overlay_page_msr {
        /* <snip> */
};
"""


+union hv_synic_overlay_page_msr {
+       u64 as_uint64;
+       struct {
+               u64 enabled: 1;
+               u64 reserved: 11;
+               u64 pfn: 52;
+       } __packed;
+};
+
  u8 __init get_vtl(void);
  void mshv_vtl_return_call(struct mshv_vtl_cpu_context *vtl0);
+bool hv_vtl_configure_reg_page(struct mshv_vtl_per_cpu *per_cpu);
  #else
  static inline u8 get_vtl(void) { return 0; }
  static inline void mshv_vtl_return_call(struct mshv_vtl_cpu_context *vtl0) {}
+static inline bool hv_vtl_configure_reg_page(struct mshv_vtl_per_cpu *per_cpu) 
{ return false; }

As with Patch 8, if CONFIG_HYPERV_VTL_MODE caused mshv_common.o
to be built, this stub wouldn't be needed.


Acked.


  #endif

  #endif
--
2.43.0


Regards,
Naman

Reply via email to