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.

Reply via email to