From: Avi Kivity <avi@qumranet.com>
To: Amit Shah <amit.shah@qumranet.com>
Cc: kvm-devel@lists.sourceforge.net,
Anthony Liguori <aliguori@us.ibm.com>,
linux-kernel@vger.kernel.org
Subject: Re: [kvm-devel] [PATCH] Refactor hypercall infrastructure (v2)
Date: Mon, 03 Dec 2007 11:00:10 +0200 [thread overview]
Message-ID: <4753C59A.4030206@qumranet.com> (raw)
In-Reply-To: <200712031416.51710.amit.shah@qumranet.com>
Amit Shah wrote:
> * Anthony Liguori wrote:
>
>> Amit Shah wrote:
>>
>>> * Anthony Liguori wrote:
>>>
>>>
>>>
>>>> This patch refactors the current hypercall infrastructure to better
>>>> support live migration and SMP. It eliminates the hypercall page by
>>>> trapping the UD exception that would occur if you used the wrong
>>>> hypercall instruction for the underlying architecture and replacing it
>>>> with the right one lazily.
>>>>
>>> This doesn't work right for SVM. It keeps looping indefinitely; on a
>>> kvm_stat run, I get about 230,000 light vm exits per second, with the
>>> hypercall never returning to the guest.
>>>
>>> ...
>>>
>>>
>> What are you using to issue the hypercall?
>>
>
> + r = kvm_hypercall1(KVM_PV_PCI_DEVICE, page_gfn);
>
> Setup is done by:
>
> + if (!kvm_para_available()) {
> + printk(KERN_ERR "KVM paravirt support not available\n");
> + r = -ENODEV;
> + goto out_dereg;
> + }
>
There was a bug where instructions with a modrm byte specifying a
register would try to access memory. In the memory was not mapped,
emulation would fail. vmcall is one such instruction. This was fixed by
commit f83562246921d6a8a7de8b76853a6835ace3699d
Author: Aurelien Jarno <aurelien@aurel32.net>
Date: Wed Oct 17 19:30:41 2007 +0200
KVM: x86 emulator: fix access registers for instructions with ModR/M
byte and Mod = 3
The patch belows changes the access type to register from memory for
instructions that are declared as SrcMem or DstMem, but have a
ModR/M byte with Mod = 3.
It fixes (at least) the lmsw and smsw instructions on an AMD64 CPU,
which are needed for FreeBSD.
Signed-off-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Avi Kivity <avi@qumranet.com>
diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c
index 7c95ae5..8c50496 100644
--- a/drivers/kvm/x86_emulate.c
+++ b/drivers/kvm/x86_emulate.c
@@ -835,6 +835,14 @@ modrm_done:
if (c->twobyte && c->b == 0x01
&& c->modrm_reg == 7)
break;
+ /*
+ * For instructions with a ModR/M byte, switch to register
+ * access if Mod = 3.
+ */
+ if ((c->d & ModRM) && c->modrm_mod == 3) {
+ c->src.type = OP_REG;
+ break;
+ }
srcmem_common:
c->src.type = OP_MEM;
break;
@@ -897,7 +905,14 @@ srcmem_common:
}
break;
case DstMem:
- c->dst.type = OP_MEM;
+ /*
+ * For instructions with a ModR/M byte, switch to register
+ * access if Mod = 3.
+ */
+ if ((c->d & ModRM) && c->modrm_mod == 3)
+ c->dst.type = OP_REG;
+ else
+ c->dst.type = OP_MEM;
break;
}
--
error compiling committee.c: too many arguments to function
next prev parent reply other threads:[~2007-12-03 8:57 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-15 17:54 [PATCH] Refactor hypercall infrastructure (v2) Anthony Liguori
2007-09-16 9:08 ` Avi Kivity
2007-12-02 13:47 ` [kvm-devel] " Amit Shah
2007-12-02 14:32 ` Avi Kivity
2007-12-02 23:03 ` Anthony Liguori
2007-12-03 8:46 ` Amit Shah
2007-12-03 9:00 ` Avi Kivity [this message]
2007-12-03 11:30 ` Amit Shah
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=4753C59A.4030206@qumranet.com \
--to=avi@qumranet.com \
--cc=aliguori@us.ibm.com \
--cc=amit.shah@qumranet.com \
--cc=kvm-devel@lists.sourceforge.net \
--cc=linux-kernel@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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox