All of lore.kernel.org
 help / color / mirror / Atom feed
From: Anthony Liguori <anthony@codemonkey.ws>
To: Avi Kivity <avi@redhat.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
	kvm@vger.kernel.org, qemu-devel@nongnu.org
Subject: Re: [Qemu-devel] [PATCH] i386: derive '-cpu host' from KVM_GET_SUPPORTED_CPUID
Date: Wed, 09 Nov 2011 11:56:20 -0600	[thread overview]
Message-ID: <4EBABEC4.2080303@codemonkey.ws> (raw)
In-Reply-To: <1320846276-19659-1-git-send-email-avi@redhat.com>

On 11/09/2011 07:44 AM, Avi Kivity wrote:
> The fact that a host cpu supports a feature doesn't mean that QEMU and KVM
> will also support it, yet -cpuid host brings host features wholesale.
>
> We need to whitelist each feature separately to make sure we support it.
> This patch adds KVM whitelisting (by simply using KVM_GET_SUPPORTED_CPUID
> instead of the CPUID instruction).
>
> Signed-off-by: Avi Kivity<avi@redhat.com>

This seems like a 1.0 candidate, yes?

Regards,

Anthony Liguori

> ---
>   target-i386/cpuid.c |   27 ++++-----------------------
>   1 files changed, 4 insertions(+), 23 deletions(-)
>
> diff --git a/target-i386/cpuid.c b/target-i386/cpuid.c
> index 1e8bcff..edac377 100644
> --- a/target-i386/cpuid.c
> +++ b/target-i386/cpuid.c
> @@ -107,33 +107,14 @@ void host_cpuid(uint32_t function, uint32_t count,
>                   uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx)
>   {
>   #if defined(CONFIG_KVM)
> -    uint32_t vec[4];
> -
> -#ifdef __x86_64__
> -    asm volatile("cpuid"
> -                 : "=a"(vec[0]), "=b"(vec[1]),
> -                   "=c"(vec[2]), "=d"(vec[3])
> -                 : "0"(function), "c"(count) : "cc");
> -#else
> -    asm volatile("pusha \n\t"
> -                 "cpuid \n\t"
> -                 "mov %%eax, 0(%2) \n\t"
> -                 "mov %%ebx, 4(%2) \n\t"
> -                 "mov %%ecx, 8(%2) \n\t"
> -                 "mov %%edx, 12(%2) \n\t"
> -                 "popa"
> -                 : : "a"(function), "c"(count), "S"(vec)
> -                 : "memory", "cc");
> -#endif
> -
>       if (eax)
> -        *eax = vec[0];
> +        *eax = kvm_arch_get_supported_cpuid(kvm_state, function, count, R_EAX);
>       if (ebx)
> -        *ebx = vec[1];
> +        *ebx = kvm_arch_get_supported_cpuid(kvm_state, function, count, R_EBX);
>       if (ecx)
> -        *ecx = vec[2];
> +        *ecx = kvm_arch_get_supported_cpuid(kvm_state, function, count, R_ECX);
>       if (edx)
> -        *edx = vec[3];
> +        *edx = kvm_arch_get_supported_cpuid(kvm_state, function, count, R_EDX);
>   #endif
>   }
>


WARNING: multiple messages have this Message-ID (diff)
From: Anthony Liguori <anthony@codemonkey.ws>
To: Avi Kivity <avi@redhat.com>
Cc: Marcelo Tosatti <mtosatti@redhat.com>,
	qemu-devel@nongnu.org, kvm@vger.kernel.org
Subject: Re: [Qemu-devel] [PATCH] i386: derive '-cpu host' from KVM_GET_SUPPORTED_CPUID
Date: Wed, 09 Nov 2011 11:56:20 -0600	[thread overview]
Message-ID: <4EBABEC4.2080303@codemonkey.ws> (raw)
In-Reply-To: <1320846276-19659-1-git-send-email-avi@redhat.com>

On 11/09/2011 07:44 AM, Avi Kivity wrote:
> The fact that a host cpu supports a feature doesn't mean that QEMU and KVM
> will also support it, yet -cpuid host brings host features wholesale.
>
> We need to whitelist each feature separately to make sure we support it.
> This patch adds KVM whitelisting (by simply using KVM_GET_SUPPORTED_CPUID
> instead of the CPUID instruction).
>
> Signed-off-by: Avi Kivity<avi@redhat.com>

This seems like a 1.0 candidate, yes?

Regards,

Anthony Liguori

> ---
>   target-i386/cpuid.c |   27 ++++-----------------------
>   1 files changed, 4 insertions(+), 23 deletions(-)
>
> diff --git a/target-i386/cpuid.c b/target-i386/cpuid.c
> index 1e8bcff..edac377 100644
> --- a/target-i386/cpuid.c
> +++ b/target-i386/cpuid.c
> @@ -107,33 +107,14 @@ void host_cpuid(uint32_t function, uint32_t count,
>                   uint32_t *eax, uint32_t *ebx, uint32_t *ecx, uint32_t *edx)
>   {
>   #if defined(CONFIG_KVM)
> -    uint32_t vec[4];
> -
> -#ifdef __x86_64__
> -    asm volatile("cpuid"
> -                 : "=a"(vec[0]), "=b"(vec[1]),
> -                   "=c"(vec[2]), "=d"(vec[3])
> -                 : "0"(function), "c"(count) : "cc");
> -#else
> -    asm volatile("pusha \n\t"
> -                 "cpuid \n\t"
> -                 "mov %%eax, 0(%2) \n\t"
> -                 "mov %%ebx, 4(%2) \n\t"
> -                 "mov %%ecx, 8(%2) \n\t"
> -                 "mov %%edx, 12(%2) \n\t"
> -                 "popa"
> -                 : : "a"(function), "c"(count), "S"(vec)
> -                 : "memory", "cc");
> -#endif
> -
>       if (eax)
> -        *eax = vec[0];
> +        *eax = kvm_arch_get_supported_cpuid(kvm_state, function, count, R_EAX);
>       if (ebx)
> -        *ebx = vec[1];
> +        *ebx = kvm_arch_get_supported_cpuid(kvm_state, function, count, R_EBX);
>       if (ecx)
> -        *ecx = vec[2];
> +        *ecx = kvm_arch_get_supported_cpuid(kvm_state, function, count, R_ECX);
>       if (edx)
> -        *edx = vec[3];
> +        *edx = kvm_arch_get_supported_cpuid(kvm_state, function, count, R_EDX);
>   #endif
>   }
>

  reply	other threads:[~2011-11-09 17:56 UTC|newest]

Thread overview: 12+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2011-11-09 13:44 [PATCH] i386: derive '-cpu host' from KVM_GET_SUPPORTED_CPUID Avi Kivity
2011-11-09 13:44 ` [Qemu-devel] " Avi Kivity
2011-11-09 17:56 ` Anthony Liguori [this message]
2011-11-09 17:56   ` Anthony Liguori
2011-11-09 18:00   ` Avi Kivity
2011-11-09 18:00     ` Avi Kivity
2011-11-09 18:21     ` Sasha Levin
2011-11-09 18:21       ` Sasha Levin
2011-11-10 13:18       ` Avi Kivity
2011-11-10 13:18         ` Avi Kivity
2011-11-09 19:45 ` Anthony Liguori
2011-11-09 19:45   ` Anthony Liguori

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=4EBABEC4.2080303@codemonkey.ws \
    --to=anthony@codemonkey.ws \
    --cc=avi@redhat.com \
    --cc=kvm@vger.kernel.org \
    --cc=mtosatti@redhat.com \
    --cc=qemu-devel@nongnu.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.