[PATCH v2] target/i386: Remove core_id assert check in CPUID 0x8000001E

Babu Moger posted 1 patch 3 years, 7 months ago
Test docker-quick@centos7 passed
Test docker-mingw@fedora passed
Test checkpatch passed
Test FreeBSD passed
Patches applied successfully (tree, apply log)
git fetch https://github.com/patchew-project/qemu tags/patchew/160072824160.9666.8890355282135970684.stgit@naples-babu.amd.com
Maintainers: Eduardo Habkost <ehabkost@redhat.com>, Paolo Bonzini <pbonzini@redhat.com>, Richard Henderson <rth@twiddle.net>
target/i386/cpu.c |   11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
[PATCH v2] target/i386: Remove core_id assert check in CPUID 0x8000001E
Posted by Babu Moger 3 years, 7 months ago
With x2apic enabled, configurations can have more that 255 cores.
Noticed the device add test is hitting an assert when during cpu
hotplug with core_id > 255. This is due to assert check in the
CPUID 0x8000001E.

Remove the assert check and fix the problem.

Fixes the bug:
Link: https://bugzilla.redhat.com/show_bug.cgi?id=1834200

Signed-off-by: Babu Moger <babu.moger@amd.com>
---
v2:
  Resubmitting an old patch which was lost in the mix.
  Just rebased on the latest tree.
v1:
  https://lore.kernel.org/qemu-devel/159257395689.52908.4409314503988289481.stgit@naples-babu.amd.com/

 target/i386/cpu.c |   11 ++++++++---
 1 file changed, 8 insertions(+), 3 deletions(-)

diff --git a/target/i386/cpu.c b/target/i386/cpu.c
index 1c58f764dc..4f1d62c838 100644
--- a/target/i386/cpu.c
+++ b/target/i386/cpu.c
@@ -5912,9 +5912,14 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
         }
         break;
     case 0x8000001E:
-        assert(cpu->core_id <= 255);
-        encode_topo_cpuid8000001e(cpu, &topo_info,
-                                  eax, ebx, ecx, edx);
+        if (cpu->core_id <= 255) {
+            encode_topo_cpuid8000001e(cpu, &topo_info, eax, ebx, ecx, edx);
+        } else {
+            *eax = 0;
+            *ebx = 0;
+            *ecx = 0;
+            *edx = 0;
+        }
         break;
     case 0xC0000000:
         *eax = env->cpuid_xlevel2;


Re: [PATCH v2] target/i386: Remove core_id assert check in CPUID 0x8000001E
Posted by Eduardo Habkost 3 years, 7 months ago
On Mon, Sep 21, 2020 at 05:47:28PM -0500, Babu Moger wrote:
> With x2apic enabled, configurations can have more that 255 cores.
> Noticed the device add test is hitting an assert when during cpu
> hotplug with core_id > 255. This is due to assert check in the
> CPUID 0x8000001E.
> 
> Remove the assert check and fix the problem.
> 
> Fixes the bug:
> Link: https://bugzilla.redhat.com/show_bug.cgi?id=1834200
> 
> Signed-off-by: Babu Moger <babu.moger@amd.com>

Queued, thanks!

> ---
> v2:
>   Resubmitting an old patch which was lost in the mix.
>   Just rebased on the latest tree.
> v1:
>   https://lore.kernel.org/qemu-devel/159257395689.52908.4409314503988289481.stgit@naples-babu.amd.com/
> 
>  target/i386/cpu.c |   11 ++++++++---
>  1 file changed, 8 insertions(+), 3 deletions(-)
> 
> diff --git a/target/i386/cpu.c b/target/i386/cpu.c
> index 1c58f764dc..4f1d62c838 100644
> --- a/target/i386/cpu.c
> +++ b/target/i386/cpu.c
> @@ -5912,9 +5912,14 @@ void cpu_x86_cpuid(CPUX86State *env, uint32_t index, uint32_t count,
>          }
>          break;
>      case 0x8000001E:
> -        assert(cpu->core_id <= 255);
> -        encode_topo_cpuid8000001e(cpu, &topo_info,
> -                                  eax, ebx, ecx, edx);
> +        if (cpu->core_id <= 255) {
> +            encode_topo_cpuid8000001e(cpu, &topo_info, eax, ebx, ecx, edx);
> +        } else {
> +            *eax = 0;
> +            *ebx = 0;
> +            *ecx = 0;
> +            *edx = 0;
> +        }
>          break;
>      case 0xC0000000:
>          *eax = env->cpuid_xlevel2;
> 

-- 
Eduardo