diff for duplicates of <20200417191513.GD4952@habkost.net> diff --git a/a/1.txt b/N1/1.txt index 3d2237d..c29283f 100644 --- a/a/1.txt +++ b/N1/1.txt @@ -98,3 +98,75 @@ References: -- Eduardo + +-- +You received this bug notification because you are a member of qemu- +devel-ml, which is subscribed to QEMU. +https://bugs.launchpad.net/bugs/1871842 + +Title: + AMD CPUID leaf 0x8000'0008 reported number of cores inconsistent with + ACPI.MADT + +Status in QEMU: + New + +Bug description: + Setup: + CPU: AMD EPYC-v2 or host's EPYC cpu + Linux 64-bit fedora host; Kernel version 5.5.15-200.fc31 + qemu version: self build + git-head: f3bac27cc1e303e1860cc55b9b6889ba39dee587 + config: Configured with: '../configure' '--target-list=x86_64-softmmu,mips64el-softmmu,mips64-softmmu,mipsel-softmmu,mips-softmmu,i386-softmmu,aarch64-softmmu,arm-softmmu' '--prefix=/opt/qemu-master' + + Cmdline: + qemu-system-x86_64 -kernel /home/peppelt/code/l4/internal/.build-x86_64/bin/amd64_gen/bootstrap -append "" -initrd "./fiasco/.build-x86_64/fiasco , ... " -serial stdio -nographic -monitor none -nographic -monitor none -cpu EPYC-v2 -m 4G -smp 4 + + Issue: + We are developing an microkernel operating system called L4Re. We recently got an AMD EPYC server for testing and we couldn't execute SMP tests of our system when running Linux + qemu + VM w/ L4Re. + In fact, the kernel did not recognize any APs at all. On AMD CPUs the kernel checks for the number of cores reported in CPUID leaf 0x8000_0008.ECX[NC] or [ApicIdSize]. [0][1] + + The physical machine reports for leaf 0x8000_0008: EAX: 0x3030 EBX: 0x18cf757 ECX: 0x703f EDX: 0x1000 + The lower four bits of ECX are the [NC] field and all set. + + When querying inside qemu with -enable-kvm -cpu host -smp 4 (basically as replacement and addition to the above cmdline) the CPUID leaf shows: EAX: 0x3024, EBX: 0x1001000, ECX: 0x0, EDX: 0x0 + Note, ECX is zero. Indicating that this is no SMP capabale CPU. + + I'm debugging it using my local machine and the QEMU provided EPYC-v2 + CPU model and it is reproducible there as well and reports: EAX: + 0x3028, EBX: 0x0, ECX: 0x0, EDX: 0x0 + + I checked other AMD based CPU models (phenom, opteron_g3/g5) and they behave the same. [2] shows the CPUID 0x8000'0008 handling in the QEMU source. + I believe that behavior here is wrong as ECX[NC] should report the number of cores per processor, as stated in the AMD manual [2] p.584. In my understanding -smp 4 should then lead to ECX[NC] = 0x3. + + The following table shows my findings with the -smp option: + Option | Qemu guest observed ECX value + -smp 4 | 0x0 + -smp 4,cores=4 | 0x3 + -smp 4,cores=2,thread=2 | 0x3 + -smp 4,cores=4,threads=2 | QEMU boot error: topology false. + + Now, I'm asking myself how the terminology of the AMD manual maps to QEMU's -smp option. + Obviously, nr_cores and nr_threads correspond to the cores and threads options on the cmdline and cores * threads <= 4 (in this example), but what corresponds the X in -smp X to? + + Querying 0x8000'0008 on the physical processor results in different + reports than quering QEMU's model as does it with -enable-kvm -cpu + host. + + Furthermore, the ACPI.MADT shows 4 local APICs to be present while the + CPU leave reports a single core processor. + + This leads me to the conclusion that CPUID 0x8000'0008.ECX reports the + wrong number. + + + Please let me know, if you need more information from my side. + + + [0] https://github.com/kernkonzept/fiasco/blob/522ccc5f29ab120213cf02d71328e2b879cbbd19/src/kern/ia32/kernel_thread-ia32.cpp#L109 + [1] https://github.com/kernkonzept/fiasco/blob/522ccc5f29ab120213cf02d71328e2b879cbbd19/src/kern/ia32/cpu-ia32.cpp#L1120 + [2] https://github.com/qemu/qemu/blob/f2a8261110c32c4dccd84e774d8dd7a0524e00fb/target/i386/cpu.c#L5835 + [3] https://www.amd.com/system/files/TechDocs/24594.pdf + +To manage notifications about this bug go to: +https://bugs.launchpad.net/qemu/+bug/1871842/+subscriptions diff --git a/a/content_digest b/N1/content_digest index 3dc22f9..31f7d09 100644 --- a/a/content_digest +++ b/N1/content_digest @@ -1,13 +1,9 @@ + "ref\0158643709116.17430.15995069125716778943.malonedeb@wampee.canonical.com\0" "ref\020200417151432.46867.72601.stgit@localhost.localdomain\0" "From\0Eduardo Habkost <ehabkost@redhat.com>\0" - "Subject\0Re: [PATCH] target/i386: Fix the CPUID leaf CPUID_Fn80000008\0" - "Date\0Fri, 17 Apr 2020 15:15:13 -0400\0" - "To\0Babu Moger <babu.moger@amd.com>\0" - "Cc\0pbonzini@redhat.com" - imammedo@redhat.com - 1871842@bugs.launchpad.net - qemu-devel@nongnu.org - " rth@twiddle.net\0" + "Subject\0[Bug 1871842] Re: [PATCH] target/i386: Fix the CPUID leaf CPUID_Fn80000008\0" + "Date\0Fri, 17 Apr 2020 19:15:13 -0000\0" + "To\0qemu-devel@nongnu.org\0" "\00:1\0" "b\0" "Good catch, thanks for the patch. Comments below:\n" @@ -109,6 +105,78 @@ "\n" "\n" "-- \n" - Eduardo + "Eduardo\n" + "\n" + "-- \n" + "You received this bug notification because you are a member of qemu-\n" + "devel-ml, which is subscribed to QEMU.\n" + "https://bugs.launchpad.net/bugs/1871842\n" + "\n" + "Title:\n" + " AMD CPUID leaf 0x8000'0008 reported number of cores inconsistent with\n" + " ACPI.MADT\n" + "\n" + "Status in QEMU:\n" + " New\n" + "\n" + "Bug description:\n" + " Setup:\n" + " CPU: AMD EPYC-v2 or host's EPYC cpu\n" + " Linux 64-bit fedora host; Kernel version 5.5.15-200.fc31\n" + " qemu version: self build\n" + " git-head: f3bac27cc1e303e1860cc55b9b6889ba39dee587\n" + " config: Configured with: '../configure' '--target-list=x86_64-softmmu,mips64el-softmmu,mips64-softmmu,mipsel-softmmu,mips-softmmu,i386-softmmu,aarch64-softmmu,arm-softmmu' '--prefix=/opt/qemu-master'\n" + "\n" + " Cmdline: \n" + " qemu-system-x86_64 -kernel /home/peppelt/code/l4/internal/.build-x86_64/bin/amd64_gen/bootstrap -append \"\" -initrd \"./fiasco/.build-x86_64/fiasco , ... \" -serial stdio -nographic -monitor none -nographic -monitor none -cpu EPYC-v2 -m 4G -smp 4 \n" + "\n" + " Issue:\n" + " We are developing an microkernel operating system called L4Re. We recently got an AMD EPYC server for testing and we couldn't execute SMP tests of our system when running Linux + qemu + VM w/ L4Re.\n" + " In fact, the kernel did not recognize any APs at all. On AMD CPUs the kernel checks for the number of cores reported in CPUID leaf 0x8000_0008.ECX[NC] or [ApicIdSize]. [0][1]\n" + "\n" + " The physical machine reports for leaf 0x8000_0008: EAX: 0x3030 EBX: 0x18cf757 ECX: 0x703f EDX: 0x1000\n" + " The lower four bits of ECX are the [NC] field and all set.\n" + "\n" + " When querying inside qemu with -enable-kvm -cpu host -smp 4 (basically as replacement and addition to the above cmdline) the CPUID leaf shows: EAX: 0x3024, EBX: 0x1001000, ECX: 0x0, EDX: 0x0\n" + " Note, ECX is zero. Indicating that this is no SMP capabale CPU.\n" + "\n" + " I'm debugging it using my local machine and the QEMU provided EPYC-v2\n" + " CPU model and it is reproducible there as well and reports: EAX:\n" + " 0x3028, EBX: 0x0, ECX: 0x0, EDX: 0x0\n" + "\n" + " I checked other AMD based CPU models (phenom, opteron_g3/g5) and they behave the same. [2] shows the CPUID 0x8000'0008 handling in the QEMU source.\n" + " I believe that behavior here is wrong as ECX[NC] should report the number of cores per processor, as stated in the AMD manual [2] p.584. In my understanding -smp 4 should then lead to ECX[NC] = 0x3.\n" + "\n" + " The following table shows my findings with the -smp option:\n" + " Option | Qemu guest observed ECX value\n" + " -smp 4 | 0x0\n" + " -smp 4,cores=4 | 0x3\n" + " -smp 4,cores=2,thread=2 | 0x3\n" + " -smp 4,cores=4,threads=2 | QEMU boot error: topology false.\n" + "\n" + " Now, I'm asking myself how the terminology of the AMD manual maps to QEMU's -smp option.\n" + " Obviously, nr_cores and nr_threads correspond to the cores and threads options on the cmdline and cores * threads <= 4 (in this example), but what corresponds the X in -smp X to?\n" + "\n" + " Querying 0x8000'0008 on the physical processor results in different\n" + " reports than quering QEMU's model as does it with -enable-kvm -cpu\n" + " host.\n" + "\n" + " Furthermore, the ACPI.MADT shows 4 local APICs to be present while the\n" + " CPU leave reports a single core processor.\n" + "\n" + " This leads me to the conclusion that CPUID 0x8000'0008.ECX reports the\n" + " wrong number.\n" + "\n" + " \n" + " Please let me know, if you need more information from my side.\n" + "\n" + " \n" + " [0] https://github.com/kernkonzept/fiasco/blob/522ccc5f29ab120213cf02d71328e2b879cbbd19/src/kern/ia32/kernel_thread-ia32.cpp#L109\n" + " [1] https://github.com/kernkonzept/fiasco/blob/522ccc5f29ab120213cf02d71328e2b879cbbd19/src/kern/ia32/cpu-ia32.cpp#L1120\n" + " [2] https://github.com/qemu/qemu/blob/f2a8261110c32c4dccd84e774d8dd7a0524e00fb/target/i386/cpu.c#L5835\n" + " [3] https://www.amd.com/system/files/TechDocs/24594.pdf\n" + "\n" + "To manage notifications about this bug go to:\n" + https://bugs.launchpad.net/qemu/+bug/1871842/+subscriptions -f47ac1ef588550dc4ab6489bc01f706cd7e3c8a3854dea5d2c0deb61e21d615d +3a04aa0819008afeba741eaa003f73bceb912bb7d6b0aeea20f1977cdd6e1fd1
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.