2016-04-15 13:54-0300, Eduardo Habkost: > On Thu, Apr 14, 2016 at 10:55:07PM +0200, Radim Krčmář wrote: >> QEMU complains about -cpu host on an AMD machine: >> warning: host doesn't support requested feature: CPUID.80000001H:EDX [bit >> 0] >> For bits 0,1,3,4,5,6,7,8,9,12,13,14,15,16,17,23,24. >> >> Host does support them, but x86_cpu_get_migratable_flags filters unnamed >> features and drops these bits without realizing that they are aliases to >> CPUID.1H:EDX and have their names there. >> >> See https://bugzilla.redhat.com/show_bug.cgi?id=1326721 for details. >> >> Signed-off-by: Radim Krčmář <rkrc...@redhat.com> >> --- >> target-i386/cpu.c | 40 ++++++++++++++++++++++------------------ >> 1 file changed, 22 insertions(+), 18 deletions(-) > > I don't think we need that complexity to fix the problem. We even > have a similar hack in kvm_arch_get_supported_cpuid() to make > sure it handles the alias bits properly. Instead of hacking those > functions to copy CPUID[1] data, it's much easier to simply copy > the alias bits in realizefn after we call > x86_cpu_filter_features(), not before. > > The following (untested) fix should be sufficient:
It is, Tested-by: Radim Krčmář <rkrc...@redhat.com> Thank you. > diff --git a/target-i386/cpu.c b/target-i386/cpu.c > index ddae932..d0b5b69 100644 > --- a/target-i386/cpu.c > +++ b/target-i386/cpu.c > @@ -2897,6 +2897,14 @@ static void x86_cpu_realizefn(DeviceState *dev, Error > **errp) > env->cpuid_level = 7; > } > > + if (x86_cpu_filter_features(cpu) && cpu->enforce_cpuid) { > + error_setg(&local_err, > + kvm_enabled() ? > + "Host doesn't support requested features" : > + "TCG doesn't support requested features"); > + goto out; > + } > + > /* On AMD CPUs, some CPUID[8000_0001].EDX bits must match the bits on > * CPUID[1].EDX. > */ > @@ -2907,14 +2915,6 @@ static void x86_cpu_realizefn(DeviceState *dev, Error > **errp) > } > > > - if (x86_cpu_filter_features(cpu) && cpu->enforce_cpuid) { > - error_setg(&local_err, > - kvm_enabled() ? > - "Host doesn't support requested features" : > - "TCG doesn't support requested features"); > - goto out; > - } > - > #ifndef CONFIG_USER_ONLY > qemu_register_reset(x86_cpu_machine_reset_cb, cpu); > > > > -- > Eduardo