Loading arch/ia64/kvm/kvm-ia64.c +6 −0 Original line number Diff line number Diff line Loading @@ -1963,6 +1963,12 @@ int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu) return 0; } int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu) { /* do real check here */ return 1; } int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) { return vcpu->arch.timer_fired; Loading arch/powerpc/kvm/powerpc.c +6 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,12 @@ int kvm_cpu_has_interrupt(struct kvm_vcpu *v) return !!(v->arch.pending_exceptions); } int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu) { /* do real check here */ return 1; } int kvm_arch_vcpu_runnable(struct kvm_vcpu *v) { return !(v->arch.msr & MSR_WE); Loading arch/s390/kvm/interrupt.c +6 −0 Original line number Diff line number Diff line Loading @@ -318,6 +318,12 @@ int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu) return rc; } int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu) { /* do real check here */ return 1; } int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) { return 0; Loading arch/x86/include/asm/kvm_host.h +1 −1 Original line number Diff line number Diff line Loading @@ -521,7 +521,7 @@ struct kvm_x86_ops { void (*inject_pending_irq)(struct kvm_vcpu *vcpu); void (*inject_pending_vectors)(struct kvm_vcpu *vcpu, struct kvm_run *run); int (*interrupt_allowed)(struct kvm_vcpu *vcpu); int (*set_tss_addr)(struct kvm *kvm, unsigned int addr); int (*get_tdp_level)(void); int (*get_mt_mask_shift)(void); Loading arch/x86/kvm/svm.c +10 −0 Original line number Diff line number Diff line Loading @@ -2270,6 +2270,15 @@ static void update_cr8_intercept(struct kvm_vcpu *vcpu) vmcb->control.intercept_cr_write |= INTERCEPT_CR8_MASK; } static int svm_interrupt_allowed(struct kvm_vcpu *vcpu) { struct vcpu_svm *svm = to_svm(vcpu); struct vmcb *vmcb = svm->vmcb; return (vmcb->save.rflags & X86_EFLAGS_IF) && !(vmcb->control.int_state & SVM_INTERRUPT_SHADOW_MASK) && (svm->vcpu.arch.hflags & HF_GIF_MASK); } static void svm_intr_assist(struct kvm_vcpu *vcpu) { struct vcpu_svm *svm = to_svm(vcpu); Loading Loading @@ -2649,6 +2658,7 @@ static struct kvm_x86_ops svm_x86_ops = { .exception_injected = svm_exception_injected, .inject_pending_irq = svm_intr_assist, .inject_pending_vectors = do_interrupt_requests, .interrupt_allowed = svm_interrupt_allowed, .set_tss_addr = svm_set_tss_addr, .get_tdp_level = get_npt_level, Loading Loading
arch/ia64/kvm/kvm-ia64.c +6 −0 Original line number Diff line number Diff line Loading @@ -1963,6 +1963,12 @@ int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu) return 0; } int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu) { /* do real check here */ return 1; } int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) { return vcpu->arch.timer_fired; Loading
arch/powerpc/kvm/powerpc.c +6 −0 Original line number Diff line number Diff line Loading @@ -41,6 +41,12 @@ int kvm_cpu_has_interrupt(struct kvm_vcpu *v) return !!(v->arch.pending_exceptions); } int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu) { /* do real check here */ return 1; } int kvm_arch_vcpu_runnable(struct kvm_vcpu *v) { return !(v->arch.msr & MSR_WE); Loading
arch/s390/kvm/interrupt.c +6 −0 Original line number Diff line number Diff line Loading @@ -318,6 +318,12 @@ int kvm_cpu_has_interrupt(struct kvm_vcpu *vcpu) return rc; } int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu) { /* do real check here */ return 1; } int kvm_cpu_has_pending_timer(struct kvm_vcpu *vcpu) { return 0; Loading
arch/x86/include/asm/kvm_host.h +1 −1 Original line number Diff line number Diff line Loading @@ -521,7 +521,7 @@ struct kvm_x86_ops { void (*inject_pending_irq)(struct kvm_vcpu *vcpu); void (*inject_pending_vectors)(struct kvm_vcpu *vcpu, struct kvm_run *run); int (*interrupt_allowed)(struct kvm_vcpu *vcpu); int (*set_tss_addr)(struct kvm *kvm, unsigned int addr); int (*get_tdp_level)(void); int (*get_mt_mask_shift)(void); Loading
arch/x86/kvm/svm.c +10 −0 Original line number Diff line number Diff line Loading @@ -2270,6 +2270,15 @@ static void update_cr8_intercept(struct kvm_vcpu *vcpu) vmcb->control.intercept_cr_write |= INTERCEPT_CR8_MASK; } static int svm_interrupt_allowed(struct kvm_vcpu *vcpu) { struct vcpu_svm *svm = to_svm(vcpu); struct vmcb *vmcb = svm->vmcb; return (vmcb->save.rflags & X86_EFLAGS_IF) && !(vmcb->control.int_state & SVM_INTERRUPT_SHADOW_MASK) && (svm->vcpu.arch.hflags & HF_GIF_MASK); } static void svm_intr_assist(struct kvm_vcpu *vcpu) { struct vcpu_svm *svm = to_svm(vcpu); Loading Loading @@ -2649,6 +2658,7 @@ static struct kvm_x86_ops svm_x86_ops = { .exception_injected = svm_exception_injected, .inject_pending_irq = svm_intr_assist, .inject_pending_vectors = do_interrupt_requests, .interrupt_allowed = svm_interrupt_allowed, .set_tss_addr = svm_set_tss_addr, .get_tdp_level = get_npt_level, Loading