]> git.ipfire.org Git - thirdparty/libvirt.git/commitdiff
cpu-cpuid: Merge checkFeature functions
authorTim Wiederhake <twiederh@redhat.com>
Mon, 4 Jan 2021 11:30:15 +0000 (12:30 +0100)
committerJiri Denemark <jdenemar@redhat.com>
Thu, 7 Jan 2021 17:10:56 +0000 (18:10 +0100)
Prepare to deduplicate the list of relevant registers for cpuid and
msr information.

Signed-off-by: Tim Wiederhake <twiederh@redhat.com>
Reviewed-by: Jiri Denemark <jdenemar@redhat.com>
tests/cputestdata/cpu-cpuid.py

index 9065aa5cb2cd6c31eb10abd1bab8ce3199c41914..e0d587e3d63d4ba3ecd3685a52d8dd9d6cad74fa 100755 (executable)
@@ -7,51 +7,27 @@ import json
 import xml.etree.ElementTree
 
 
-def checkCPUIDFeature(cpuData, feature):
-    eax_in = feature["eax_in"]
-    ecx_in = feature["ecx_in"]
-    eax = feature["eax"]
-    ebx = feature["ebx"]
-    ecx = feature["ecx"]
-    edx = feature["edx"]
-
-    if "cpuid" not in cpuData:
-        return False
-
-    cpuid = cpuData["cpuid"]
-    if eax_in not in cpuid or ecx_in not in cpuid[eax_in]:
-        return False
-
-    leaf = cpuid[eax_in][ecx_in]
-    return ((eax > 0 and leaf["eax"] & eax == eax) or
-            (ebx > 0 and leaf["ebx"] & ebx == ebx) or
-            (ecx > 0 and leaf["ecx"] & ecx == ecx) or
-            (edx > 0 and leaf["edx"] & edx == edx))
-
-
-def checkMSRFeature(cpuData, feature):
-    index = feature["index"]
-    edx = feature["edx"]
-    eax = feature["eax"]
-
-    if "msr" not in cpuData:
-        return False
-
-    msr = cpuData["msr"]
-    if index not in msr:
-        return False
-
-    msr = msr[index]
-    return ((edx > 0 and msr["edx"] & edx == edx) or
-            (eax > 0 and msr["eax"] & eax == eax))
-
-
 def checkFeature(cpuData, feature):
     if feature["type"] == "cpuid":
-        return checkCPUIDFeature(cpuData, feature)
+        # cpuData["cpuid"][eax_in][ecx_in] = {eax:, ebx:, ecx:, edx:}
+        keyList = ["type", "eax_in", "ecx_in"]
+        regList = ["eax", "ebx", "ecx", "edx"]
+    elif feature["type"] == "msr":
+        # cpuData["msr"][index] = {eax:, edx:}
+        keyList = ["type", "index"]
+        regList = ["eax", "edx"]
+    else:
+        return False
+
+    for key in keyList:
+        if feature[key] not in cpuData:
+            return False
+        cpuData = cpuData[feature[key]]
 
-    if feature["type"] == "msr":
-        return checkMSRFeature(cpuData, feature)
+    for reg in regList:
+        if feature[reg] > 0 and feature[reg] == feature[reg] & cpuData[reg]:
+            return True
+    return False
 
 
 def addFeature(cpuData, feature):