return (unsigned long)data;
 }
 
-static u64 vcpu_supported_debugctl(struct kvm_vcpu *vcpu)
+static u64 vmx_get_supported_debugctl(struct kvm_vcpu *vcpu, bool host_initiated)
 {
        u64 debugctl = 0;
 
        if (boot_cpu_has(X86_FEATURE_BUS_LOCK_DETECT) &&
-           guest_cpuid_has(vcpu, X86_FEATURE_BUS_LOCK_DETECT))
+           (host_initiated || guest_cpuid_has(vcpu, X86_FEATURE_BUS_LOCK_DETECT)))
                debugctl |= DEBUGCTLMSR_BUS_LOCK_DETECT;
 
        if ((vmx_get_perf_capabilities() & PMU_CAP_LBR_FMT) &&
-           intel_pmu_lbr_is_enabled(vcpu))
+           (host_initiated || intel_pmu_lbr_is_enabled(vcpu)))
                debugctl |= DEBUGCTLMSR_LBR | DEBUGCTLMSR_FREEZE_LBRS_ON_PMI;
 
        return debugctl;
                vmcs_writel(GUEST_SYSENTER_ESP, data);
                break;
        case MSR_IA32_DEBUGCTLMSR: {
-               u64 invalid = data & ~vcpu_supported_debugctl(vcpu);
+               u64 invalid;
+
+               invalid = data & ~vmx_get_supported_debugctl(vcpu, msr_info->host_initiated);
                if (invalid & (DEBUGCTLMSR_BTF|DEBUGCTLMSR_LBR)) {
                        if (report_ignored_msrs)
                                vcpu_unimpl(vcpu, "%s: BTF|LBR in IA32_DEBUGCTLMSR 0x%llx, nop\n",