Synthetic timers can only be configured in 'direct' mode when
HV_STIMER_DIRECT_MODE_AVAILABLE bit was exposed.

Signed-off-by: Vitaly Kuznetsov <vkuzn...@redhat.com>
---
 arch/x86/kvm/hyperv.c | 5 +++++
 1 file changed, 5 insertions(+)

diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c
index 1299847c89ba..0df18187d908 100644
--- a/arch/x86/kvm/hyperv.c
+++ b/arch/x86/kvm/hyperv.c
@@ -646,6 +646,11 @@ static int stimer_set_config(struct kvm_vcpu_hv_stimer 
*stimer, u64 config,
                                 HV_MSR_SYNTIMER_AVAILABLE))))
                return 1;
 
+       if (unlikely(!host && new_config.direct_mode &&
+                    !(to_hv_vcpu(vcpu)->cpuid_cache.features_edx &
+                      HV_STIMER_DIRECT_MODE_AVAILABLE)))
+               return 1;
+
        trace_kvm_hv_stimer_set_config(hv_stimer_to_vcpu(stimer)->vcpu_id,
                                       stimer->index, config, host);
 
-- 
2.30.2

Reply via email to