From mboxrd@z Thu Jan 1 00:00:00 1970 From: Avi Kivity Subject: Re: [PATCH] qemu-kvm: Ask kernel about supported svm features Date: Thu, 22 Apr 2010 15:13:14 +0300 Message-ID: <4BD03D5A.6090905@redhat.com> References: <1271933879-15849-1-git-send-email-joerg.roedel@amd.com> <4BD02DE2.9010106@redhat.com> <20100422120249.GW31537@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset=ISO-8859-1; format=flowed Content-Transfer-Encoding: 7bit Cc: Anthony Liguori , kvm@vger.kernel.org To: Joerg Roedel Return-path: Received: from mx1.redhat.com ([209.132.183.28]:17391 "EHLO mx1.redhat.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1752272Ab0DVMNS (ORCPT ); Thu, 22 Apr 2010 08:13:18 -0400 In-Reply-To: <20100422120249.GW31537@amd.com> Sender: kvm-owner@vger.kernel.org List-ID: On 04/22/2010 03:02 PM, Joerg Roedel wrote: >> >>> Signed-off-by: Joerg Roedel >>> --- >>> qemu-kvm-x86.c | 14 ++++++++++++-- >>> 1 files changed, 12 insertions(+), 2 deletions(-) >>> >>> diff --git a/qemu-kvm-x86.c b/qemu-kvm-x86.c >>> index 748ff69..6eccd69 100644 >>> --- a/qemu-kvm-x86.c >>> +++ b/qemu-kvm-x86.c >>> @@ -1327,8 +1327,18 @@ int kvm_arch_init_vcpu(CPUState *cenv) >>> qemu_kvm_cpuid_on_env(©); >>> limit = copy.regs[R_EAX]; >>> >>> - for (i = 0x80000000; i<= limit; ++i) >>> - do_cpuid_ent(&cpuid_ent[cpuid_nent++], i, 0,©); >>> + for (i = 0x80000000; i<= limit; ++i) { >>> + do_cpuid_ent(&cpuid_ent[cpuid_nent], i, 0,©); >>> + switch (i) { >>> + case 0x8000000a: >>> + cpuid_ent[cpuid_nent].eax = kvm_arch_get_supported_cpuid(cenv, 0x8000000a, R_EAX); >>> + cpuid_ent[cpuid_nent].ebx = kvm_arch_get_supported_cpuid(cenv, 0x8000000a, R_EBX); >>> + cpuid_ent[cpuid_nent].ebx = kvm_arch_get_supported_cpuid(cenv, 0x8000000a, R_EBX); >>> + cpuid_ent[cpuid_nent].edx = kvm_arch_get_supported_cpuid(cenv, 0x8000000a, R_EDX); >>> + break; >>> + } >>> + cpuid_nent += 1; >>> + } >>> >> I don't understand why this is different compared to all other cpuid bits. >> > Because for the SVM features we report to the guest we need to ask the > kernel which of them are supported. That's true for all cpuid features. > We can't just take the host-cpuid > because most of the additional svm features need special emulation in > the kernel. Or do you think this should better be handled in > target-i386/cpuid.c? > Yes. -cpu host should take KVM_GET_SUPPORTED_CPUID output and loop it back to the vcpu configuration, others just take the qemu configuration, mask it with supported bits, and pass it back (see check_features_against_host()). (need feature names for the bits, too, so you can enable or disable them from the command line) -- error compiling committee.c: too many arguments to function