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.

Reply via email to