]> rtime.felk.cvut.cz Git - jailhouse.git/commitdiff
tools: Detect HPET also in case of deeper nesting
authorJan Kiszka <jan.kiszka@siemens.com>
Wed, 12 Nov 2014 15:28:16 +0000 (16:28 +0100)
committerJan Kiszka <jan.kiszka@siemens.com>
Wed, 12 Nov 2014 15:28:16 +0000 (16:28 +0100)
Do not stop searching for the HPET on the first level of a reserved
region, it may hide deeper inside. Seen on an AMD-G series evaluation
system:

  fed00000-fed00fff : reserved
    fed00000-fed00fff : pnp 00:10
      fed00000-fed003ff : HPET 0

Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
tools/jailhouse-config-create

index 710898ccc966f0f94caf2b466475401d21448cf9..967e0acf16d193f1dafb8194d7889466bfe19984 100755 (executable)
@@ -385,6 +385,24 @@ class IOMemRegionTree:
 
         return root
 
+    # find HPET regions in tree
+    @staticmethod
+    def find_hpet_regions(tree):
+        regions = []
+
+        for tree in tree.children:
+            r = tree.region
+            s = r.typestr
+
+            if (s.find('HPET') >= 0):
+                regions.append(r)
+
+            # if the tree continues recurse further down ...
+            if (len(tree.children) > 0):
+                regions.extend(IOMemRegionTree.find_hpet_regions(tree))
+
+        return regions
+
     # recurse down the tree
     @staticmethod
     def parse_iomem_tree(tree):
@@ -409,13 +427,9 @@ class IOMemRegionTree:
             ):
                 continue
 
-            # generally blacklisted, unless we find an HPET right behind it
-            # on the next level
+            # generally blacklisted, unless we find an HPET behind it
             if (s == 'reserved'):
-                for subtree in tree.children:
-                    r2 = subtree.region
-                    if (r2.typestr.find('HPET') >= 0):
-                        regions.append(r2)
+                regions.extend(IOMemRegionTree.find_hpet_regions(tree))
                 continue
 
             # if the tree continues recurse further down ...