From: Avi Kivity <avi@qumranet.com>
To: Anthony Liguori <aliguori@us.ibm.com>
Cc: kvm-devel@lists.sourceforge.net, Ingo Molnar <mingo@elte.hu>,
Dor Laor <dor.laor@qumranet.com>,
Rusty Russell <rusty@rustcorp.com.au>,
linux-kernel@vger.kernel.org, Zachary Amsden <zach@vmware.com>,
Jeremy Fitzhardinge <jeremy@goop.org>,
Muli Ben-Yehuda <muli@il.ibm.com>
Subject: Re: [PATCH] Refactor hypercall infrastructure (v2)
Date: Sun, 16 Sep 2007 11:08:24 +0200 [thread overview]
Message-ID: <46ECF288.9080709@qumranet.com> (raw)
In-Reply-To: <11898788932902-git-send-email-aliguori@us.ibm.com>
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.
>
> It also introduces the infrastructure to probe for hypercall available via
> CPUID leaves 0x40001000. CPUID leaf 0x40001001 should be filled out by
> userspace.
>
> A fall-out of this patch is that the unhandled hypercalls no longer trap to
> userspace. There is very little reason though to use a hypercall to communicate
> with userspace as PIO or MMIO can be used. There is no code in tree that uses
> userspace hypercalls.
>
> Since the last patchset, I've changed the CPUID leaves to better avoid Xen's
> CPUID range and fixed a bug spotted by Muli in masking off hypercall arguments.
>
> Signed-off-by: Anthony Liguori <aliguori@us.ibm.com>
>
> @@ -1721,6 +1657,18 @@ void kvm_emulate_cpuid(struct kvm_vcpu *vcpu)
> vcpu->regs[VCPU_REGS_RBX] = 0;
> vcpu->regs[VCPU_REGS_RCX] = 0;
> vcpu->regs[VCPU_REGS_RDX] = 0;
> +
> + if (function == KVM_CPUID_SIGNATURE) {
> + u32 signature[3];
> +
> + memcpy(signature, "LinuxPVLinux", 12);
> + vcpu->regs[VCPU_REGS_RAX] = 0;
> + vcpu->regs[VCPU_REGS_RBX] = signature[0];
> + vcpu->regs[VCPU_REGS_RCX] = signature[1];
> + vcpu->regs[VCPU_REGS_RDX] = signature[2];
> + goto out;
> + }
> +
>
This needs to be done from userspace, so that kvm can pretend not to
have this leaf.
(I have no objection to our userspace doing it unconditionally; but I
don't want to force it on others)
Also, the signature string is too generic.
> diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c
> index 18c2b2c..1362082 100644
> --- a/drivers/kvm/x86_emulate.c
> +++ b/drivers/kvm/x86_emulate.c
>
Please split out the emulator changes.
> - *
> - * 64-bit parameters 1-6 are in the standard gcc x86_64 calling convention
> - * order: RDI, RSI, RDX, RCX, R8, R9.
> - *
> - * 32-bit index is EBX, parameters are: EAX, ECX, EDX, ESI, EDI, EBP.
> - * (the first 3 are according to the gcc regparm calling convention)
>
Please document the new ABI.
--
error compiling committee.c: too many arguments to function
WARNING: multiple messages have this Message-ID (diff)
From: Avi Kivity <avi-atKUWr5tajBWk0Htik3J/w@public.gmane.org>
To: Anthony Liguori <aliguori-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
Cc: Zachary Amsden <zach-pghWNbHTmq7QT0dZR+AlfA@public.gmane.org>,
Jeremy Fitzhardinge <jeremy-TSDbQ3PG+2Y@public.gmane.org>,
kvm-devel-5NWGOfrQmneRv+LV9MX5uipxlwaOVQ5f@public.gmane.org,
linux-kernel-u79uwXL29TY76Z2rM5mHXA@public.gmane.org
Subject: Re: [PATCH] Refactor hypercall infrastructure (v2)
Date: Sun, 16 Sep 2007 11:08:24 +0200 [thread overview]
Message-ID: <46ECF288.9080709@qumranet.com> (raw)
In-Reply-To: <11898788932902-git-send-email-aliguori-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
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.
>
> It also introduces the infrastructure to probe for hypercall available via
> CPUID leaves 0x40001000. CPUID leaf 0x40001001 should be filled out by
> userspace.
>
> A fall-out of this patch is that the unhandled hypercalls no longer trap to
> userspace. There is very little reason though to use a hypercall to communicate
> with userspace as PIO or MMIO can be used. There is no code in tree that uses
> userspace hypercalls.
>
> Since the last patchset, I've changed the CPUID leaves to better avoid Xen's
> CPUID range and fixed a bug spotted by Muli in masking off hypercall arguments.
>
> Signed-off-by: Anthony Liguori <aliguori-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
>
> @@ -1721,6 +1657,18 @@ void kvm_emulate_cpuid(struct kvm_vcpu *vcpu)
> vcpu->regs[VCPU_REGS_RBX] = 0;
> vcpu->regs[VCPU_REGS_RCX] = 0;
> vcpu->regs[VCPU_REGS_RDX] = 0;
> +
> + if (function == KVM_CPUID_SIGNATURE) {
> + u32 signature[3];
> +
> + memcpy(signature, "LinuxPVLinux", 12);
> + vcpu->regs[VCPU_REGS_RAX] = 0;
> + vcpu->regs[VCPU_REGS_RBX] = signature[0];
> + vcpu->regs[VCPU_REGS_RCX] = signature[1];
> + vcpu->regs[VCPU_REGS_RDX] = signature[2];
> + goto out;
> + }
> +
>
This needs to be done from userspace, so that kvm can pretend not to
have this leaf.
(I have no objection to our userspace doing it unconditionally; but I
don't want to force it on others)
Also, the signature string is too generic.
> diff --git a/drivers/kvm/x86_emulate.c b/drivers/kvm/x86_emulate.c
> index 18c2b2c..1362082 100644
> --- a/drivers/kvm/x86_emulate.c
> +++ b/drivers/kvm/x86_emulate.c
>
Please split out the emulator changes.
> - *
> - * 64-bit parameters 1-6 are in the standard gcc x86_64 calling convention
> - * order: RDI, RSI, RDX, RCX, R8, R9.
> - *
> - * 32-bit index is EBX, parameters are: EAX, ECX, EDX, ESI, EDI, EBP.
> - * (the first 3 are according to the gcc regparm calling convention)
>
Please document the new ABI.
--
error compiling committee.c: too many arguments to function
-------------------------------------------------------------------------
This SF.net email is sponsored by: Microsoft
Defy all challenges. Microsoft(R) Visual Studio 2005.
http://clk.atdmt.com/MRT/go/vse0120000070mrt/direct/01/
next prev parent reply other threads:[~2007-09-16 9:08 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-09-15 17:54 [PATCH] Refactor hypercall infrastructure (v2) Anthony Liguori
[not found] ` <11898788932902-git-send-email-aliguori-r/Jw6+rmf7HQT0dZR+AlfA@public.gmane.org>
2007-09-15 17:54 ` [PATCH] Add the paravirtualization CPUID entry to QEMU (v2) Anthony Liguori
2007-09-16 9:08 ` Avi Kivity [this message]
2007-09-16 9:08 ` [PATCH] Refactor hypercall infrastructure (v2) Avi Kivity
2007-12-02 13:47 ` [kvm-devel] " Amit Shah
2007-12-02 13:47 ` Amit Shah
2007-12-02 14:32 ` [kvm-devel] " Avi Kivity
2007-12-02 14:32 ` Avi Kivity
2007-12-02 23:03 ` [kvm-devel] " Anthony Liguori
2007-12-02 23:03 ` Anthony Liguori
2007-12-03 8:46 ` [kvm-devel] " Amit Shah
2007-12-03 8:46 ` Amit Shah
2007-12-03 9:00 ` [kvm-devel] " Avi Kivity
2007-12-03 9:00 ` Avi Kivity
2007-12-03 11:30 ` [kvm-devel] " Amit Shah
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=46ECF288.9080709@qumranet.com \
--to=avi@qumranet.com \
--cc=aliguori@us.ibm.com \
--cc=dor.laor@qumranet.com \
--cc=jeremy@goop.org \
--cc=kvm-devel@lists.sourceforge.net \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=muli@il.ibm.com \
--cc=rusty@rustcorp.com.au \
--cc=zach@vmware.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 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.