Commit 10b5e789c5 attempts to filter out the logical processor id
in the generated data to remove noise and irrelevant changes in the
output.
cpuid-leaf 0x0B may have more than two sub-leaves though. Filter out
logical processor id from all sub-leaves of 0x0B and 0x1F (superset
of the information in 0x0B).
Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
---
tests/cputestdata/cpu-data.py | 17 ++++++++++-------
1 file changed, 10 insertions(+), 7 deletions(-)
diff --git a/tests/cputestdata/cpu-data.py b/tests/cputestdata/cpu-data.py
index 498e07b2f7..b5641f7c16 100755
--- a/tests/cputestdata/cpu-data.py
+++ b/tests/cputestdata/cpu-data.py
@@ -107,11 +107,14 @@ def gather_cpuid_leaves_kcpuid(output):
def gather_cpuid_leaves(args):
def mask(regs, eax_in, ecx_in, eax_mask, ebx_mask, ecx_mask, edx_mask):
- if regs["eax_in"] == eax_in and regs["ecx_in"] == ecx_in:
- regs["eax"] &= eax_mask
- regs["ebx"] &= ebx_mask
- regs["ecx"] &= ecx_mask
- regs["edx"] &= edx_mask
+ if eax_in != regs["eax_in"]:
+ return
+ if ecx_in != regs["ecx_in"] and ecx_in is not None:
+ return
+ regs["eax"] &= eax_mask
+ regs["ebx"] &= ebx_mask
+ regs["ecx"] &= ecx_mask
+ regs["edx"] &= edx_mask
cpuid = args.path_to_cpuid or "cpuid"
try:
@@ -132,8 +135,8 @@ def gather_cpuid_leaves(args):
for regs in reglist:
# local apic id. Pretend to always run on logical processor #0.
mask(regs, 0x01, 0x00, 0xffffffff, 0x00ffffff, 0xffffffff, 0xffffffff)
- mask(regs, 0x0b, 0x00, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff00)
- mask(regs, 0x0b, 0x01, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff00)
+ mask(regs, 0x0b, None, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000)
+ mask(regs, 0x1f, None, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000)
yield regs
--
2.39.2
On Tue, Mar 28, 2023 at 16:26:15 +0200, Tim Wiederhake wrote:
> Commit 10b5e789c5 attempts to filter out the logical processor id
> in the generated data to remove noise and irrelevant changes in the
> output.
>
> cpuid-leaf 0x0B may have more than two sub-leaves though. Filter out
> logical processor id from all sub-leaves of 0x0B and 0x1F (superset
> of the information in 0x0B).
>
> Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
> ---
> tests/cputestdata/cpu-data.py | 17 ++++++++++-------
> 1 file changed, 10 insertions(+), 7 deletions(-)
>
> diff --git a/tests/cputestdata/cpu-data.py b/tests/cputestdata/cpu-data.py
> index 498e07b2f7..b5641f7c16 100755
> --- a/tests/cputestdata/cpu-data.py
> +++ b/tests/cputestdata/cpu-data.py
> @@ -107,11 +107,14 @@ def gather_cpuid_leaves_kcpuid(output):
>
> def gather_cpuid_leaves(args):
> def mask(regs, eax_in, ecx_in, eax_mask, ebx_mask, ecx_mask, edx_mask):
> - if regs["eax_in"] == eax_in and regs["ecx_in"] == ecx_in:
> - regs["eax"] &= eax_mask
> - regs["ebx"] &= ebx_mask
> - regs["ecx"] &= ecx_mask
> - regs["edx"] &= edx_mask
> + if eax_in != regs["eax_in"]:
> + return
> + if ecx_in != regs["ecx_in"] and ecx_in is not None:
My brain would be happier if the two expressions were swapped, i.e.:
if ecx_in is not None and ecx_in != regs["ecx_in"]:
but both should work as we're not in C...
> + return
> + regs["eax"] &= eax_mask
> + regs["ebx"] &= ebx_mask
> + regs["ecx"] &= ecx_mask
> + regs["edx"] &= edx_mask
>
> cpuid = args.path_to_cpuid or "cpuid"
> try:
> @@ -132,8 +135,8 @@ def gather_cpuid_leaves(args):
> for regs in reglist:
> # local apic id. Pretend to always run on logical processor #0.
> mask(regs, 0x01, 0x00, 0xffffffff, 0x00ffffff, 0xffffffff, 0xffffffff)
> - mask(regs, 0x0b, 0x00, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff00)
> - mask(regs, 0x0b, 0x01, 0xffffffff, 0xffffffff, 0xffffffff, 0xffffff00)
> + mask(regs, 0x0b, None, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000)
> + mask(regs, 0x1f, None, 0xffffffff, 0xffffffff, 0xffffffff, 0x00000000)
>
> yield regs
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
© 2016 - 2026 Red Hat, Inc.