The output of cpuid depends on the logical processor id the process runs on, as reflected by the "local apic id" present in cpuid leaves (eax=1,ebx=0), (eax=11,ebx=0), and (eax=11,ebx=1). This produces arbitrary changes in the output files that complicate comparisons. This patch masks the occurences of the local apic id with 0x00, so that two consecutive runs of "./cpu-data.py gather" produce identical results. Signed-off-by: Tim Wiederhake <twiederh@xxxxxxxxxx> --- tests/cputestdata/cpu-data.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/tests/cputestdata/cpu-data.py b/tests/cputestdata/cpu-data.py index a41f1d025c..df71132c25 100755 --- a/tests/cputestdata/cpu-data.py +++ b/tests/cputestdata/cpu-data.py @@ -36,6 +36,13 @@ def gather_name(args): 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 + leave_pattern = re.compile( "^\\s*" "(0x[0-9a-f]+)\\s*" @@ -60,7 +67,7 @@ def gather_cpuid_leaves(args): match = leave_pattern.match(line) if not match: continue - yield { + regs = { "eax_in": int(match.group(1), 0), "ecx_in": int(match.group(2), 0), "eax": int(match.group(3), 0), @@ -68,6 +75,13 @@ def gather_cpuid_leaves(args): "ecx": int(match.group(5), 0), "edx": int(match.group(6), 0)} + # 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) + + yield regs + def gather_msr(): msrs = dict() -- 2.26.2