]> git.proxmox.com Git - mirror_ubuntu-jammy-kernel.git/blobdiff - arch/x86/kvm/x86.c
KVM: x86: declare Xen HVM shared info capability and add test case
[mirror_ubuntu-jammy-kernel.git] / arch / x86 / kvm / x86.c
index a295fb8a897887464bbc9bc043d24154e3fcda24..838ce5e9814b3bbdcd4c42fbe5a4f5decd138b54 100644 (file)
@@ -2757,6 +2757,8 @@ static int kvm_guest_time_update(struct kvm_vcpu *v)
        if (vcpu->xen.vcpu_info_set)
                kvm_setup_pvclock_page(v, &vcpu->xen.vcpu_info_cache,
                                       offsetof(struct compat_vcpu_info, time));
+       if (vcpu->xen.vcpu_time_info_set)
+               kvm_setup_pvclock_page(v, &vcpu->xen.vcpu_time_info_cache, 0);
        if (v == kvm_get_vcpu(v->kvm, 0))
                kvm_hv_setup_tsc_page(v->kvm, &vcpu->hv_clock);
        return 0;
@@ -3767,7 +3769,8 @@ int kvm_vm_ioctl_check_extension(struct kvm *kvm, long ext)
                break;
        case KVM_CAP_XEN_HVM:
                r = KVM_XEN_HVM_CONFIG_HYPERCALL_MSR |
-                   KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL;
+                   KVM_XEN_HVM_CONFIG_INTERCEPT_HCALL |
+                   KVM_XEN_HVM_CONFIG_SHARED_INFO;
                break;
        case KVM_CAP_SYNC_REGS:
                r = KVM_SYNC_X86_VALID_FIELDS;
@@ -8985,7 +8988,8 @@ static int vcpu_enter_guest(struct kvm_vcpu *vcpu)
                        static_call(kvm_x86_msr_filter_changed)(vcpu);
        }
 
-       if (kvm_check_request(KVM_REQ_EVENT, vcpu) || req_int_win) {
+       if (kvm_check_request(KVM_REQ_EVENT, vcpu) || req_int_win ||
+           kvm_xen_has_interrupt(vcpu)) {
                ++vcpu->stat.req_event;
                kvm_apic_accept_events(vcpu);
                if (vcpu->arch.mp_state == KVM_MP_STATE_INIT_RECEIVED) {