Message ID | 1412709453-11940-1-git-send-email-wei@redhat.com |
---|---|
State | New |
Headers | show |
Sorry, please skip this version. I am sending out a updated one. -Wei On 10/07/2014 02:17 PM, Wei Huang wrote: > AMD CPU doesn't support hyperthreading. Even though QEMU fixes > this issue by setting CPUID_0000_0001_EBX and CPUID_8000_0008_ECX > via conversion, it is better to stop end-users in the first place > with a warning message. > > Signed-off-by: Wei Huang <wei@redhat.com> > --- > target-i386/cpu.c | 18 ++++++++++++++++++ > 1 file changed, 18 insertions(+) > > diff --git a/target-i386/cpu.c b/target-i386/cpu.c > index e7bf9de..01bbcaf 100644 > --- a/target-i386/cpu.c > +++ b/target-i386/cpu.c > @@ -2742,6 +2742,24 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) > mce_init(cpu); > qemu_init_vcpu(cs); > > + /* AMD CPU doesn't support hyperthreading. Even though QEMU does fix > + * this issue by setting CPUID_0000_0001_EBX and CPUID_8000_0008_ECX > + * correctly, it is still better to stop end-users in the first place > + * by giving out a warning message. > + * > + * NOTE: cs->nr_threads is initialized in qemu_init_vcpu(). So the > + * following code has to follow qemu_init_vcpu(). > + */ > + if (env->cpuid_vendor1 == CPUID_VENDOR_AMD_1 && > + env->cpuid_vendor2 == CPUID_VENDOR_AMD_2 && > + env->cpuid_vendor3 == CPUID_VENDOR_AMD_3 && > + (cs->nr_threads > 1)) { > + error_setg(&local_err, > + "AMD CPU doesn't support hyperthreading. Please configure " > + "-smp options correctly."); > + goto out; > + } > + > x86_cpu_apic_realize(cpu, &local_err); > if (local_err != NULL) { > goto out; >
diff --git a/target-i386/cpu.c b/target-i386/cpu.c index e7bf9de..01bbcaf 100644 --- a/target-i386/cpu.c +++ b/target-i386/cpu.c @@ -2742,6 +2742,24 @@ static void x86_cpu_realizefn(DeviceState *dev, Error **errp) mce_init(cpu); qemu_init_vcpu(cs); + /* AMD CPU doesn't support hyperthreading. Even though QEMU does fix + * this issue by setting CPUID_0000_0001_EBX and CPUID_8000_0008_ECX + * correctly, it is still better to stop end-users in the first place + * by giving out a warning message. + * + * NOTE: cs->nr_threads is initialized in qemu_init_vcpu(). So the + * following code has to follow qemu_init_vcpu(). + */ + if (env->cpuid_vendor1 == CPUID_VENDOR_AMD_1 && + env->cpuid_vendor2 == CPUID_VENDOR_AMD_2 && + env->cpuid_vendor3 == CPUID_VENDOR_AMD_3 && + (cs->nr_threads > 1)) { + error_setg(&local_err, + "AMD CPU doesn't support hyperthreading. Please configure " + "-smp options correctly."); + goto out; + } + x86_cpu_apic_realize(cpu, &local_err); if (local_err != NULL) { goto out;
AMD CPU doesn't support hyperthreading. Even though QEMU fixes this issue by setting CPUID_0000_0001_EBX and CPUID_8000_0008_ECX via conversion, it is better to stop end-users in the first place with a warning message. Signed-off-by: Wei Huang <wei@redhat.com> --- target-i386/cpu.c | 18 ++++++++++++++++++ 1 file changed, 18 insertions(+)