From: Avi Kivity <avi@qumranet.com>
To: Alexander Graf <agraf@suse.de>
Cc: kvm@vger.kernel.org, joro@8bytes.org, anthony@codemonkey.ws
Subject: Re: [PATCH 9/9] Add VMEXIT handler and intercepts
Date: Mon, 01 Sep 2008 16:58:41 +0300 [thread overview]
Message-ID: <48BBF511.5070803@qumranet.com> (raw)
In-Reply-To: <1220270281-15720-10-git-send-email-agraf@suse.de>
Alexander Graf wrote:
> This adds the #VMEXIT intercept, so we return to the level 1 guest
> when something happens in the level 2 guest that should return to
> the level 1 guest.
>
> @@ -223,6 +228,21 @@ static void svm_queue_exception(struct kvm_vcpu *vcpu, unsigned nr,
> {
> struct vcpu_svm *svm = to_svm(vcpu);
>
> + /* If we are within a nested VM we'd better #VMEXIT and let the
> + guest handle the exception */
> + if (is_nested(svm)) {
> + svm->vmcb->control.exit_code = SVM_EXIT_EXCP_BASE + nr;
> + svm->vmcb->control.exit_code_hi = 0;
> + svm->vmcb->control.exit_info_1 = error_code;
> + svm->vmcb->control.exit_info_2 = svm->vcpu.arch.cr2;
>
#vmexit isn't supposed to modify cr2, but we've corrupted it here.
> + if (nested_svm_exit_handled(svm, false)) {
> + nsvm_printk("VMexit -> EXCP 0x%x\n", nr);
> +
> + nested_svm_vmexit(svm);
> + return;
> + }
> + }
> +
>
Please move the entire block into a separate function.
> +static int nested_svm_vmexit_real(struct vcpu_svm *svm, void *arg1,
> + void *arg2, void *opaque)
> +{
> + struct vmcb *nested_vmcb = (struct vmcb *)arg1;
> + struct vmcb *hsave = (struct vmcb *)arg2;
> + u64 nested_save[] = { nested_vmcb->save.cr0,
> + nested_vmcb->save.cr3,
> + nested_vmcb->save.cr4,
> + nested_vmcb->save.efer,
> + nested_vmcb->control.intercept_cr_read,
> + nested_vmcb->control.intercept_cr_write,
> + nested_vmcb->control.intercept_dr_read,
> + nested_vmcb->control.intercept_dr_write,
> + nested_vmcb->control.intercept_exceptions,
> + nested_vmcb->control.intercept,
> + nested_vmcb->control.msrpm_base_pa,
> + nested_vmcb->control.iopm_base_pa,
> + nested_vmcb->control.tsc_offset };
> +
> + /* Give the current vmcb to the guest */
> + memcpy(nested_vmcb, svm->vmcb, sizeof(struct vmcb));
> + nested_vmcb->save.cr0 = nested_save[0];
> + if (!npt_enabled)
> + nested_vmcb->save.cr3 = nested_save[1];
> + nested_vmcb->save.cr4 = nested_save[2];
> + nested_vmcb->save.efer = nested_save[3];
> + nested_vmcb->control.intercept_cr_read = nested_save[4];
> + nested_vmcb->control.intercept_cr_write = nested_save[5];
> + nested_vmcb->control.intercept_dr_read = nested_save[6];
> + nested_vmcb->control.intercept_dr_write = nested_save[7];
> + nested_vmcb->control.intercept_exceptions = nested_save[8];
> + nested_vmcb->control.intercept = nested_save[9];
> + nested_vmcb->control.msrpm_base_pa = nested_save[10];
> + nested_vmcb->control.iopm_base_pa = nested_save[11];
> + nested_vmcb->control.tsc_offset = nested_save[12];
> +
> + if ((nested_vmcb->control.int_ctl & V_IRQ_MASK) &&
> + (nested_vmcb->control.int_vector)) {
> + nsvm_printk("WARNING: IRQ 0x%x still enabled on #VMEXIT\n",
> + nested_vmcb->control.int_vector);
> + }
> +
> + /* Restore the original control entries */
> + memcpy(&svm->vmcb->control, &hsave->control,
> + sizeof(struct vmcb_control_area));
> + force_new_asid(&svm->vcpu);
> + /* Kill any pending exceptions */
> + if (svm->vcpu.arch.exception.pending == true)
> + nsvm_printk("WARNING: Pending Exception\n");
>
This should set control.exit_int_info.
--
error compiling committee.c: too many arguments to function
next prev parent reply other threads:[~2008-09-01 13:58 UTC|newest]
Thread overview: 44+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-09-01 11:57 [PATCH 0/9] [RFC] Add support for nested SVM (kernel) Alexander Graf
2008-09-01 11:57 ` [PATCH 1/9] Add CPUID feature flag for SVM Alexander Graf
2008-09-01 11:57 ` [PATCH 2/9] Clean up VINTR setting Alexander Graf
2008-09-01 11:57 ` [PATCH 3/9] Implement GIF, clgi and stgi Alexander Graf
2008-09-01 11:57 ` [PATCH 4/9] Add helper functions for nested SVM Alexander Graf
2008-09-01 11:57 ` [PATCH 5/9] Allow setting the SVME bit Alexander Graf
2008-09-01 11:57 ` [PATCH 6/9] Implement hsave Alexander Graf
2008-09-01 11:57 ` [PATCH 7/9] Add VMLOAD and VMSAVE handlers Alexander Graf
2008-09-01 11:58 ` [PATCH 8/9] Add VMRUN handler Alexander Graf
2008-09-01 11:58 ` [PATCH 9/9] Add VMEXIT handler and intercepts Alexander Graf
2008-09-01 13:58 ` Avi Kivity [this message]
2008-09-02 16:15 ` Alexander Graf
2008-09-03 9:23 ` Avi Kivity
2008-09-03 9:33 ` Alexander Graf
2008-09-03 9:47 ` Avi Kivity
2008-09-03 11:55 ` Alexander Graf
2008-09-01 13:41 ` [PATCH 8/9] Add VMRUN handler Avi Kivity
2008-09-02 15:38 ` Alexander Graf
2008-09-01 13:27 ` [PATCH 7/9] Add VMLOAD and VMSAVE handlers Avi Kivity
2008-09-01 14:14 ` Alexander Graf
2008-09-01 14:27 ` Avi Kivity
2008-09-01 14:49 ` Alexander Graf
2008-09-01 13:15 ` [PATCH 6/9] Implement hsave Avi Kivity
2008-09-01 14:11 ` Alexander Graf
2008-09-01 14:26 ` Avi Kivity
2008-09-01 13:21 ` Avi Kivity
2008-09-01 13:14 ` [PATCH 5/9] Allow setting the SVME bit Avi Kivity
2008-09-01 13:11 ` [PATCH 3/9] Implement GIF, clgi and stgi Avi Kivity
2008-09-01 14:02 ` Alexander Graf
2008-09-01 14:25 ` Avi Kivity
2008-09-01 15:37 ` Alexander Graf
2008-09-01 16:05 ` Avi Kivity
2008-09-01 16:13 ` Alexander Graf
2008-09-01 16:17 ` Avi Kivity
2008-09-01 16:40 ` Alexander Graf
2008-09-02 9:15 ` Avi Kivity
2008-09-01 13:13 ` [PATCH 2/9] Clean up VINTR setting Avi Kivity
2008-09-01 12:09 ` [PATCH 0/9] [RFC] Add support for nested SVM (kernel) Avi Kivity
2008-09-01 12:21 ` Joerg Roedel
2008-09-01 13:41 ` Daniel P. Berrange
2008-09-01 14:17 ` Alexander Graf
2008-09-01 14:22 ` Avi Kivity
2008-09-01 14:47 ` Alexander Graf
2008-09-01 14:57 ` Avi Kivity
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=48BBF511.5070803@qumranet.com \
--to=avi@qumranet.com \
--cc=agraf@suse.de \
--cc=anthony@codemonkey.ws \
--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.