Re: semantics of "-cpu host" and "check"/"enforce"

Avi Kivity
2011-06-12T14:36:48Z

On 06/11/2011 01:40 PM, Roedel, Joerg wrote:
> On Fri, Jun 10, 2011 at 05:36:37PM -0400, Eduardo Habkost wrote:
>
> > We have 3 sets of cpu features that may or may not be included in
> > '-cpu host':
> >
> > A) Features that are supported by the host and that KVM can already
> > emulate, or don't need KVM support to be used;
> > B) Features that may be not supported by the host but can be emulated by
> > KVM (e.g. the SVM features, or x2apic);
> > C) Features that are supported by the host but KVM can't emulate.
> > Divided in:
> > C1) features we can't emulate and we know about it (e.g. dtes64)[1]
> > C2) features we possibly can't emulate but we don't even know about it
> > (e.g. features added to recent CPUs).
> >
> > It seems obvious that all the features in group A must always be
> > included in '-cpu host', but what about features in the B or C groups?
> >
> >
> > About group B: it looks like we are not being consistent. For example,
> > svm_features has every bit enabled when using '-cpu host' even if the
> > host doesn't support them; in other cases (e.g. x2apic), it is not
> > enabled by '-cpu host' unless the host already supports it.
>
> SVM is a special feature. We can't just forward the host-cpuid to the
> guest because every SVM feature we provide to the guest needs emulation
> in the kernel module. The kernel-module will tell qemu-kvm about its
> feature set via the GET_SUPPORTED_CPUID ioctl.

SVM isn't special in this regard. It's potentially true for any
feature, and actually true for some of them.

> So the idea behint -cpu
> host and SVM features is that qemu-kvm enables all of them and masks out
> everything that is not supported by the kernel module.

Right (but by whitelisting known features, not blacklisting).

> Note that the kernel might even emulate features that are not supported
> on the host, like the vmcb-clean-bits, so we really need to ask the
> kernel what is supported for the guest.

x2apic is another example.

--
error compiling committee.c: too many arguments to function