target/i386: Fix the CPUID leaf CPUID_Fn80000008
CPUID leaf CPUID_Fn80000008_ECX provides information about the number of threads supported by the processor. It was found that the field ApicIdSize(bits 15-12) was not set correctly. ApicIdSize is defined as the number of bits required to represent all the ApicId values within a package. Valid Values: Value Description 3h-0h Reserved. 4h up to 16 threads. 5h up to 32 threads. 6h up to 64 threads. 7h up to 128 threads. Fh-8h Reserved. Fix the bit appropriately. This came up during following thread. https://lore.kernel.org/qemu-devel/158643709116.17430.15995069125716778943.malonedeb@wampee.canonical.com/#t Refer the Processor Programming Reference (PPR) for AMD Family 17h Model 01h, Revision B1 Processors. The documentation is available from the bugzilla Link below. Link: https://bugzilla.kernel.org/show_bug.cgi?id=206537 Reported-by: Philipp Eppelt <1871842@bugs.launchpad.net> Signed-off-by: Babu Moger <babu.moger@amd.com> Message-Id: <20200417215345.64800.73351.stgit@localhost.localdomain> Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
parent
4dd8a7064b
commit
cac9edfc4d
@ -5837,11 +5837,20 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
|
||||
*eax = cpu->phys_bits;
|
||||
}
|
||||
*ebx = env->features[FEAT_8000_0008_EBX];
|
||||
*ecx = 0;
|
||||
*edx = 0;
|
||||
if (cs->nr_cores * cs->nr_threads > 1) {
|
||||
*ecx |= (cs->nr_cores * cs->nr_threads) - 1;
|
||||
/*
|
||||
* Bits 15:12 is "The number of bits in the initial
|
||||
* Core::X86::Apic::ApicId[ApicId] value that indicate
|
||||
* thread ID within a package". This is already stored at
|
||||
* CPUX86State::pkg_offset.
|
||||
* Bits 7:0 is "The number of threads in the package is NC+1"
|
||||
*/
|
||||
*ecx = (env->pkg_offset << 12) |
|
||||
((cs->nr_cores * cs->nr_threads) - 1);
|
||||
} else {
|
||||
*ecx = 0;
|
||||
}
|
||||
*edx = 0;
|
||||
break;
|
||||
case 0x8000000A:
|
||||
if (env->features[FEAT_8000_0001_ECX] & CPUID_EXT3_SVM) {
|
||||
|
Loading…
Reference in New Issue
Block a user