From: Avi Kivity <avi@redhat.com>
To: Joerg Roedel <joerg.roedel@amd.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH 0/9] KVM: Make the instruction emulator aware of Nested Virtualization
Date: Wed, 24 Nov 2010 21:13:32 +0200 [thread overview]
Message-ID: <4CED63DC.20608@redhat.com> (raw)
In-Reply-To: <1290622715-8382-1-git-send-email-joerg.roedel@amd.com>
On 11/24/2010 08:18 PM, Joerg Roedel wrote:
> Hi Avi, Hi Marcelo,
>
> here is a patch-set to make the instruction emulator aware of nested
> virtualization. It basically works by introducing a new callback into
> the x86_ops to check if a decoded instruction must be intercepted. If it
> is intercepted the instruction emulator returns straight into the guest.
>
> I am not entirely happy with this solution because it partially
> duplicates the code in the x86_emulate_insn function.
My big worry is that it makes svm.c aware of internal emulator variable,
so it makes it harder to hack on the emulator.
> But there are so
> many SVM specific cases that need to be taken care of that I consider
> this solution the better one (even when looking at the diff-stat).
> Keeping this (SVM-specific) complexity in the SVM specific code is
> better than extending the generic instruction emulator code path.
I don't think there's a problem with svm specific code in the emulator
for this. My reasoning is that there are two classes of svm code: the
common one is using svm to implement kvm, and the other one is emulating
the svm instruction set. Most of the current svm code belongs to the
first class, even the nested svm code. For example the code that
emulates VMRUN is kvm-specific, while the code that decides whether to
#GP on VMRUN or not is generic.
So I don't think there's a problem with coding the svm intercepts in
emulate.c. This is no different than emulating any AMD-specific
instruction in the emulator - we're emulating an instruction in exactly
the way it is specified in the manual.
Something you could do is allocate bits for the intercept bit number and
exit code in opcode->flags. This way most unconditional intercepts
happen outside the instruction switch: generic code reads the intercept
bit, the intercept word (via a callback), if the bit is set, returns the
exit code. That should completely kill the diffstat. We only need to
be careful wrt the order of the intercept check and the other permission
checks.
--
I have a truly marvellous patch that fixes the bug which this
signature is too narrow to contain.
next prev parent reply other threads:[~2010-11-24 19:13 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2010-11-24 18:18 [PATCH 0/9] KVM: Make the instruction emulator aware of Nested Virtualization Joerg Roedel
2010-11-24 18:18 ` [PATCH 1/9] KVM: Add infrastructure to emulate instruction intercepts Joerg Roedel
2010-11-24 18:18 ` [PATCH 2/9] KVM: SVM: Add checks for CRx read and write intercepts Joerg Roedel
2010-11-24 18:18 ` [PATCH 3/9] KVM: SVM: Add checks for DRx " Joerg Roedel
2010-11-24 18:18 ` [PATCH 4/9] KVM: SVM: Add intercept checks for descriptor table accesses Joerg Roedel
2010-11-24 18:18 ` [PATCH 5/9] KVM: SVM: Add checks for all group 7 instructions Joerg Roedel
2010-11-24 18:18 ` [PATCH 6/9] KVM: SVM: Add intercept checks for remaining twobyte instructions Joerg Roedel
2010-11-24 18:18 ` [PATCH 7/9] KVM: SVM: Add intercept checks for one-byte instructions Joerg Roedel
2010-11-24 18:18 ` [PATCH 8/9] KVM: SVM: Add checks for IO instructions Joerg Roedel
2010-11-24 18:18 ` [PATCH 9/9] KVM: SVM: Remove nested sel_cr0_write handling code Joerg Roedel
2010-11-24 19:13 ` Avi Kivity [this message]
2010-11-25 11:46 ` [PATCH 0/9] KVM: Make the instruction emulator aware of Nested Virtualization Roedel, Joerg
2010-11-25 13:13 ` Roedel, Joerg
2010-11-25 15:17 ` Avi Kivity
2010-11-25 16:23 ` Roedel, Joerg
2010-11-29 17:23 ` Valdis.Kletnieks
2010-11-29 18:32 ` Joerg Roedel
2010-11-29 20:01 ` Valdis.Kletnieks
2010-11-30 8:47 ` Roedel, Joerg
2010-11-25 15:15 ` Avi Kivity
2010-11-25 18:21 ` Roedel, Joerg
2010-11-26 8:28 ` 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=4CED63DC.20608@redhat.com \
--to=avi@redhat.com \
--cc=joerg.roedel@amd.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mtosatti@redhat.com \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox