Hi Hakki, you found the right spot to exclude something from the generally blacklisted "reserved" but i still have a few comments, find them inline.
Am Sun, 5 May 2019 12:35:49 -0700 schrieb Hakkı Kurumahmut <[email protected]>: > 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 This is confusing. I guess parse_iomem_tree should return (regions, dmar_regions). Here you mix returning by value and by ref. > 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 This is just a copy of find_hpet_regions. I would suggest to change the original to i.e. "find_regions_by_name(tree, name)" And now call that once with name="HPET" and once with name="dmar". > # 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 This is now incorrect. Change to i.e. "# generally blacklisted, with a few exceptions" Henning > 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.
