Preparation for next patch. Signed-off-by: Tim Wiederhake <twiederh@xxxxxxxxxx> --- tests/cputestdata/cpu-data.py | 44 +++++++++++++++++++---------------- 1 file changed, 24 insertions(+), 20 deletions(-) diff --git a/tests/cputestdata/cpu-data.py b/tests/cputestdata/cpu-data.py index df71132c25..ac4d0ff8e7 100755 --- a/tests/cputestdata/cpu-data.py +++ b/tests/cputestdata/cpu-data.py @@ -35,14 +35,7 @@ def gather_name(args): "Use '--model' to set a model name.") -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 - +def gather_cpuid_leaves_cpuid(output): leave_pattern = re.compile( "^\\s*" "(0x[0-9a-f]+)\\s*" @@ -52,22 +45,11 @@ def gather_cpuid_leaves(args): "ecx=(0x[0-9a-f]+)\\s*" "edx=(0x[0-9a-f]+)\\s*$") - cpuid = args.path_to_cpuid or "cpuid" - try: - output = subprocess.check_output( - [cpuid, "-1r"], - universal_newlines=True) - except FileNotFoundError as e: - exit("Error: '{}' not found.\n'cpuid' can be usually found in a " - "package named identically. If your distro does not provide such " - "package, you can find the sources or binary packages at " - "'http://www.etallen.com/cpuid.html'.".format(e.filename)) - for line in output.split("\n"): match = leave_pattern.match(line) if not match: continue - regs = { + yield { "eax_in": int(match.group(1), 0), "ecx_in": int(match.group(2), 0), "eax": int(match.group(3), 0), @@ -75,6 +57,28 @@ def gather_cpuid_leaves(args): "ecx": int(match.group(5), 0), "edx": int(match.group(6), 0)} + +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 + + cpuid = args.path_to_cpuid or "cpuid" + try: + output = subprocess.check_output( + [cpuid, "-1r"], + universal_newlines=True) + except FileNotFoundError as e: + exit("Error: '{}' not found.\n'cpuid' can be usually found in a " + "package named identically. If your distro does not provide such " + "package, you can find the sources or binary packages at " + "'http://www.etallen.com/cpuid.html'.".format(e.filename)) + + reglist = gather_cpuid_leaves_cpuid(output) + 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) -- 2.26.3