From: Alexander Graf <agraf@suse.de>
To: kvm@vger.kernel.org
Cc: joro@8bytes.org, anthony@codemonkey.ws, avi@qumranet.com,
Alexander Graf <agraf@suse.de>
Subject: [PATCH 02/10] Clean up VINTR setting v4
Date: Wed, 15 Oct 2008 21:31:25 +0200 [thread overview]
Message-ID: <1224099093-10985-3-git-send-email-agraf@suse.de> (raw)
In-Reply-To: <1224099093-10985-2-git-send-email-agraf@suse.de>
The current VINTR intercept setters don't look clean to me. To make
the code easier to read and enable the possibilty to trap on a VINTR
set, this uses a helper function to set the VINTR intercept.
v2 uses two distinct functions for setting and clearing the bit
Signed-off-by: Alexander Graf <agraf@suse.de>
---
arch/x86/kvm/svm.c | 20 +++++++++++++++-----
1 files changed, 15 insertions(+), 5 deletions(-)
diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c
index 05efc4e..4ee5376 100644
--- a/arch/x86/kvm/svm.c
+++ b/arch/x86/kvm/svm.c
@@ -731,6 +731,16 @@ static void svm_set_rflags(struct kvm_vcpu *vcpu, unsigned long rflags)
to_svm(vcpu)->vmcb->save.rflags = rflags;
}
+static void svm_set_vintr(struct vcpu_svm *svm)
+{
+ svm->vmcb->control.intercept |= 1ULL << INTERCEPT_VINTR;
+}
+
+static void svm_clear_vintr(struct vcpu_svm *svm)
+{
+ svm->vmcb->control.intercept &= ~(1ULL << INTERCEPT_VINTR);
+}
+
static struct vmcb_seg *svm_seg(struct kvm_vcpu *vcpu, int seg)
{
struct vmcb_save_area *save = &to_svm(vcpu)->vmcb->save;
@@ -1376,7 +1386,7 @@ static int interrupt_window_interception(struct vcpu_svm *svm,
{
KVMTRACE_0D(PEND_INTR, &svm->vcpu, handler);
- svm->vmcb->control.intercept &= ~(1ULL << INTERCEPT_VINTR);
+ svm_clear_vintr(svm);
svm->vmcb->control.int_ctl &= ~V_IRQ_MASK;
/*
* If the user space waits to inject interrupts, exit as soon as
@@ -1589,7 +1599,7 @@ static void svm_intr_assist(struct kvm_vcpu *vcpu)
(vmcb->control.int_state & SVM_INTERRUPT_SHADOW_MASK) ||
(vmcb->control.event_inj & SVM_EVTINJ_VALID)) {
/* unable to deliver irq, set pending irq */
- vmcb->control.intercept |= (1ULL << INTERCEPT_VINTR);
+ svm_set_vintr(svm);
svm_inject_irq(svm, 0x0);
goto out;
}
@@ -1649,9 +1659,9 @@ static void do_interrupt_requests(struct kvm_vcpu *vcpu,
*/
if (!svm->vcpu.arch.interrupt_window_open &&
(svm->vcpu.arch.irq_summary || kvm_run->request_interrupt_window))
- control->intercept |= 1ULL << INTERCEPT_VINTR;
- else
- control->intercept &= ~(1ULL << INTERCEPT_VINTR);
+ svm_set_vintr(svm);
+ else
+ svm_clear_vintr(svm);
}
static int svm_set_tss_addr(struct kvm *kvm, unsigned int addr)
--
1.5.6
next prev parent reply other threads:[~2008-10-15 19:29 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-10-15 19:31 [PATCH 00/10] Add support for nested SVM (kernel) v4 Alexander Graf
2008-10-15 19:31 ` [PATCH 01/10] Add CPUID feature flag for SVM v4 Alexander Graf
2008-10-15 19:31 ` Alexander Graf [this message]
2008-10-15 19:31 ` [PATCH 03/10] Add helper functions for nested " Alexander Graf
2008-10-15 19:31 ` [PATCH 04/10] Implement GIF, clgi and stgi v4 Alexander Graf
2008-10-15 19:31 ` [PATCH 05/10] Implement hsave v4 Alexander Graf
2008-10-15 19:31 ` [PATCH 06/10] Add VMLOAD and VMSAVE handlers v4 Alexander Graf
2008-10-15 19:31 ` [PATCH 07/10] Add VMRUN handler v4 Alexander Graf
2008-10-15 19:31 ` [PATCH 08/10] Add VMEXIT handler and intercepts v4 Alexander Graf
2008-10-15 19:31 ` [PATCH 09/10] allow read access to MSR_VM_VR Alexander Graf
2008-10-15 19:31 ` [PATCH 10/10] Allow setting the SVME bit v4 Alexander Graf
2008-10-19 9:51 ` [PATCH 07/10] Add VMRUN handler v4 Avi Kivity
2008-10-19 9:58 ` Alexander Graf
2008-10-19 10:06 ` Avi Kivity
2008-10-19 10:13 ` Alexander Graf
2008-10-19 10:27 ` Avi Kivity
2008-10-19 10:33 ` Alexander Graf
2008-10-19 10:54 ` Avi Kivity
2008-10-19 9:46 ` [PATCH 04/10] Implement GIF, clgi and stgi v4 Avi Kivity
2008-10-19 9:57 ` Alexander Graf
2008-10-19 10:04 ` Avi Kivity
2008-10-16 11:25 ` [PATCH 01/10] Add CPUID feature flag for SVM v4 Alexander Graf
2008-10-19 9:56 ` [PATCH 00/10] Add support for nested SVM (kernel) v4 Avi Kivity
2008-10-19 10:01 ` Alexander Graf
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1224099093-10985-3-git-send-email-agraf@suse.de \
--to=agraf@suse.de \
--cc=anthony@codemonkey.ws \
--cc=avi@qumranet.com \
--cc=joro@8bytes.org \
--cc=kvm@vger.kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.