diff options
-rw-r--r-- | arch/x86/include/asm/mshyperv.h | 12 | ||||
-rw-r--r-- | arch/x86/kernel/cpu/mshyperv.c | 8 |
2 files changed, 12 insertions, 8 deletions
diff --git a/arch/x86/include/asm/mshyperv.h b/arch/x86/include/asm/mshyperv.h index 15ac2d03ac59..4c4c0ec3b62e 100644 --- a/arch/x86/include/asm/mshyperv.h +++ b/arch/x86/include/asm/mshyperv.h @@ -224,10 +224,14 @@ extern bool hv_isolation_type_snp(void); static inline bool hv_is_synic_reg(unsigned int reg) { - if ((reg >= HV_REGISTER_SCONTROL) && - (reg <= HV_REGISTER_SINT15)) - return true; - return false; + return (reg >= HV_REGISTER_SCONTROL) && + (reg <= HV_REGISTER_SINT15); +} + +static inline bool hv_is_sint_reg(unsigned int reg) +{ + return (reg >= HV_REGISTER_SINT0) && + (reg <= HV_REGISTER_SINT15); } u64 hv_get_register(unsigned int reg); diff --git a/arch/x86/kernel/cpu/mshyperv.c b/arch/x86/kernel/cpu/mshyperv.c index dedec2f23ad1..f924a76c6923 100644 --- a/arch/x86/kernel/cpu/mshyperv.c +++ b/arch/x86/kernel/cpu/mshyperv.c @@ -44,6 +44,9 @@ struct ms_hyperv_info ms_hyperv; #if IS_ENABLED(CONFIG_HYPERV) static inline unsigned int hv_get_nested_reg(unsigned int reg) { + if (hv_is_sint_reg(reg)) + return reg - HV_REGISTER_SINT0 + HV_REGISTER_NESTED_SINT0; + switch (reg) { case HV_REGISTER_SIMP: return HV_REGISTER_NESTED_SIMP; @@ -53,8 +56,6 @@ static inline unsigned int hv_get_nested_reg(unsigned int reg) return HV_REGISTER_NESTED_SVERSION; case HV_REGISTER_SCONTROL: return HV_REGISTER_NESTED_SCONTROL; - case HV_REGISTER_SINT0: - return HV_REGISTER_NESTED_SINT0; case HV_REGISTER_EOM: return HV_REGISTER_NESTED_EOM; default: @@ -80,8 +81,7 @@ void hv_set_non_nested_register(unsigned int reg, u64 value) hv_ghcb_msr_write(reg, value); /* Write proxy bit via wrmsl instruction */ - if (reg >= HV_REGISTER_SINT0 && - reg <= HV_REGISTER_SINT15) + if (hv_is_sint_reg(reg)) wrmsrl(reg, value | 1 << 20); } else { wrmsrl(reg, value); |