While kernel command parameters are intel_iommu=on intremap=on at some
machines, cat /proc/iomem shows DMAR region under reserved section. This patch
must be done for config creation to complete because of generating DMAR region
not found error although it exist.
If this patch is not apply, below error is throw by "cell create" command
whether intel_iommu On or Off because "reserved" regions are currently excluded
from the generated config although DMAR region exists. Thus, DMAR under
reserved section must be parsed by parser.
if size == 0:
raise RuntimeError('DMAR region size cannot be identified.\n'
'Target Linux must run with Intel IOMMU '
'enabled.')
git diff
diff --git a/pyjailhouse/sysfs_parser.py b/pyjailhouse/sysfs_parser.py
index 46c95fc2..70fe8869 100644
--- a/pyjailhouse/sysfs_parser.py
+++ b/pyjailhouse/sysfs_parser.py
@@ -94,14 +94,13 @@ def input_listdir(dir, wildcards):
def parse_iomem(pcidevices):
- regions = IOMemRegionTree.parse_iomem_tree(
- IOMemRegionTree.parse_iomem_file())
+ dmar_regions = []
+ regions =
IOMemRegionTree.parse_iomem_tree(IOMemRegionTree.parse_iomem_file(),
dmar_regions)
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
@@ -878,9 +877,27 @@ class IOMemRegionTree:
return regions
+ # find DMAR regions in tree
+ @staticmethod
+ def find_dmar_regions(tree):
+ regions = []
+
+ for tree in tree.children:
+ r = tree.region
+ s = r.typestr
+
+ if (s.find('dmar') >= 0):
+ regions.append(r)
+
+ # if the tree continues recurse further down ...
+ if (len(tree.children) > 0):
+ regions.extend(IOMemRegionTree.find_dmar_regions(tree))
+
+ return regions
+
# recurse down the tree
@staticmethod
- def parse_iomem_tree(tree):
+ def parse_iomem_tree(tree, dmar_regions):
regions = []
for tree in tree.children:
@@ -904,11 +921,12 @@ class IOMemRegionTree:
# generally blacklisted, unless we find an HPET behind it
if (s.lower() == 'reserved'):
regions.extend(IOMemRegionTree.find_hpet_regions(tree))
+ dmar_regions.extend(IOMemRegionTree.find_dmar_regions(tree))
continue
# if the tree continues recurse further down ...
if (len(tree.children) > 0):
- regions.extend(IOMemRegionTree.parse_iomem_tree(tree))
+ regions.extend(IOMemRegionTree.parse_iomem_tree(tree,
dmar_regions))
continue
# add all remaining leaves
Example /proc/iomem
"intel_iommu=on intremap=on"
You can see that dmar0 under Reserved region.
ubuntu@ubuntu-HP8300:~$ sudo cat /proc/iomem
00000000-00000fff : Reserved
00001000-0009ffff : System RAM
000a0000-000bffff : PCI Bus 0000:00
000c0000-000ce9ff : Video ROM
000cf000-000cffff : Adapter ROM
000d0000-000d3fff : PCI Bus 0000:00
000d4000-000d7fff : PCI Bus 0000:00
000d8000-000dbfff : PCI Bus 0000:00
000dc000-000dffff : PCI Bus 0000:00
000f0000-000fffff : System ROM
00100000-38ffffff : System RAM
39000000-78ffffff : Reserved
79000000-de35bfff : System RAM
de35c000-de365fff : Unknown E820 type
de366000-de3e6fff : Reserved
de3e7000-de414fff : Unknown E820 type
de415000-de93efff : Reserved
de93f000-deba4fff : ACPI Non-volatile Storage
deba5000-debb5fff : ACPI Tables
debb6000-debbefff : ACPI Non-volatile Storage
debbf000-debc3fff : ACPI Tables
debc4000-dec06fff : ACPI Non-volatile Storage
dec07000-deffffff : System RAM
df000000-dfffffff : RAM buffer
e0000000-feafffff : PCI Bus 0000:00
e0000000-efffffff : PCI Bus 0000:01
e0000000-efffffff : 0000:01:00.0
f0000000-f0000fff : pnp 00:0a
f7e00000-f7efffff : PCI Bus 0000:01
f7e20000-f7e3ffff : 0000:01:00.0
f7f00000-f7f1ffff : 0000:00:19.0
f7f00000-f7f1ffff : e1000e
f7f20000-f7f2ffff : 0000:00:14.0
f7f20000-f7f2ffff : xhci-hcd
f7f30000-f7f33fff : 0000:00:1b.0
f7f30000-f7f33fff : ICH HD audio
f7f35000-f7f350ff : 0000:00:1f.3
f7f36000-f7f367ff : 0000:00:1f.2
f7f36000-f7f367ff : ahci
f7f37000-f7f373ff : 0000:00:1d.0
f7f37000-f7f373ff : ehci_hcd
f7f38000-f7f383ff : 0000:00:1a.0
f7f38000-f7f383ff : ehci_hcd
f7f39000-f7f39fff : 0000:00:19.0
f7f39000-f7f39fff : e1000e
f7f3a000-f7f3afff : 0000:00:16.3
f7f3c000-f7f3c00f : 0000:00:16.0
f7f3c000-f7f3c00f : mei_me
f8000000-fbffffff : PCI MMCONFIG 0000 [bus 00-3f]
f8000000-fbffffff : Reserved
f8000000-fbffffff : pnp 00:0a
fec00000-fec00fff : Reserved
fec00000-fec003ff : IOAPIC 0
fed00000-fed03fff : Reserved
fed00000-fed003ff : HPET 0
fed00000-fed003ff : PNP0103:00
fed10000-fed17fff : pnp 00:0a
fed18000-fed18fff : pnp 00:0a
fed19000-fed19fff : pnp 00:0a
fed1c000-fed44fff : Reserved
fed1c000-fed1ffff : pnp 00:0a
fed1f410-fed1f414 : iTCO_wdt.0.auto
fed20000-fed3ffff : pnp 00:0a
fed40000-fed44fff : pnp 00:00
fed40000-fed44fff : TPM
fed45000-fed8ffff : pnp 00:0a
fed90000-fed93fff : Reserved
fed90000-fed90fff : dmar0 *****DMAR is under reserved region,
current parser ignores******
fee00000-fee00fff : Local APIC
fee00000-fee00fff : Reserved
ff000000-ffffffff : Reserved
ff000000-ffffffff : INT0800:00
ff000000-ffffffff : pnp 00:0a
100000000-21dffffff : System RAM
1fe800000-1ff4031d0 : Kernel code
1ff4031d1-1ffe928ff : Kernel data
200119000-200361fff : Kernel bss
21e000000-21fffffff : RAM buffer
ubuntu@ubuntu-HP8300:~$
HAKKI
--
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.