From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH 2/2] Interrupt unhalts vcpu when it shouldn't Date: Mon, 23 Mar 2009 17:17:42 +0200 Message-ID: <49C7A816.2090605@redhat.com> References: <20090323101205.25798.69237.stgit@dhcp-1-237.tlv.redhat.com> <20090323101211.25798.89641.stgit@dhcp-1-237.tlv.redhat.com> <49C79D40.4000101@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit Cc: kvm@vger.kernel.org, Marcelo Tosatti , Sheng Yang To: Gleb Natapov Return-path: Received: from mx2.redhat.com ([66.187.237.31]:35638 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751779AbZCWPRp (ORCPT ); Mon, 23 Mar 2009 11:17:45 -0400 In-Reply-To: <49C79D40.4000101@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: Avi Kivity wrote: > Gleb Natapov wrote: >> kvm_vcpu_block() unhalts vpu on an interrupt/timer without checking >> if interrupt window is actually opened. >> >> >> +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 int vmx_interrupt_allowed(struct kvm_vcpu *vcpu) >> +{ >> + vmx_update_window_states(vcpu); >> + return vcpu->arch.interrupt_window_open; >> +} >> + >> static void kvm_do_inject_irq(struct kvm_vcpu *vcpu) >> } >> + >> +int kvm_arch_interrupt_allowed(struct kvm_vcpu *vcpu) >> +{ >> + return kvm_x86_ops->interrupt_allowed(vcpu); >> +} >> > > If the guest enables interrupts but sets tpr/cr8 to block interrupts, > we'll spin (like we do now). > > So I think this should be called kvm_arch_can_accept_interrupt() and > take tpr into account. > kvm_cpu_has_interrupt() takes the tpr into account, so we're okay here. Marcelo, Sheng? -- error compiling committee.c: too many arguments to function