On Wed, May 16, 2012 at 05:58:05PM -0300, Eduardo Habkost wrote:
[...]
> @@ -521,6 +523,13 @@ static int cpu_x86_fill_host(x86_def_t *x86_cpu_def)
> x86_cpu_def->ext_features = ecx;
> x86_cpu_def->features = edx;
>
> + if (x86_cpu_def->level >= 7) {
> + host_cpuid(0x7, 0, &eax, &ebx, &ecx, &edx);
> + x86_cpu_def->cpuid_7_0_ebx_features = ebx;
> + } else {
> + x86_cpu_def->cpuid_7_0_ebx_features = 0;
> + }
> +
Ouch: it looks like -cpu host isn't using GET_SUPPORTED_CPUID at all,
host_cpuid() is a raw cpuid instruction. I am surprised -cpu host works
at all (probably it breaks in interesting ways if running on a new CPU
and a not-very-new kernel).
I will send v2 of this patch, to use GET_SUPPORTED_CPUID at least for
cpuid_7_0_ebx_features.
It is still a bug to not filter the remaining CPUID leaves using
GET_SUPPORTED_CPUID, but I am not sure we would have enough time for
testing if we try to fix all that in 1.1.
--
Eduardo