From mboxrd@z Thu Jan 1 00:00:00 1970 From: Joerg Roedel Subject: Re: [PATCH] qemu-kvm: Ask kernel about supported svm features Date: Thu, 22 Apr 2010 14:02:49 +0200 Message-ID: <20100422120249.GW31537@amd.com> References: <1271933879-15849-1-git-send-email-joerg.roedel@amd.com> <4BD02DE2.9010106@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Cc: Anthony Liguori , kvm@vger.kernel.org To: Avi Kivity Return-path: Received: from va3ehsobe001.messaging.microsoft.com ([216.32.180.11]:45588 "EHLO VA3EHSOBE001.bigfish.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1754410Ab0DVMDI (ORCPT ); Thu, 22 Apr 2010 08:03:08 -0400 Content-Disposition: inline In-Reply-To: <4BD02DE2.9010106@redhat.com> Sender: kvm-owner@vger.kernel.org List-ID: On Thu, Apr 22, 2010 at 02:07:14PM +0300, Avi Kivity wrote: > On 04/22/2010 01:57 PM, Joerg Roedel wrote: > >This patch adds code to ask the kernel about the svm > >features it supports for its guests and propagates them to > >the guest. The new capability is necessary because the old > >behavior of the kernel was to just return the host svm > >features but every svm-feature needs emulation in the nested > >svm kernel code. The new capability indicates that the > >kernel is aware of that when returning svm cpuid > >information. > > No new capability here. copy&paste error, sorry. > > >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. 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? Joerg