From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([140.186.70.92]:48082) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ROCNt-0002X1-P0 for qemu-devel@nongnu.org; Wed, 09 Nov 2011 12:56:26 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ROCNs-0003oT-IY for qemu-devel@nongnu.org; Wed, 09 Nov 2011 12:56:25 -0500 Received: from mail-gy0-f173.google.com ([209.85.160.173]:51994) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ROCNs-0003oM-Ev for qemu-devel@nongnu.org; Wed, 09 Nov 2011 12:56:24 -0500 Received: by gyb11 with SMTP id 11so2223919gyb.4 for ; Wed, 09 Nov 2011 09:56:23 -0800 (PST) Message-ID: <4EBABEC4.2080303@codemonkey.ws> Date: Wed, 09 Nov 2011 11:56:20 -0600 From: Anthony Liguori MIME-Version: 1.0 References: <1320846276-19659-1-git-send-email-avi@redhat.com> In-Reply-To: <1320846276-19659-1-git-send-email-avi@redhat.com> Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH] i386: derive '-cpu host' from KVM_GET_SUPPORTED_CPUID List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: Avi Kivity Cc: Marcelo Tosatti , qemu-devel@nongnu.org, kvm@vger.kernel.org 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 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 > } >