Hi Henning,
I have write new patch but I have not test it more. But it is more suitable for
your advices.
diff --git a/pyjailhouse/sysfs_parser.py b/pyjailhouse/sysfs_parser.py
index 46c95fc2..985c1129 100644
--- a/pyjailhouse/sysfs_parser.py
+++ b/pyjailhouse/sysfs_parser.py
@@ -22,6 +22,7 @@ import struct
import os
import fnmatch
+# root_dir = "/home/ubuntu/repos/siemens/jailhouse/data/"
root_dir = "/"
def set_root_dir(dir):
@@ -58,6 +59,7 @@ inputs['files_intel'].add('/sys/firmware/acpi/tables/DMAR')
inputs['files_amd'].add('/sys/firmware/acpi/tables/IVRS')
+
def check_input_listed(name, optional=False):
set = inputs['files_opt']
if optional is False:
@@ -94,14 +96,15 @@ def input_listdir(dir, wildcards):
def parse_iomem(pcidevices):
- regions = IOMemRegionTree.parse_iomem_tree(
+ dmar_regions = []
+ (regions, dmar_regions) = IOMemRegionTree.parse_iomem_tree(
IOMemRegionTree.parse_iomem_file())
rom_region = MemRegion(0xc0000, 0xdffff, 'ROMs')
add_rom_region = False
ret = []
- dmar_regions = []
+
for r in regions:
append_r = True
# filter the list for MSI-X pages
@@ -249,9 +252,14 @@ def parse_dmar(pcidevices, ioapics, dmar_regions):
if d.iommu is None:
d.iommu = len(units) - 1
offset += 16 - offset
+ print('DRHD: struct_len: %d offset: %2d -> flags: %d segment: %d
base: 0x%x ' % (struct_len, offset, flags, segment, base))
+
while offset < struct_len:
(scope_type, scope_len, id, bus, dev, fn) =\
parse_dmar_devscope(f)
+
+ print('DevScope: offset: %2d -> scope_type: %d scope_len: %d
id: %d bus: %d dev: %d fn: %d' % (offset, scope_type, scope_len, id, bus, dev,
fn))
+
# PCI Endpoint Device
if scope_type == 1:
assert not (flags & 1)
@@ -290,11 +298,15 @@ def parse_dmar(pcidevices, ioapics, dmar_regions):
offset += 8 - offset
(base, limit) = struct.unpack('<QQ', f.read(16))
offset += 16
+ print('RMRR: struct_len: %d offset: %2d -> base: 0x%x limit: %d '
% (struct_len, offset, base, limit))
comments = []
while offset < struct_len:
(scope_type, scope_len, id, bus, dev, fn) =\
parse_dmar_devscope(f)
+
+ print('DevScope: offset: %2d -> scope_type: %d scope_len: %d
id: %d bus: %d dev: %d fn: %d' % (offset, scope_type, scope_len, id, bus, dev,
fn))
+
if scope_type == 1:
comments.append('PCI device: %02x:%02x.%x' %
(bus, dev, fn))
@@ -860,21 +872,21 @@ class IOMemRegionTree:
return root
- # find HPET regions in tree
+ # find specific regions in tree
@staticmethod
- def find_hpet_regions(tree):
+ def find_regions_by_name(tree, string):
regions = []
for tree in tree.children:
r = tree.region
s = r.typestr
- if (s.find('HPET') >= 0):
+ if (s.find(string) >= 0):
regions.append(r)
# if the tree continues recurse further down ...
if (len(tree.children) > 0):
- regions.extend(IOMemRegionTree.find_hpet_regions(tree))
+ regions.extend(IOMemRegionTree.find_regions_by_name(tree,
string))
return regions
@@ -882,6 +894,7 @@ class IOMemRegionTree:
@staticmethod
def parse_iomem_tree(tree):
regions = []
+ dmar_regions = []
for tree in tree.children:
r = tree.region
@@ -901,20 +914,23 @@ class IOMemRegionTree:
):
continue
- # generally blacklisted, unless we find an HPET behind it
+ # generally blacklisted, with a few exceptions
if (s.lower() == 'reserved'):
- regions.extend(IOMemRegionTree.find_hpet_regions(tree))
+ regions.extend(IOMemRegionTree.find_regions_by_name(tree,
'HPET'))
+ dmar_regions.extend(IOMemRegionTree.find_regions_by_name(tree,
'dmar'))
continue
# if the tree continues recurse further down ...
if (len(tree.children) > 0):
- regions.extend(IOMemRegionTree.parse_iomem_tree(tree))
+ (temp_regions, temp_dmar_regions) =
IOMemRegionTree.parse_iomem_tree(tree)
+ regions.extend(temp_regions)
+ dmar_regions.extend(temp_dmar_regions)
continue
# add all remaining leaves
regions.append(r)
- return regions
+ return regions, dmar_regions
class IOMMUConfig:
--
You received this message because you are subscribed to the Google Groups
"Jailhouse" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/d/optout.