On Thu, Jun 18, 2015 at 05:24:24PM +0200, Radim Krčmář wrote: > We already bump to level 7 if features there are requested, so do the > same for 0xD. > > Signed-off-by: Radim Krčmář <rkrc...@redhat.com>
This breaks guest ABI and live-migration, as CPUID data is not part of the migration stream (although we have considered including it in the future). If we are going to add more special cases like this, we must provide a way to make QEMU honour an explicit "level" option from the config file or command-line. I have considered introducing "min-[x]level" and "max-{x]level" properties to control automatic increasing of level/xlevel. The existing X86CPUDefinition.level field could just control min_level, while explicit "level=" on the command-line or config file would explicitly force a specific value. Probably setting "max-level" on machine-type compat code would be enough to restore the previous behavior. > --- > If we want this behavior, we should not do it by writing a case for > every level. > > target-i386/cpu.c | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/target-i386/cpu.c b/target-i386/cpu.c > index d392cf46f517..7a32ead690d2 100644 > --- a/target-i386/cpu.c > +++ b/target-i386/cpu.c > @@ -2796,6 +2796,10 @@ static void x86_cpu_realizefn(DeviceState *dev, Error > **errp) > env->cpuid_level = 7; > } > > + if (env->features[FEAT_XSAVE] && env->cpuid_level < 0xd) { > + env->cpuid_level = 0xd; > + } > + > /* On AMD CPUs, some CPUID[8000_0001].EDX bits must match the bits on > * CPUID[1].EDX. > */ > -- > 2.4.4 > -- Eduardo