mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2025-01-21 20:15:17 +00:00
cpu-gather: Parse cpuid leaves early
Signed-off-by: Tim Wiederhake <twiederh@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
b0c966de9b
commit
731b922a65
@ -24,6 +24,15 @@ def gather_name(args):
|
||||
|
||||
|
||||
def gather_cpuid_leaves(args):
|
||||
leave_pattern = re.compile(
|
||||
"^\\s*"
|
||||
"(0x[0-9a-f]+)\\s*"
|
||||
"(0x[0-9a-f]+):\\s*"
|
||||
"eax=(0x[0-9a-f]+)\\s*"
|
||||
"ebx=(0x[0-9a-f]+)\\s*"
|
||||
"ecx=(0x[0-9a-f]+)\\s*"
|
||||
"edx=(0x[0-9a-f]+)\\s*$")
|
||||
|
||||
cpuid = args.path_to_cpuid or "cpuid"
|
||||
try:
|
||||
output = subprocess.check_output(
|
||||
@ -36,11 +45,16 @@ def gather_cpuid_leaves(args):
|
||||
"'http://www.etallen.com/cpuid.html'.".format(e.filename))
|
||||
|
||||
for line in output.split("\n"):
|
||||
if not line:
|
||||
match = leave_pattern.match(line)
|
||||
if not match:
|
||||
continue
|
||||
if line == "CPU:":
|
||||
continue
|
||||
yield line.strip()
|
||||
yield {
|
||||
"eax_in": int(match.group(1), 0),
|
||||
"ecx_in": int(match.group(2), 0),
|
||||
"eax": int(match.group(3), 0),
|
||||
"ebx": int(match.group(4), 0),
|
||||
"ecx": int(match.group(5), 0),
|
||||
"edx": int(match.group(6), 0)}
|
||||
|
||||
|
||||
def gather_msr():
|
||||
@ -214,23 +228,14 @@ def parse_filename(data):
|
||||
|
||||
|
||||
def output_xml(data, filename):
|
||||
leave_pattern = re.compile(
|
||||
"^\\s*"
|
||||
"(0x[0-9a-f]+)\\s*"
|
||||
"(0x[0-9a-f]+):\\s*"
|
||||
"eax=(0x[0-9a-f]+)\\s*"
|
||||
"ebx=(0x[0-9a-f]+)\\s*"
|
||||
"ecx=(0x[0-9a-f]+)\\s*"
|
||||
"edx=(0x[0-9a-f]+)\\s*$")
|
||||
|
||||
leave_template = \
|
||||
" <cpuid" \
|
||||
" eax_in='{}'" \
|
||||
" ecx_in='{}'" \
|
||||
" eax='{}'" \
|
||||
" ebx='{}'" \
|
||||
" ecx='{}'" \
|
||||
" edx='{}'" \
|
||||
" eax_in='0x{0[eax_in]:08x}'" \
|
||||
" ecx_in='0x{0[ecx_in]:02x}'" \
|
||||
" eax='0x{0[eax]:08x}'" \
|
||||
" ebx='0x{0[ebx]:08x}'" \
|
||||
" ecx='0x{0[ecx]:08x}'" \
|
||||
" edx='0x{0[edx]:08x}'" \
|
||||
"/>\n"
|
||||
|
||||
msr_template = " <msr index='0x{:x}' edx='0x{:08x}' eax='0x{:08x}'/>\n"
|
||||
@ -239,9 +244,8 @@ def output_xml(data, filename):
|
||||
with open(filename, "wt") as f:
|
||||
f.write("<!-- {} -->\n".format(data["name"]))
|
||||
f.write("<cpudata arch='x86'>\n")
|
||||
for line in data["leaves"]:
|
||||
match = leave_pattern.match(line)
|
||||
f.write(leave_template.format(*match.groups()))
|
||||
for leave in data["leaves"]:
|
||||
f.write(leave_template.format(leave))
|
||||
for key, value in sorted(data["msr"].items()):
|
||||
f.write(msr_template.format(
|
||||
int(key),
|
||||
|
Loading…
x
Reference in New Issue
Block a user