6 Mayıs 2019 Pazartesi 11:43:48 UTC+3 tarihinde Henning Schild yazdı:
> 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.

In my first code, parse_iomem_tree() method returned (regions, dmar_regions) 
but parse_iomem_tree() of return's value is used by list extend method


Below code is not interpreted by Python. 

(regions, dmar_regions).extend(IOMemRegionTree.parse_iomem_tree(tree))

Thus, I had to do it as a parameter. 



> >      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".

It will prevent repeated coding. good advice.
 
> 
> >      # 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