From patchwork Mon Apr 13 09:55:36 2009 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Gleb Natapov X-Patchwork-Id: 17905 Received: from vger.kernel.org (vger.kernel.org [209.132.176.167]) by demeter.kernel.org (8.14.2/8.14.2) with ESMTP id n3D9tx7j005899 for ; Mon, 13 Apr 2009 09:56:00 GMT Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1755730AbZDMJz7 (ORCPT ); Mon, 13 Apr 2009 05:55:59 -0400 Received: (majordomo@vger.kernel.org) by vger.kernel.org id S1755719AbZDMJz6 (ORCPT ); Mon, 13 Apr 2009 05:55:58 -0400 Received: from mx2.redhat.com ([66.187.237.31]:57749 "EHLO mx2.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1755433AbZDMJzu (ORCPT ); Mon, 13 Apr 2009 05:55:50 -0400 Received: from int-mx2.corp.redhat.com (int-mx2.corp.redhat.com [172.16.27.26]) by mx2.redhat.com (8.13.8/8.13.8) with ESMTP id n3D9tnZG000521; Mon, 13 Apr 2009 05:55:49 -0400 Received: from ns3.rdu.redhat.com (ns3.rdu.redhat.com [10.11.255.199]) by int-mx2.corp.redhat.com (8.13.1/8.13.1) with ESMTP id n3D9to97026706; Mon, 13 Apr 2009 05:55:51 -0400 Received: from dhcp-1-237.tlv.redhat.com (dhcp-1-237.tlv.redhat.com [10.35.1.237]) by ns3.rdu.redhat.com (8.13.8/8.13.8) with ESMTP id n3D9tmvV001883; Mon, 13 Apr 2009 05:55:48 -0400 Received: by dhcp-1-237.tlv.redhat.com (Postfix, from userid 587) id 4D17E133667; Mon, 13 Apr 2009 12:55:45 +0300 (IDT) From: Gleb Natapov To: avi@redhat.com Cc: kvm@vger.kernel.org, joerg.roedel@amd.com, sheng@linux.intel.com, Gleb Natapov Subject: [PATCH 06/15] Use EVENTINJ to inject interrupts. Date: Mon, 13 Apr 2009 12:55:36 +0300 Message-Id: <1239616545-25199-7-git-send-email-gleb@redhat.com> In-Reply-To: <1239616545-25199-1-git-send-email-gleb@redhat.com> References: <1239616545-25199-1-git-send-email-gleb@redhat.com> X-Scanned-By: MIMEDefang 2.58 on 172.16.27.26 Sender: kvm-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: kvm@vger.kernel.org Use VINT only for detecting when IRQ windows is open again. Signed-off-by: Gleb Natapov --- arch/x86/kvm/svm.c | 12 +++++++++--- 1 files changed, 9 insertions(+), 3 deletions(-) diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c index 053370d..3b4c00f 100644 --- a/arch/x86/kvm/svm.c +++ b/arch/x86/kvm/svm.c @@ -2236,13 +2236,19 @@ static inline void svm_inject_irq(struct vcpu_svm *svm, int irq) ((/*control->int_vector >> 4*/ 0xf) << V_INTR_PRIO_SHIFT); } +static void svm_queue_irq(struct vcpu_svm *svm, unsigned nr) +{ + svm->vmcb->control.event_inj = nr | + SVM_EVTINJ_VALID | SVM_EVTINJ_TYPE_INTR; +} + static void svm_set_irq(struct kvm_vcpu *vcpu, int irq) { struct vcpu_svm *svm = to_svm(vcpu); nested_svm_intr(svm); - svm_inject_irq(svm, irq); + svm_queue_irq(svm, irq); } static void update_cr8_intercept(struct kvm_vcpu *vcpu) @@ -2285,7 +2291,7 @@ static void svm_intr_inject(struct kvm_vcpu *vcpu) { /* try to reinject previous events if any */ if (vcpu->arch.interrupt.pending) { - svm_inject_irq(to_svm(vcpu), vcpu->arch.interrupt.nr); + svm_queue_irq(to_svm(vcpu), vcpu->arch.interrupt.nr); return; } @@ -2293,7 +2299,7 @@ static void svm_intr_inject(struct kvm_vcpu *vcpu) if (kvm_cpu_has_interrupt(vcpu)) { if (vcpu->arch.interrupt_window_open) { kvm_queue_interrupt(vcpu, kvm_cpu_get_interrupt(vcpu)); - svm_inject_irq(to_svm(vcpu), vcpu->arch.interrupt.nr); + svm_queue_irq(to_svm(vcpu), vcpu->arch.interrupt.nr); } } }