All of lore.kernel.org
 help / color / mirror / Atom feed
diff for duplicates of <1491952371.7236.22.camel@kernel.crashing.org>

diff --git a/a/1.txt b/N1/1.txt
index d724faa..4f5ece3 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,242 +1,205 @@
-On Tue, 2017-04-11 at 15:08 +0100, Lorenzo Pieralisi wrote:
-> On Tue, Apr 11, 2017 at 11:38:26PM +1000, Benjamin Herrenschmidt wrote:
-> > On Tue, 2017-04-11 at 13:28 +0100, Lorenzo Pieralisi wrote:
-> > > This patch series[1] is a v3 of a previous version:
-> > > 
-> > > v2: https://lkml.org/lkml/2017/3/27/220
-> > 
-> > I am not a fan of this at All.
-> > 
-> > That whole concept of "ioremap_nopost" is simply not applicable to the
-> > majority of architectures and certainly not in a way that can apply to
-> > arbitrary mappings.
-> > 
-> > It's also very wrong to provide a "default" operation whose semantics
-> > are weaker than what it's supposed to implement. Very wrong actually.
-> > People will use it assuming the non-posted behaviour and things will
-> > break in subtle way when it cannot be provided.
-> 
-> Well, what's very wrong for you it is not very wrong for others
-> (it is just v3, that's fine, see thread below).
-
-Maybe, but I don't see in what universe it is ok to have something
-defined for the stronger ordering semantics it provide silently
-fallback to weaker semantics.
-
-> I can easily make ioremap_nopost() mirror ioremap_uc() (ie return
-> NULL unless overriden so that basically you can't use in on an arch
-> that can't provide its semantics) but then that becomes very wrong
-> for other reviewers.
-
-Those reviewers are WRONG :-)
-
-> https://lkml.org/lkml/2017/4/6/396
-> 
-> > What exactly are you trying to fix here ?
-> 
-> I wrote in the commit logs and cover letter what I am fixing here.
-
-Right right, what *actual bug you have observed* are you trying to fix
-?
-
-I'm pretty such close to all non-x86 archs had that "problem" since the
-dawn of time and it has never hurt anybody.
-
-That said, I don't think it makes sense to "solve" it by creating a
-"generic" mapping semantic that is basically impossible to implement on
-most architectures out there (and cannot be emulated).
-
-This is a problem to be solved by the bridge itself. If ARM has a
-mapping attribute to make stores non-posted, keep this an ARM specific
-attribute at this stage I'd say.
-
-> Anyway:
-> 
-> "The PCI specifications (Rev 3.0, 3.2.5 "Transaction Ordering and
-> Posting") mandate non-posted configuration transactions. As further
-> highlighted in the PCIe specifications (4.0 - Rev0.3, "Ordering
-> Considerations for the Enhanced Configuration Access Mechanism"),
-> through ECAM and ECAM-derivative configuration mechanism, the memory
-> mapped transactions from the host CPU into Configuration Requests on the
-> PCI express fabric may create ordering problems for software because
-> writes to memory address are typically posted transactions (unless the
-> architecture can enforce through virtual address mapping non-posted
-> write transactions behaviour) but writes to Configuration Space are not
-> posted on the PCI express fabric."
-> 
-> On ARM64:
-> 
-> "This rule is reinforced by the ARM v8 architecture reference manual
-> (issue A.k, Early Write Acknowledgment) that explicitly recommends
-> that No Early Write Acknowledgment attribute should be used to map
-> PCI configuration (write) transactions."
-> 
-> > If a given PCIe host bridge (architecture specific) require a special
-> > sauce to provide the illusion of non-posting, then implement this in
-> > the actual root complex code.
-> > 
-> > BTW. I'm pretty sure we "accidentally" made config writes posted at
-> > least to the PHB on a number of powerpc systems forever and we *never*
-> > had a problem because of it ;)
-> 
-> Ok so we should ignore the PCIe specifications and ARM v8 reference
-> manual waiting for a kernel bug to appear ? Is that what you suggest
-> doing ?
-> 
-> Lorenzo
-> 
-> > > v2 -> v3:
-> > > 	- Created a default ioremap_nopost() implementation in a
-> > > separate
-> > > 	  asm-generic header and patched all arches to make use of it
-> > > 	- Removed PCI drivers patches from the series to simplify the
-> > > 	  review, they will be posted separately once the
-> > > ioremap_nopost()
-> > > 	  interface is settled
-> > > 	- Fixed devm_ioremap_* BUS offset comments and implemented
-> > > 	  nopost interface on top of it
-> > > 	- Added collected tags
-> > > 
-> > > v1: https://lkml.org/lkml/2017/2/27/228
-> > > 
-> > > v1 -> v2:
-> > > 	- Changed pci_remap_cfgspace() to more generic ioremap_nopost()
-> > > 	  interface
-> > > 	- Added pgprot_nonposted
-> > > 	- Fixed build errors on arches not relying on asm-generic
-> > > headers
-> > > 	- Added PCI versatile host controller driver patch
-> > > 	- Added missing config space remapping to hisilicon host
-> > > controller
-> > > 
-> > > ---------------------
-> > > Original cover letter
-> > > ---------------------
-> > > 
-> > > PCI local bus specifications (Rev3.0, 3.2.5 "Transaction Ordering
-> > > and Posting") strictly require PCI configuration and I/O Address
-> > > space
-> > > write transactions to be non-posted.
-> > > 
-> > > Current crop of DT/ACPI PCI host controllers drivers relies on
-> > > the ioremap interface to map ECAM and ECAM-derivative PCI config
-> > > regions and pci_remap_iospace() to create a VMA for mapping
-> > > PCI host bridge I/O Address space transactions to CPU virtual address
-> > > space.
-> > > 
-> > > On some platforms (ie ARM/ARM64) ioremap fails to comply with the PCI
-> > > configuration non-posted write transactions requirement, because it
-> > > provides a memory mapping that issues "bufferable" or, in PCI terms
-> > > "posted" write transactions. Likewise, the current
-> > > pci_remap_iospace()
-> > > implementation maps the physical address range that the PCI
-> > > translates
-> > > to I/O space cycles to virtual address space through pgprot_device()
-> > > attributes that on eg ARM64 provides a memory mapping issuing
-> > > posted writes transactions, which is not PCI specifications
-> > > compliant.
-> > > 
-> > > This patch series[1] addresses both issues in one go:
-> > > 
-> > > - It updates the pci_remap_iospace() function to use a page mapping
-> > >   that guarantees non-posted write transactions for I/O space
-> > > addresses
-> > > - It adds a kernel API to remap PCI config space resources, so that
-> > >   architecture can override it with a mapping implementation that
-> > >   guarantees PCI specifications compliancy wrt non-posted write
-> > >   configuration transactions
-> > > - It updates all PCI host controller implementations (and the generic
-> > >   ECAM layer) to use the newly introduced mapping interface
-> > > 
-> > > Tested on Juno ECAM based interface (DT/ACPI).
-> > > 
-> > > Non-ECAM PCI host controller drivers patches need checking to make
-> > > sure that:
-> > > 
-> > > - I patched the correct resource region mapping for config space
-> > > - There are not any other ways to ensure posted-write completion
-> > >   in the respective pci_ops that make the relevant patch unnecessary
-> > > 
-> > > [1]
-> > > git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/linux.git
-> > > pci/config-io-mappings-fix-v3
-> > > 
-> > > Lorenzo Pieralisi (32):
-> > >   PCI: remove __weak tag from pci_remap_iospace()
-> > >   asm-generic/pgtable.h: introduce pgprot_nonposted remap attribute
-> > >   PCI: fix pci_remap_iospace() remap attribute
-> > >   asm-generic: add ioremap_nopost() remap interface
-> > >   alpha: include default ioremap_nopost() implementation
-> > >   avr32: include default ioremap_nopost() implementation
-> > >   arc: include default ioremap_nopost() implementation
-> > >   cris: include default ioremap_nopost() implementation
-> > >   frv: include default ioremap_nopost() implementation
-> > >   hexagon: include default ioremap_nopost() implementation
-> > >   ia64: include default ioremap_nopost() implementation
-> > >   m32r: include default ioremap_nopost() implementation
-> > >   m68k: include default ioremap_nopost() implementation
-> > >   metag: include default ioremap_nopost() implementation
-> > >   microblaze: include default ioremap_nopost() implementation
-> > >   mips: include default ioremap_nopost() implementation
-> > >   mn10300: include default ioremap_nopost() implementation
-> > >   nios2: include default ioremap_nopost() implementation
-> > >   openrisc: include default ioremap_nopost() implementation
-> > >   parisc: include default ioremap_nopost() implementation
-> > >   powerpc: include default ioremap_nopost() implementation
-> > >   s390: include default ioremap_nopost() implementation
-> > >   sh: include default ioremap_nopost() implementation
-> > >   sparc: include default ioremap_nopost() implementation
-> > >   tile: include default ioremap_nopost() implementation
-> > >   unicore32: include default ioremap_nopost() implementation
-> > >   x86: include default ioremap_nopost() implementation
-> > >   xtensa: include default ioremap_nopost() implementation
-> > >   arm64: implement ioremap_nopost() interface
-> > >   arm: implement ioremap_nopost() interface
-> > >   lib: fix Devres devm_ioremap_* offset parameter kerneldoc
-> > > description
-> > >   lib: implement Devres ioremap_nopost() interface
-> > > 
-> > >  Documentation/driver-model/devres.txt |  3 ++
-> > >  arch/alpha/include/asm/io.h           |  1 +
-> > >  arch/arc/include/asm/io.h             |  1 +
-> > >  arch/arm/include/asm/io.h             |  9 ++++
-> > >  arch/arm/mm/ioremap.c                 |  7 +++
-> > >  arch/arm/mm/nommu.c                   |  9 ++++
-> > >  arch/arm64/include/asm/io.h           | 12 +++++
-> > >  arch/avr32/include/asm/io.h           |  1 +
-> > >  arch/cris/include/asm/io.h            |  1 +
-> > >  arch/frv/include/asm/io.h             |  1 +
-> > >  arch/hexagon/include/asm/io.h         |  2 +
-> > >  arch/ia64/include/asm/io.h            |  1 +
-> > >  arch/m32r/include/asm/io.h            |  1 +
-> > >  arch/m68k/include/asm/io.h            |  1 +
-> > >  arch/metag/include/asm/io.h           |  2 +
-> > >  arch/microblaze/include/asm/io.h      |  1 +
-> > >  arch/mips/include/asm/io.h            |  1 +
-> > >  arch/mn10300/include/asm/io.h         |  1 +
-> > >  arch/nios2/include/asm/io.h           |  1 +
-> > >  arch/openrisc/include/asm/io.h        |  2 +
-> > >  arch/parisc/include/asm/io.h          |  1 +
-> > >  arch/powerpc/include/asm/io.h         |  1 +
-> > >  arch/s390/include/asm/io.h            |  1 +
-> > >  arch/sh/include/asm/io.h              |  1 +
-> > >  arch/sparc/include/asm/io.h           |  1 +
-> > >  arch/tile/include/asm/io.h            |  1 +
-> > >  arch/unicore32/include/asm/io.h       |  1 +
-> > >  arch/x86/include/asm/io.h             |  1 +
-> > >  arch/xtensa/include/asm/io.h          |  1 +
-> > >  drivers/pci/pci.c                     |  4 +-
-> > >  include/asm-generic/ioremap-nopost.h  |  9 ++++
-> > >  include/asm-generic/pgtable.h         |  4 ++
-> > >  include/linux/device.h                |  2 +
-> > >  include/linux/io.h                    |  2 +
-> > >  lib/devres.c                          | 84
-> > > +++++++++++++++++++++++++++++++++--
-> > >  35 files changed, 167 insertions(+), 5 deletions(-)
-> > >  create mode 100644 include/asm-generic/ioremap-nopost.h
-> > > 
-
-_______________________________________________
-linux-arm-kernel mailing list
-linux-arm-kernel@lists.infradead.org
-http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
+T24gVHVlLCAyMDE3LTA0LTExIGF0IDE1OjA4ICswMTAwLCBMb3JlbnpvIFBpZXJhbGlzaSB3cm90
+ZToKPiBPbiBUdWUsIEFwciAxMSwgMjAxNyBhdCAxMTozODoyNlBNICsxMDAwLCBCZW5qYW1pbiBI
+ZXJyZW5zY2htaWR0IHdyb3RlOgo+ID4gT24gVHVlLCAyMDE3LTA0LTExIGF0IDEzOjI4ICswMTAw
+LCBMb3JlbnpvIFBpZXJhbGlzaSB3cm90ZToKPiA+ID4gVGhpcyBwYXRjaCBzZXJpZXNbMV0gaXMg
+YSB2MyBvZiBhIHByZXZpb3VzIHZlcnNpb246Cj4gPiA+IAo+ID4gPiB2MjogaHR0cHM6Ly9sa21s
+Lm9yZy9sa21sLzIwMTcvMy8yNy8yMjAKPiA+IAo+ID4gSSBhbSBub3QgYSBmYW4gb2YgdGhpcyBh
+dCBBbGwuCj4gPiAKPiA+IFRoYXQgd2hvbGUgY29uY2VwdCBvZiAiaW9yZW1hcF9ub3Bvc3QiIGlz
+IHNpbXBseSBub3QgYXBwbGljYWJsZSB0byB0aGUKPiA+IG1ham9yaXR5IG9mIGFyY2hpdGVjdHVy
+ZXMgYW5kIGNlcnRhaW5seSBub3QgaW4gYSB3YXkgdGhhdCBjYW4gYXBwbHkgdG8KPiA+IGFyYml0
+cmFyeSBtYXBwaW5ncy4KPiA+IAo+ID4gSXQncyBhbHNvIHZlcnkgd3JvbmcgdG8gcHJvdmlkZSBh
+ICJkZWZhdWx0IiBvcGVyYXRpb24gd2hvc2Ugc2VtYW50aWNzCj4gPiBhcmUgd2Vha2VyIHRoYW4g
+d2hhdCBpdCdzIHN1cHBvc2VkIHRvIGltcGxlbWVudC4gVmVyeSB3cm9uZyBhY3R1YWxseS4KPiA+
+IFBlb3BsZSB3aWxsIHVzZSBpdCBhc3N1bWluZyB0aGUgbm9uLXBvc3RlZCBiZWhhdmlvdXIgYW5k
+IHRoaW5ncyB3aWxsCj4gPiBicmVhayBpbiBzdWJ0bGUgd2F5IHdoZW4gaXQgY2Fubm90IGJlIHBy
+b3ZpZGVkLgo+IAo+IFdlbGwsIHdoYXQncyB2ZXJ5IHdyb25nIGZvciB5b3UgaXQgaXMgbm90IHZl
+cnkgd3JvbmcgZm9yIG90aGVycwo+IChpdCBpcyBqdXN0IHYzLCB0aGF0J3MgZmluZSwgc2VlIHRo
+cmVhZCBiZWxvdykuCgpNYXliZSwgYnV0IEkgZG9uJ3Qgc2VlIGluIHdoYXQgdW5pdmVyc2UgaXQg
+aXMgb2sgdG8gaGF2ZSBzb21ldGhpbmcKZGVmaW5lZCBmb3IgdGhlIHN0cm9uZ2VyIG9yZGVyaW5n
+IHNlbWFudGljcyBpdCBwcm92aWRlIHNpbGVudGx5CmZhbGxiYWNrIHRvIHdlYWtlciBzZW1hbnRp
+Y3MuCgo+IEkgY2FuIGVhc2lseSBtYWtlIGlvcmVtYXBfbm9wb3N0KCkgbWlycm9yIGlvcmVtYXBf
+dWMoKSAoaWUgcmV0dXJuCj4gTlVMTCB1bmxlc3Mgb3ZlcnJpZGVuIHNvIHRoYXQgYmFzaWNhbGx5
+IHlvdSBjYW4ndCB1c2UgaW4gb24gYW4gYXJjaAo+IHRoYXQgY2FuJ3QgcHJvdmlkZSBpdHMgc2Vt
+YW50aWNzKSBidXQgdGhlbiB0aGF0IGJlY29tZXMgdmVyeSB3cm9uZwo+IGZvciBvdGhlciByZXZp
+ZXdlcnMuCgpUaG9zZSByZXZpZXdlcnMgYXJlIFdST05HIDotKQoKPiBodHRwczovL2xrbWwub3Jn
+L2xrbWwvMjAxNy80LzYvMzk2Cj4gCj4gPiBXaGF0IGV4YWN0bHkgYXJlIHlvdSB0cnlpbmcgdG8g
+Zml4IGhlcmUgPwo+IAo+IEkgd3JvdGUgaW4gdGhlIGNvbW1pdCBsb2dzIGFuZCBjb3ZlciBsZXR0
+ZXIgd2hhdCBJIGFtIGZpeGluZyBoZXJlLgoKUmlnaHQgcmlnaHQsIHdoYXQgKmFjdHVhbCBidWcg
+eW91IGhhdmUgb2JzZXJ2ZWQqIGFyZSB5b3UgdHJ5aW5nIHRvIGZpeAo/CgpJJ20gcHJldHR5IHN1
+Y2ggY2xvc2UgdG8gYWxsIG5vbi14ODYgYXJjaHMgaGFkIHRoYXQgInByb2JsZW0iIHNpbmNlIHRo
+ZQpkYXduIG9mIHRpbWUgYW5kIGl0IGhhcyBuZXZlciBodXJ0IGFueWJvZHkuCgpUaGF0IHNhaWQs
+IEkgZG9uJ3QgdGhpbmsgaXQgbWFrZXMgc2Vuc2UgdG8gInNvbHZlIiBpdCBieSBjcmVhdGluZyBh
+CiJnZW5lcmljIiBtYXBwaW5nIHNlbWFudGljIHRoYXQgaXMgYmFzaWNhbGx5IGltcG9zc2libGUg
+dG8gaW1wbGVtZW50IG9uCm1vc3QgYXJjaGl0ZWN0dXJlcyBvdXQgdGhlcmUgKGFuZCBjYW5ub3Qg
+YmUgZW11bGF0ZWQpLgoKVGhpcyBpcyBhIHByb2JsZW0gdG8gYmUgc29sdmVkIGJ5IHRoZSBicmlk
+Z2UgaXRzZWxmLiBJZiBBUk0gaGFzIGEKbWFwcGluZyBhdHRyaWJ1dGUgdG8gbWFrZSBzdG9yZXMg
+bm9uLXBvc3RlZCwga2VlcCB0aGlzIGFuIEFSTSBzcGVjaWZpYwphdHRyaWJ1dGUgYXQgdGhpcyBz
+dGFnZSBJJ2Qgc2F5LgoKPiBBbnl3YXk6Cj4gCj4gIlRoZSBQQ0kgc3BlY2lmaWNhdGlvbnMgKFJl
+diAzLjAsIDMuMi41ICJUcmFuc2FjdGlvbiBPcmRlcmluZyBhbmQKPiBQb3N0aW5nIikgbWFuZGF0
+ZSBub24tcG9zdGVkIGNvbmZpZ3VyYXRpb24gdHJhbnNhY3Rpb25zLiBBcyBmdXJ0aGVyCj4gaGln
+aGxpZ2h0ZWQgaW4gdGhlIFBDSWUgc3BlY2lmaWNhdGlvbnMgKDQuMCAtIFJldjAuMywgIk9yZGVy
+aW5nCj4gQ29uc2lkZXJhdGlvbnMgZm9yIHRoZSBFbmhhbmNlZCBDb25maWd1cmF0aW9uIEFjY2Vz
+cyBNZWNoYW5pc20iKSwKPiB0aHJvdWdoIEVDQU0gYW5kIEVDQU0tZGVyaXZhdGl2ZSBjb25maWd1
+cmF0aW9uIG1lY2hhbmlzbSwgdGhlIG1lbW9yeQo+IG1hcHBlZCB0cmFuc2FjdGlvbnMgZnJvbSB0
+aGUgaG9zdCBDUFUgaW50byBDb25maWd1cmF0aW9uIFJlcXVlc3RzIG9uIHRoZQo+IFBDSSBleHBy
+ZXNzIGZhYnJpYyBtYXkgY3JlYXRlIG9yZGVyaW5nIHByb2JsZW1zIGZvciBzb2Z0d2FyZSBiZWNh
+dXNlCj4gd3JpdGVzIHRvIG1lbW9yeSBhZGRyZXNzIGFyZSB0eXBpY2FsbHkgcG9zdGVkIHRyYW5z
+YWN0aW9ucyAodW5sZXNzIHRoZQo+IGFyY2hpdGVjdHVyZSBjYW4gZW5mb3JjZSB0aHJvdWdoIHZp
+cnR1YWwgYWRkcmVzcyBtYXBwaW5nIG5vbi1wb3N0ZWQKPiB3cml0ZSB0cmFuc2FjdGlvbnMgYmVo
+YXZpb3VyKSBidXQgd3JpdGVzIHRvIENvbmZpZ3VyYXRpb24gU3BhY2UgYXJlIG5vdAo+IHBvc3Rl
+ZCBvbiB0aGUgUENJIGV4cHJlc3MgZmFicmljLiIKPiAKPiBPbiBBUk02NDoKPiAKPiAiVGhpcyBy
+dWxlIGlzIHJlaW5mb3JjZWQgYnkgdGhlIEFSTSB2OCBhcmNoaXRlY3R1cmUgcmVmZXJlbmNlIG1h
+bnVhbAo+IChpc3N1ZSBBLmssIEVhcmx5IFdyaXRlIEFja25vd2xlZGdtZW50KSB0aGF0IGV4cGxp
+Y2l0bHkgcmVjb21tZW5kcwo+IHRoYXQgTm8gRWFybHkgV3JpdGUgQWNrbm93bGVkZ21lbnQgYXR0
+cmlidXRlIHNob3VsZCBiZSB1c2VkIHRvIG1hcAo+IFBDSSBjb25maWd1cmF0aW9uICh3cml0ZSkg
+dHJhbnNhY3Rpb25zLiIKPiAKPiA+IElmIGEgZ2l2ZW4gUENJZSBob3N0IGJyaWRnZSAoYXJjaGl0
+ZWN0dXJlIHNwZWNpZmljKSByZXF1aXJlIGEgc3BlY2lhbAo+ID4gc2F1Y2UgdG8gcHJvdmlkZSB0
+aGUgaWxsdXNpb24gb2Ygbm9uLXBvc3RpbmcsIHRoZW4gaW1wbGVtZW50IHRoaXMgaW4KPiA+IHRo
+ZSBhY3R1YWwgcm9vdCBjb21wbGV4IGNvZGUuCj4gPiAKPiA+IEJUVy4gSSdtIHByZXR0eSBzdXJl
+IHdlICJhY2NpZGVudGFsbHkiIG1hZGUgY29uZmlnIHdyaXRlcyBwb3N0ZWQgYXQKPiA+IGxlYXN0
+IHRvIHRoZSBQSEIgb24gYSBudW1iZXIgb2YgcG93ZXJwYyBzeXN0ZW1zIGZvcmV2ZXIgYW5kIHdl
+ICpuZXZlcioKPiA+IGhhZCBhIHByb2JsZW0gYmVjYXVzZSBvZiBpdCA7KQo+IAo+IE9rIHNvIHdl
+IHNob3VsZCBpZ25vcmUgdGhlIFBDSWUgc3BlY2lmaWNhdGlvbnMgYW5kIEFSTSB2OCByZWZlcmVu
+Y2UKPiBtYW51YWwgd2FpdGluZyBmb3IgYSBrZXJuZWwgYnVnIHRvIGFwcGVhciA/IElzIHRoYXQg
+d2hhdCB5b3Ugc3VnZ2VzdAo+IGRvaW5nID8KPiAKPiBMb3JlbnpvCj4gCj4gPiA+IHYyIC0+IHYz
+Ogo+ID4gPiAJLSBDcmVhdGVkIGEgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0
+aW9uIGluIGEKPiA+ID4gc2VwYXJhdGUKPiA+ID4gCcKgwqBhc20tZ2VuZXJpYyBoZWFkZXIgYW5k
+IHBhdGNoZWQgYWxsIGFyY2hlcyB0byBtYWtlIHVzZSBvZiBpdAo+ID4gPiAJLSBSZW1vdmVkIFBD
+SSBkcml2ZXJzIHBhdGNoZXMgZnJvbSB0aGUgc2VyaWVzIHRvIHNpbXBsaWZ5IHRoZQo+ID4gPiAJ
+wqDCoHJldmlldywgdGhleSB3aWxsIGJlIHBvc3RlZCBzZXBhcmF0ZWx5IG9uY2UgdGhlCj4gPiA+
+IGlvcmVtYXBfbm9wb3N0KCkKPiA+ID4gCcKgwqBpbnRlcmZhY2UgaXMgc2V0dGxlZAo+ID4gPiAJ
+LSBGaXhlZCBkZXZtX2lvcmVtYXBfKiBCVVMgb2Zmc2V0IGNvbW1lbnRzIGFuZCBpbXBsZW1lbnRl
+ZAo+ID4gPiAJwqDCoG5vcG9zdCBpbnRlcmZhY2Ugb24gdG9wIG9mIGl0Cj4gPiA+IAktIEFkZGVk
+IGNvbGxlY3RlZCB0YWdzCj4gPiA+IAo+ID4gPiB2MTogaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIw
+MTcvMi8yNy8yMjgKPiA+ID4gCj4gPiA+IHYxIC0+IHYyOgo+ID4gPiAJLSBDaGFuZ2VkIHBjaV9y
+ZW1hcF9jZmdzcGFjZSgpIHRvIG1vcmUgZ2VuZXJpYyBpb3JlbWFwX25vcG9zdCgpCj4gPiA+IAnC
+oMKgaW50ZXJmYWNlCj4gPiA+IAktIEFkZGVkIHBncHJvdF9ub25wb3N0ZWQKPiA+ID4gCS0gRml4
+ZWQgYnVpbGQgZXJyb3JzIG9uIGFyY2hlcyBub3QgcmVseWluZyBvbiBhc20tZ2VuZXJpYwo+ID4g
+PiBoZWFkZXJzCj4gPiA+IAktIEFkZGVkIFBDSSB2ZXJzYXRpbGUgaG9zdCBjb250cm9sbGVyIGRy
+aXZlciBwYXRjaAo+ID4gPiAJLSBBZGRlZCBtaXNzaW5nIGNvbmZpZyBzcGFjZSByZW1hcHBpbmcg
+dG8gaGlzaWxpY29uIGhvc3QKPiA+ID4gY29udHJvbGxlcgo+ID4gPiAKPiA+ID4gLS0tLS0tLS0t
+LS0tLS0tLS0tLS0tCj4gPiA+IE9yaWdpbmFsIGNvdmVyIGxldHRlcgo+ID4gPiAtLS0tLS0tLS0t
+LS0tLS0tLS0tLS0KPiA+ID4gCj4gPiA+IFBDSSBsb2NhbCBidXMgc3BlY2lmaWNhdGlvbnMgKFJl
+djMuMCwgMy4yLjUgIlRyYW5zYWN0aW9uIE9yZGVyaW5nCj4gPiA+IGFuZCBQb3N0aW5nIikgc3Ry
+aWN0bHkgcmVxdWlyZSBQQ0kgY29uZmlndXJhdGlvbiBhbmQgSS9PIEFkZHJlc3MKPiA+ID4gc3Bh
+Y2UKPiA+ID4gd3JpdGUgdHJhbnNhY3Rpb25zIHRvIGJlIG5vbi1wb3N0ZWQuCj4gPiA+IAo+ID4g
+PiBDdXJyZW50IGNyb3Agb2YgRFQvQUNQSSBQQ0kgaG9zdCBjb250cm9sbGVycyBkcml2ZXJzIHJl
+bGllcyBvbgo+ID4gPiB0aGUgaW9yZW1hcCBpbnRlcmZhY2UgdG8gbWFwIEVDQU0gYW5kIEVDQU0t
+ZGVyaXZhdGl2ZSBQQ0kgY29uZmlnCj4gPiA+IHJlZ2lvbnMgYW5kIHBjaV9yZW1hcF9pb3NwYWNl
+KCkgdG8gY3JlYXRlIGEgVk1BIGZvciBtYXBwaW5nCj4gPiA+IFBDSSBob3N0IGJyaWRnZSBJL08g
+QWRkcmVzcyBzcGFjZSB0cmFuc2FjdGlvbnMgdG8gQ1BVIHZpcnR1YWwgYWRkcmVzcwo+ID4gPiBz
+cGFjZS4KPiA+ID4gCj4gPiA+IE9uIHNvbWUgcGxhdGZvcm1zIChpZSBBUk0vQVJNNjQpIGlvcmVt
+YXAgZmFpbHMgdG8gY29tcGx5IHdpdGggdGhlIFBDSQo+ID4gPiBjb25maWd1cmF0aW9uIG5vbi1w
+b3N0ZWQgd3JpdGUgdHJhbnNhY3Rpb25zIHJlcXVpcmVtZW50LCBiZWNhdXNlIGl0Cj4gPiA+IHBy
+b3ZpZGVzIGEgbWVtb3J5IG1hcHBpbmcgdGhhdCBpc3N1ZXMgImJ1ZmZlcmFibGUiIG9yLCBpbiBQ
+Q0kgdGVybXMKPiA+ID4gInBvc3RlZCIgd3JpdGUgdHJhbnNhY3Rpb25zLiBMaWtld2lzZSwgdGhl
+IGN1cnJlbnQKPiA+ID4gcGNpX3JlbWFwX2lvc3BhY2UoKQo+ID4gPiBpbXBsZW1lbnRhdGlvbiBt
+YXBzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIHRoYXQgdGhlIFBDSQo+ID4gPiB0cmFuc2xh
+dGVzCj4gPiA+IHRvIEkvTyBzcGFjZSBjeWNsZXMgdG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRo
+cm91Z2ggcGdwcm90X2RldmljZSgpCj4gPiA+IGF0dHJpYnV0ZXMgdGhhdCBvbiBlZyBBUk02NCBw
+cm92aWRlcyBhIG1lbW9yeSBtYXBwaW5nIGlzc3VpbmcKPiA+ID4gcG9zdGVkIHdyaXRlcyB0cmFu
+c2FjdGlvbnMsIHdoaWNoIGlzIG5vdCBQQ0kgc3BlY2lmaWNhdGlvbnMKPiA+ID4gY29tcGxpYW50
+Lgo+ID4gPiAKPiA+ID4gVGhpcyBwYXRjaCBzZXJpZXNbMV0gYWRkcmVzc2VzIGJvdGggaXNzdWVz
+IGluIG9uZSBnbzoKPiA+ID4gCj4gPiA+IC0gSXQgdXBkYXRlcyB0aGUgcGNpX3JlbWFwX2lvc3Bh
+Y2UoKSBmdW5jdGlvbiB0byB1c2UgYSBwYWdlIG1hcHBpbmcKPiA+ID4gwqAgdGhhdCBndWFyYW50
+ZWVzIG5vbi1wb3N0ZWQgd3JpdGUgdHJhbnNhY3Rpb25zIGZvciBJL08gc3BhY2UKPiA+ID4gYWRk
+cmVzc2VzCj4gPiA+IC0gSXQgYWRkcyBhIGtlcm5lbCBBUEkgdG8gcmVtYXAgUENJIGNvbmZpZyBz
+cGFjZSByZXNvdXJjZXMsIHNvIHRoYXQKPiA+ID4gwqAgYXJjaGl0ZWN0dXJlIGNhbiBvdmVycmlk
+ZSBpdCB3aXRoIGEgbWFwcGluZyBpbXBsZW1lbnRhdGlvbiB0aGF0Cj4gPiA+IMKgIGd1YXJhbnRl
+ZXMgUENJIHNwZWNpZmljYXRpb25zIGNvbXBsaWFuY3kgd3J0IG5vbi1wb3N0ZWQgd3JpdGUKPiA+
+ID4gwqAgY29uZmlndXJhdGlvbiB0cmFuc2FjdGlvbnMKPiA+ID4gLSBJdCB1cGRhdGVzIGFsbCBQ
+Q0kgaG9zdCBjb250cm9sbGVyIGltcGxlbWVudGF0aW9ucyAoYW5kIHRoZSBnZW5lcmljCj4gPiA+
+IMKgIEVDQU0gbGF5ZXIpIHRvIHVzZSB0aGUgbmV3bHkgaW50cm9kdWNlZCBtYXBwaW5nIGludGVy
+ZmFjZQo+ID4gPiAKPiA+ID4gVGVzdGVkIG9uIEp1bm8gRUNBTSBiYXNlZCBpbnRlcmZhY2UgKERU
+L0FDUEkpLgo+ID4gPiAKPiA+ID4gTm9uLUVDQU0gUENJIGhvc3QgY29udHJvbGxlciBkcml2ZXJz
+IHBhdGNoZXMgbmVlZCBjaGVja2luZyB0byBtYWtlCj4gPiA+IHN1cmUgdGhhdDoKPiA+ID4gCj4g
+PiA+IC0gSSBwYXRjaGVkIHRoZSBjb3JyZWN0IHJlc291cmNlIHJlZ2lvbiBtYXBwaW5nIGZvciBj
+b25maWcgc3BhY2UKPiA+ID4gLSBUaGVyZSBhcmUgbm90IGFueSBvdGhlciB3YXlzIHRvIGVuc3Vy
+ZSBwb3N0ZWQtd3JpdGUgY29tcGxldGlvbgo+ID4gPiDCoCBpbiB0aGUgcmVzcGVjdGl2ZSBwY2lf
+b3BzIHRoYXQgbWFrZSB0aGUgcmVsZXZhbnQgcGF0Y2ggdW5uZWNlc3NhcnkKPiA+ID4gCj4gPiA+
+IFsxXQo+ID4gPiBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQv
+bHBpZXJhbGlzaS9saW51eC5naXQKPiA+ID4gcGNpL2NvbmZpZy1pby1tYXBwaW5ncy1maXgtdjMK
+PiA+ID4gCj4gPiA+IExvcmVuem8gUGllcmFsaXNpICgzMik6Cj4gPiA+IMKgIFBDSTogcmVtb3Zl
+IF9fd2VhayB0YWcgZnJvbSBwY2lfcmVtYXBfaW9zcGFjZSgpCj4gPiA+IMKgIGFzbS1nZW5lcmlj
+L3BndGFibGUuaDogaW50cm9kdWNlIHBncHJvdF9ub25wb3N0ZWQgcmVtYXAgYXR0cmlidXRlCj4g
+PiA+IMKgIFBDSTogZml4IHBjaV9yZW1hcF9pb3NwYWNlKCkgcmVtYXAgYXR0cmlidXRlCj4gPiA+
+IMKgIGFzbS1nZW5lcmljOiBhZGQgaW9yZW1hcF9ub3Bvc3QoKSByZW1hcCBpbnRlcmZhY2UKPiA+
+ID4gwqAgYWxwaGE6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0
+aW9uCj4gPiA+IMKgIGF2cjMyOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBs
+ZW1lbnRhdGlvbgo+ID4gPiDCoCBhcmM6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgp
+IGltcGxlbWVudGF0aW9uCj4gPiA+IMKgIGNyaXM6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25v
+cG9zdCgpIGltcGxlbWVudGF0aW9uCj4gPiA+IMKgIGZydjogaW5jbHVkZSBkZWZhdWx0IGlvcmVt
+YXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiA+ID4gwqAgaGV4YWdvbjogaW5jbHVkZSBkZWZh
+dWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiA+ID4gwqAgaWE2NDogaW5jbHVk
+ZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiA+ID4gwqAgbTMycjog
+aW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiA+ID4gwqAg
+bTY4azogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiA+
+ID4gwqAgbWV0YWc6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0
+aW9uCj4gPiA+IMKgIG1pY3JvYmxhemU6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgp
+IGltcGxlbWVudGF0aW9uCj4gPiA+IMKgIG1pcHM6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25v
+cG9zdCgpIGltcGxlbWVudGF0aW9uCj4gPiA+IMKgIG1uMTAzMDA6IGluY2x1ZGUgZGVmYXVsdCBp
+b3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4gPiA+IMKgIG5pb3MyOiBpbmNsdWRlIGRl
+ZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlvbgo+ID4gPiDCoCBvcGVucmlzYzog
+aW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiA+ID4gwqAg
+cGFyaXNjOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlvbgo+
+ID4gPiDCoCBwb3dlcnBjOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1l
+bnRhdGlvbgo+ID4gPiDCoCBzMzkwOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBp
+bXBsZW1lbnRhdGlvbgo+ID4gPiDCoCBzaDogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0
+KCkgaW1wbGVtZW50YXRpb24KPiA+ID4gwqAgc3BhcmM6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFw
+X25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4gPiA+IMKgIHRpbGU6IGluY2x1ZGUgZGVmYXVsdCBp
+b3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4gPiA+IMKgIHVuaWNvcmUzMjogaW5jbHVk
+ZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiA+ID4gwqAgeDg2OiBp
+bmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlvbgo+ID4gPiDCoCB4
+dGVuc2E6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4g
+PiA+IMKgIGFybTY0OiBpbXBsZW1lbnQgaW9yZW1hcF9ub3Bvc3QoKSBpbnRlcmZhY2UKPiA+ID4g
+wqAgYXJtOiBpbXBsZW1lbnQgaW9yZW1hcF9ub3Bvc3QoKSBpbnRlcmZhY2UKPiA+ID4gwqAgbGli
+OiBmaXggRGV2cmVzIGRldm1faW9yZW1hcF8qIG9mZnNldCBwYXJhbWV0ZXIga2VybmVsZG9jCj4g
+PiA+IGRlc2NyaXB0aW9uCj4gPiA+IMKgIGxpYjogaW1wbGVtZW50IERldnJlcyBpb3JlbWFwX25v
+cG9zdCgpIGludGVyZmFjZQo+ID4gPiAKPiA+ID4gwqBEb2N1bWVudGF0aW9uL2RyaXZlci1tb2Rl
+bC9kZXZyZXMudHh0IHzCoMKgMyArKwo+ID4gPiDCoGFyY2gvYWxwaGEvaW5jbHVkZS9hc20vaW8u
+aMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+ID4gPiDCoGFyY2gvYXJjL2luY2x1ZGUv
+YXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gPiA+IMKgYXJjaC9h
+cm0vaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqA5ICsrKysK
+PiA+ID4gwqBhcmNoL2FybS9tbS9pb3JlbWFwLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
+wqDCoMKgfMKgwqA3ICsrKwo+ID4gPiDCoGFyY2gvYXJtL21tL25vbW11LmPCoMKgwqDCoMKgwqDC
+oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgOSArKysrCj4gPiA+IMKgYXJjaC9hcm02NC9p
+bmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgMTIgKysrKysKPiA+ID4gwqBh
+cmNoL2F2cjMyL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsK
+PiA+ID4gwqBhcmNoL2NyaXMvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
+oHzCoMKgMSArCj4gPiA+IMKgYXJjaC9mcnYvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKg
+wqDCoMKgwqDCoMKgfMKgwqAxICsKPiA+ID4gwqBhcmNoL2hleGFnb24vaW5jbHVkZS9hc20vaW8u
+aMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMiArCj4gPiA+IMKgYXJjaC9pYTY0L2luY2x1ZGUvYXNt
+L2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+ID4gPiDCoGFyY2gvbTMyci9p
+bmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiA+ID4gwqBh
+cmNoL202OGsvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSAr
+Cj4gPiA+IMKgYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDC
+oHzCoMKgMiArCj4gPiA+IMKgYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDC
+oMKgwqB8wqDCoDEgKwo+ID4gPiDCoGFyY2gvbWlwcy9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDC
+oMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiA+ID4gwqBhcmNoL21uMTAzMDAvaW5jbHVkZS9hc20v
+aW8uaMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gPiA+IMKgYXJjaC9uaW9zMi9pbmNsdWRl
+L2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gPiA+IMKgYXJjaC9vcGVu
+cmlzYy9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoHzCoMKgMiArCj4gPiA+IMKgYXJj
+aC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiA+
+ID4gwqBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKg
+MSArCj4gPiA+IMKgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDC
+oMKgwqB8wqDCoDEgKwo+ID4gPiDCoGFyY2gvc2gvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDC
+oMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+ID4gPiDCoGFyY2gvc3BhcmMvaW5jbHVkZS9hc20v
+aW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+ID4gPiDCoGFyY2gvdGlsZS9pbmNs
+dWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiA+ID4gwqBhcmNo
+L3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+ID4gPiDC
+oGFyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKg
+MSArCj4gPiA+IMKgYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDC
+oMKgfMKgwqAxICsKPiA+ID4gwqBkcml2ZXJzL3BjaS9wY2kuY8KgwqDCoMKgwqDCoMKgwqDCoMKg
+wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgNCArLQo+ID4gPiDCoGluY2x1ZGUvYXNtLWdlbmVy
+aWMvaW9yZW1hcC1ub3Bvc3QuaMKgwqB8wqDCoDkgKysrKwo+ID4gPiDCoGluY2x1ZGUvYXNtLWdl
+bmVyaWMvcGd0YWJsZS5owqDCoMKgwqDCoMKgwqDCoMKgfMKgwqA0ICsrCj4gPiA+IMKgaW5jbHVk
+ZS9saW51eC9kZXZpY2UuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAyICsK
+PiA+ID4gwqBpbmNsdWRlL2xpbnV4L2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
+oMKgwqDCoMKgfMKgwqAyICsKPiA+ID4gwqBsaWIvZGV2cmVzLmPCoMKgwqDCoMKgwqDCoMKgwqDC
+oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCA4NAo+ID4gPiArKysrKysrKysrKysr
+KysrKysrKysrKysrKysrKysrKystLQo+ID4gPiDCoDM1IGZpbGVzIGNoYW5nZWQsIDE2NyBpbnNl
+cnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQo+ID4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNs
+dWRlL2FzbS1nZW5lcmljL2lvcmVtYXAtbm9wb3N0LmgKPiA+ID4gCgpfX19fX19fX19fX19fX19f
+X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg
+bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu
+ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==
diff --git a/a/content_digest b/N1/content_digest
index 5da58c3..9c2033a 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -28,250 +28,236 @@
   Catalin Marinas <catalin.marinas@arm.com>
   Matt Turner <mattst88@gmail.com>
   Haavard Skinnemoen <hskinnemoen@gmail.com>
- " Fenghua Yu <fenghua.yu@intel.co>\0"
+  Fenghua Yu <fenghua.yu@intel.com>
+  James Hogan <james.hogan@imgtec.com>
+  Chris Metcalf <cmetcalf@mellanox.com>
+  Arnd Bergmann <arnd@arndb.de>
+  Heiko Carstens <heiko.carstens@de.ibm.com>
+  Stefan Kristiansson <stefan.kristiansson@saunalahti.fi>
+  Mikael Starvik <starvik@axis.com>
+  Ivan Kokshaysky <ink@jurassic.park.msu.ru>
+  Bjorn Helgaas <bhelgaas@google.com>
+  Stafford Horne <shorne@gmail.com>
+  linux-arm-kernel@lists.infradead.org
+  Richard Henderson <rth@twiddle.net>
+  Chris Zankel <chris@zankel.net>
+  Michal Simek <monstr@monstr.eu>
+  Tony Luck <tony.luck@intel.com>
+  Vineet Gupta <vgupta@synopsys.com>
+  linux-kernel@vger.kernel.org
+  Ralf Baechle <ralf@linux-mips.org>
+  Richard Kuo <rkuo@codeaurora.org>
+  Niklas Cassel <nks@flawful.org>
+  Luis R. Rodriguez <mcgrof@kernel.org>
+  Martin Schwidefsky <schwidefsky@de.ibm.com>
+  Ley Foon Tan <lftan@altera.com>
+ " David S. Miller <davem@davemloft.net>\0"
  "\00:1\0"
  "b\0"
- "On Tue, 2017-04-11 at 15:08 +0100, Lorenzo Pieralisi wrote:\n"
- "> On Tue, Apr 11, 2017 at 11:38:26PM +1000, Benjamin Herrenschmidt wrote:\n"
- "> > On Tue, 2017-04-11 at 13:28 +0100, Lorenzo Pieralisi wrote:\n"
- "> > > This patch series[1] is a v3 of a previous version:\n"
- "> > > \n"
- "> > > v2: https://lkml.org/lkml/2017/3/27/220\n"
- "> > \n"
- "> > I am not a fan of this at All.\n"
- "> > \n"
- "> > That whole concept of \"ioremap_nopost\" is simply not applicable to the\n"
- "> > majority of architectures and certainly not in a way that can apply to\n"
- "> > arbitrary mappings.\n"
- "> > \n"
- "> > It's also very wrong to provide a \"default\" operation whose semantics\n"
- "> > are weaker than what it's supposed to implement. Very wrong actually.\n"
- "> > People will use it assuming the non-posted behaviour and things will\n"
- "> > break in subtle way when it cannot be provided.\n"
- "> \n"
- "> Well, what's very wrong for you it is not very wrong for others\n"
- "> (it is just v3, that's fine, see thread below).\n"
- "\n"
- "Maybe, but I don't see in what universe it is ok to have something\n"
- "defined for the stronger ordering semantics it provide silently\n"
- "fallback to weaker semantics.\n"
- "\n"
- "> I can easily make ioremap_nopost() mirror ioremap_uc() (ie return\n"
- "> NULL unless overriden so that basically you can't use in on an arch\n"
- "> that can't provide its semantics) but then that becomes very wrong\n"
- "> for other reviewers.\n"
- "\n"
- "Those reviewers are WRONG :-)\n"
- "\n"
- "> https://lkml.org/lkml/2017/4/6/396\n"
- "> \n"
- "> > What exactly are you trying to fix here ?\n"
- "> \n"
- "> I wrote in the commit logs and cover letter what I am fixing here.\n"
- "\n"
- "Right right, what *actual bug you have observed* are you trying to fix\n"
- "?\n"
- "\n"
- "I'm pretty such close to all non-x86 archs had that \"problem\" since the\n"
- "dawn of time and it has never hurt anybody.\n"
- "\n"
- "That said, I don't think it makes sense to \"solve\" it by creating a\n"
- "\"generic\" mapping semantic that is basically impossible to implement on\n"
- "most architectures out there (and cannot be emulated).\n"
- "\n"
- "This is a problem to be solved by the bridge itself. If ARM has a\n"
- "mapping attribute to make stores non-posted, keep this an ARM specific\n"
- "attribute at this stage I'd say.\n"
- "\n"
- "> Anyway:\n"
- "> \n"
- "> \"The PCI specifications (Rev 3.0, 3.2.5 \"Transaction Ordering and\n"
- "> Posting\") mandate non-posted configuration transactions. As further\n"
- "> highlighted in the PCIe specifications (4.0 - Rev0.3, \"Ordering\n"
- "> Considerations for the Enhanced Configuration Access Mechanism\"),\n"
- "> through ECAM and ECAM-derivative configuration mechanism, the memory\n"
- "> mapped transactions from the host CPU into Configuration Requests on the\n"
- "> PCI express fabric may create ordering problems for software because\n"
- "> writes to memory address are typically posted transactions (unless the\n"
- "> architecture can enforce through virtual address mapping non-posted\n"
- "> write transactions behaviour) but writes to Configuration Space are not\n"
- "> posted on the PCI express fabric.\"\n"
- "> \n"
- "> On ARM64:\n"
- "> \n"
- "> \"This rule is reinforced by the ARM v8 architecture reference manual\n"
- "> (issue A.k, Early Write Acknowledgment) that explicitly recommends\n"
- "> that No Early Write Acknowledgment attribute should be used to map\n"
- "> PCI configuration (write) transactions.\"\n"
- "> \n"
- "> > If a given PCIe host bridge (architecture specific) require a special\n"
- "> > sauce to provide the illusion of non-posting, then implement this in\n"
- "> > the actual root complex code.\n"
- "> > \n"
- "> > BTW. I'm pretty sure we \"accidentally\" made config writes posted at\n"
- "> > least to the PHB on a number of powerpc systems forever and we *never*\n"
- "> > had a problem because of it ;)\n"
- "> \n"
- "> Ok so we should ignore the PCIe specifications and ARM v8 reference\n"
- "> manual waiting for a kernel bug to appear ? Is that what you suggest\n"
- "> doing ?\n"
- "> \n"
- "> Lorenzo\n"
- "> \n"
- "> > > v2 -> v3:\n"
- "> > > \t- Created a default ioremap_nopost() implementation in a\n"
- "> > > separate\n"
- "> > > \t\302\240\302\240asm-generic header and patched all arches to make use of it\n"
- "> > > \t- Removed PCI drivers patches from the series to simplify the\n"
- "> > > \t\302\240\302\240review, they will be posted separately once the\n"
- "> > > ioremap_nopost()\n"
- "> > > \t\302\240\302\240interface is settled\n"
- "> > > \t- Fixed devm_ioremap_* BUS offset comments and implemented\n"
- "> > > \t\302\240\302\240nopost interface on top of it\n"
- "> > > \t- Added collected tags\n"
- "> > > \n"
- "> > > v1: https://lkml.org/lkml/2017/2/27/228\n"
- "> > > \n"
- "> > > v1 -> v2:\n"
- "> > > \t- Changed pci_remap_cfgspace() to more generic ioremap_nopost()\n"
- "> > > \t\302\240\302\240interface\n"
- "> > > \t- Added pgprot_nonposted\n"
- "> > > \t- Fixed build errors on arches not relying on asm-generic\n"
- "> > > headers\n"
- "> > > \t- Added PCI versatile host controller driver patch\n"
- "> > > \t- Added missing config space remapping to hisilicon host\n"
- "> > > controller\n"
- "> > > \n"
- "> > > ---------------------\n"
- "> > > Original cover letter\n"
- "> > > ---------------------\n"
- "> > > \n"
- "> > > PCI local bus specifications (Rev3.0, 3.2.5 \"Transaction Ordering\n"
- "> > > and Posting\") strictly require PCI configuration and I/O Address\n"
- "> > > space\n"
- "> > > write transactions to be non-posted.\n"
- "> > > \n"
- "> > > Current crop of DT/ACPI PCI host controllers drivers relies on\n"
- "> > > the ioremap interface to map ECAM and ECAM-derivative PCI config\n"
- "> > > regions and pci_remap_iospace() to create a VMA for mapping\n"
- "> > > PCI host bridge I/O Address space transactions to CPU virtual address\n"
- "> > > space.\n"
- "> > > \n"
- "> > > On some platforms (ie ARM/ARM64) ioremap fails to comply with the PCI\n"
- "> > > configuration non-posted write transactions requirement, because it\n"
- "> > > provides a memory mapping that issues \"bufferable\" or, in PCI terms\n"
- "> > > \"posted\" write transactions. Likewise, the current\n"
- "> > > pci_remap_iospace()\n"
- "> > > implementation maps the physical address range that the PCI\n"
- "> > > translates\n"
- "> > > to I/O space cycles to virtual address space through pgprot_device()\n"
- "> > > attributes that on eg ARM64 provides a memory mapping issuing\n"
- "> > > posted writes transactions, which is not PCI specifications\n"
- "> > > compliant.\n"
- "> > > \n"
- "> > > This patch series[1] addresses both issues in one go:\n"
- "> > > \n"
- "> > > - It updates the pci_remap_iospace() function to use a page mapping\n"
- "> > > \302\240 that guarantees non-posted write transactions for I/O space\n"
- "> > > addresses\n"
- "> > > - It adds a kernel API to remap PCI config space resources, so that\n"
- "> > > \302\240 architecture can override it with a mapping implementation that\n"
- "> > > \302\240 guarantees PCI specifications compliancy wrt non-posted write\n"
- "> > > \302\240 configuration transactions\n"
- "> > > - It updates all PCI host controller implementations (and the generic\n"
- "> > > \302\240 ECAM layer) to use the newly introduced mapping interface\n"
- "> > > \n"
- "> > > Tested on Juno ECAM based interface (DT/ACPI).\n"
- "> > > \n"
- "> > > Non-ECAM PCI host controller drivers patches need checking to make\n"
- "> > > sure that:\n"
- "> > > \n"
- "> > > - I patched the correct resource region mapping for config space\n"
- "> > > - There are not any other ways to ensure posted-write completion\n"
- "> > > \302\240 in the respective pci_ops that make the relevant patch unnecessary\n"
- "> > > \n"
- "> > > [1]\n"
- "> > > git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/linux.git\n"
- "> > > pci/config-io-mappings-fix-v3\n"
- "> > > \n"
- "> > > Lorenzo Pieralisi (32):\n"
- "> > > \302\240 PCI: remove __weak tag from pci_remap_iospace()\n"
- "> > > \302\240 asm-generic/pgtable.h: introduce pgprot_nonposted remap attribute\n"
- "> > > \302\240 PCI: fix pci_remap_iospace() remap attribute\n"
- "> > > \302\240 asm-generic: add ioremap_nopost() remap interface\n"
- "> > > \302\240 alpha: include default ioremap_nopost() implementation\n"
- "> > > \302\240 avr32: include default ioremap_nopost() implementation\n"
- "> > > \302\240 arc: include default ioremap_nopost() implementation\n"
- "> > > \302\240 cris: include default ioremap_nopost() implementation\n"
- "> > > \302\240 frv: include default ioremap_nopost() implementation\n"
- "> > > \302\240 hexagon: include default ioremap_nopost() implementation\n"
- "> > > \302\240 ia64: include default ioremap_nopost() implementation\n"
- "> > > \302\240 m32r: include default ioremap_nopost() implementation\n"
- "> > > \302\240 m68k: include default ioremap_nopost() implementation\n"
- "> > > \302\240 metag: include default ioremap_nopost() implementation\n"
- "> > > \302\240 microblaze: include default ioremap_nopost() implementation\n"
- "> > > \302\240 mips: include default ioremap_nopost() implementation\n"
- "> > > \302\240 mn10300: include default ioremap_nopost() implementation\n"
- "> > > \302\240 nios2: include default ioremap_nopost() implementation\n"
- "> > > \302\240 openrisc: include default ioremap_nopost() implementation\n"
- "> > > \302\240 parisc: include default ioremap_nopost() implementation\n"
- "> > > \302\240 powerpc: include default ioremap_nopost() implementation\n"
- "> > > \302\240 s390: include default ioremap_nopost() implementation\n"
- "> > > \302\240 sh: include default ioremap_nopost() implementation\n"
- "> > > \302\240 sparc: include default ioremap_nopost() implementation\n"
- "> > > \302\240 tile: include default ioremap_nopost() implementation\n"
- "> > > \302\240 unicore32: include default ioremap_nopost() implementation\n"
- "> > > \302\240 x86: include default ioremap_nopost() implementation\n"
- "> > > \302\240 xtensa: include default ioremap_nopost() implementation\n"
- "> > > \302\240 arm64: implement ioremap_nopost() interface\n"
- "> > > \302\240 arm: implement ioremap_nopost() interface\n"
- "> > > \302\240 lib: fix Devres devm_ioremap_* offset parameter kerneldoc\n"
- "> > > description\n"
- "> > > \302\240 lib: implement Devres ioremap_nopost() interface\n"
- "> > > \n"
- "> > > \302\240Documentation/driver-model/devres.txt |\302\240\302\2403 ++\n"
- "> > > \302\240arch/alpha/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/arc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/arm/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2409 ++++\n"
- "> > > \302\240arch/arm/mm/ioremap.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2407 +++\n"
- "> > > \302\240arch/arm/mm/nommu.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2409 ++++\n"
- "> > > \302\240arch/arm64/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240| 12 +++++\n"
- "> > > \302\240arch/avr32/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/cris/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/frv/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/hexagon/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n"
- "> > > \302\240arch/ia64/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/m32r/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/m68k/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/metag/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n"
- "> > > \302\240arch/microblaze/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/mips/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/mn10300/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/nios2/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/openrisc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n"
- "> > > \302\240arch/parisc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/powerpc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/s390/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/sh/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/sparc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/tile/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/unicore32/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/x86/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/xtensa/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240drivers/pci/pci.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2404 +-\n"
- "> > > \302\240include/asm-generic/ioremap-nopost.h\302\240\302\240|\302\240\302\2409 ++++\n"
- "> > > \302\240include/asm-generic/pgtable.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2404 ++\n"
- "> > > \302\240include/linux/device.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n"
- "> > > \302\240include/linux/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n"
- "> > > \302\240lib/devres.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240| 84\n"
- "> > > +++++++++++++++++++++++++++++++++--\n"
- "> > > \302\24035 files changed, 167 insertions(+), 5 deletions(-)\n"
- "> > > \302\240create mode 100644 include/asm-generic/ioremap-nopost.h\n"
- "> > > \n"
- "\n"
- "_______________________________________________\n"
- "linux-arm-kernel mailing list\n"
- "linux-arm-kernel@lists.infradead.org\n"
- http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
+ "T24gVHVlLCAyMDE3LTA0LTExIGF0IDE1OjA4ICswMTAwLCBMb3JlbnpvIFBpZXJhbGlzaSB3cm90\n"
+ "ZToKPiBPbiBUdWUsIEFwciAxMSwgMjAxNyBhdCAxMTozODoyNlBNICsxMDAwLCBCZW5qYW1pbiBI\n"
+ "ZXJyZW5zY2htaWR0IHdyb3RlOgo+ID4gT24gVHVlLCAyMDE3LTA0LTExIGF0IDEzOjI4ICswMTAw\n"
+ "LCBMb3JlbnpvIFBpZXJhbGlzaSB3cm90ZToKPiA+ID4gVGhpcyBwYXRjaCBzZXJpZXNbMV0gaXMg\n"
+ "YSB2MyBvZiBhIHByZXZpb3VzIHZlcnNpb246Cj4gPiA+IAo+ID4gPiB2MjogaHR0cHM6Ly9sa21s\n"
+ "Lm9yZy9sa21sLzIwMTcvMy8yNy8yMjAKPiA+IAo+ID4gSSBhbSBub3QgYSBmYW4gb2YgdGhpcyBh\n"
+ "dCBBbGwuCj4gPiAKPiA+IFRoYXQgd2hvbGUgY29uY2VwdCBvZiAiaW9yZW1hcF9ub3Bvc3QiIGlz\n"
+ "IHNpbXBseSBub3QgYXBwbGljYWJsZSB0byB0aGUKPiA+IG1ham9yaXR5IG9mIGFyY2hpdGVjdHVy\n"
+ "ZXMgYW5kIGNlcnRhaW5seSBub3QgaW4gYSB3YXkgdGhhdCBjYW4gYXBwbHkgdG8KPiA+IGFyYml0\n"
+ "cmFyeSBtYXBwaW5ncy4KPiA+IAo+ID4gSXQncyBhbHNvIHZlcnkgd3JvbmcgdG8gcHJvdmlkZSBh\n"
+ "ICJkZWZhdWx0IiBvcGVyYXRpb24gd2hvc2Ugc2VtYW50aWNzCj4gPiBhcmUgd2Vha2VyIHRoYW4g\n"
+ "d2hhdCBpdCdzIHN1cHBvc2VkIHRvIGltcGxlbWVudC4gVmVyeSB3cm9uZyBhY3R1YWxseS4KPiA+\n"
+ "IFBlb3BsZSB3aWxsIHVzZSBpdCBhc3N1bWluZyB0aGUgbm9uLXBvc3RlZCBiZWhhdmlvdXIgYW5k\n"
+ "IHRoaW5ncyB3aWxsCj4gPiBicmVhayBpbiBzdWJ0bGUgd2F5IHdoZW4gaXQgY2Fubm90IGJlIHBy\n"
+ "b3ZpZGVkLgo+IAo+IFdlbGwsIHdoYXQncyB2ZXJ5IHdyb25nIGZvciB5b3UgaXQgaXMgbm90IHZl\n"
+ "cnkgd3JvbmcgZm9yIG90aGVycwo+IChpdCBpcyBqdXN0IHYzLCB0aGF0J3MgZmluZSwgc2VlIHRo\n"
+ "cmVhZCBiZWxvdykuCgpNYXliZSwgYnV0IEkgZG9uJ3Qgc2VlIGluIHdoYXQgdW5pdmVyc2UgaXQg\n"
+ "aXMgb2sgdG8gaGF2ZSBzb21ldGhpbmcKZGVmaW5lZCBmb3IgdGhlIHN0cm9uZ2VyIG9yZGVyaW5n\n"
+ "IHNlbWFudGljcyBpdCBwcm92aWRlIHNpbGVudGx5CmZhbGxiYWNrIHRvIHdlYWtlciBzZW1hbnRp\n"
+ "Y3MuCgo+IEkgY2FuIGVhc2lseSBtYWtlIGlvcmVtYXBfbm9wb3N0KCkgbWlycm9yIGlvcmVtYXBf\n"
+ "dWMoKSAoaWUgcmV0dXJuCj4gTlVMTCB1bmxlc3Mgb3ZlcnJpZGVuIHNvIHRoYXQgYmFzaWNhbGx5\n"
+ "IHlvdSBjYW4ndCB1c2UgaW4gb24gYW4gYXJjaAo+IHRoYXQgY2FuJ3QgcHJvdmlkZSBpdHMgc2Vt\n"
+ "YW50aWNzKSBidXQgdGhlbiB0aGF0IGJlY29tZXMgdmVyeSB3cm9uZwo+IGZvciBvdGhlciByZXZp\n"
+ "ZXdlcnMuCgpUaG9zZSByZXZpZXdlcnMgYXJlIFdST05HIDotKQoKPiBodHRwczovL2xrbWwub3Jn\n"
+ "L2xrbWwvMjAxNy80LzYvMzk2Cj4gCj4gPiBXaGF0IGV4YWN0bHkgYXJlIHlvdSB0cnlpbmcgdG8g\n"
+ "Zml4IGhlcmUgPwo+IAo+IEkgd3JvdGUgaW4gdGhlIGNvbW1pdCBsb2dzIGFuZCBjb3ZlciBsZXR0\n"
+ "ZXIgd2hhdCBJIGFtIGZpeGluZyBoZXJlLgoKUmlnaHQgcmlnaHQsIHdoYXQgKmFjdHVhbCBidWcg\n"
+ "eW91IGhhdmUgb2JzZXJ2ZWQqIGFyZSB5b3UgdHJ5aW5nIHRvIGZpeAo/CgpJJ20gcHJldHR5IHN1\n"
+ "Y2ggY2xvc2UgdG8gYWxsIG5vbi14ODYgYXJjaHMgaGFkIHRoYXQgInByb2JsZW0iIHNpbmNlIHRo\n"
+ "ZQpkYXduIG9mIHRpbWUgYW5kIGl0IGhhcyBuZXZlciBodXJ0IGFueWJvZHkuCgpUaGF0IHNhaWQs\n"
+ "IEkgZG9uJ3QgdGhpbmsgaXQgbWFrZXMgc2Vuc2UgdG8gInNvbHZlIiBpdCBieSBjcmVhdGluZyBh\n"
+ "CiJnZW5lcmljIiBtYXBwaW5nIHNlbWFudGljIHRoYXQgaXMgYmFzaWNhbGx5IGltcG9zc2libGUg\n"
+ "dG8gaW1wbGVtZW50IG9uCm1vc3QgYXJjaGl0ZWN0dXJlcyBvdXQgdGhlcmUgKGFuZCBjYW5ub3Qg\n"
+ "YmUgZW11bGF0ZWQpLgoKVGhpcyBpcyBhIHByb2JsZW0gdG8gYmUgc29sdmVkIGJ5IHRoZSBicmlk\n"
+ "Z2UgaXRzZWxmLiBJZiBBUk0gaGFzIGEKbWFwcGluZyBhdHRyaWJ1dGUgdG8gbWFrZSBzdG9yZXMg\n"
+ "bm9uLXBvc3RlZCwga2VlcCB0aGlzIGFuIEFSTSBzcGVjaWZpYwphdHRyaWJ1dGUgYXQgdGhpcyBz\n"
+ "dGFnZSBJJ2Qgc2F5LgoKPiBBbnl3YXk6Cj4gCj4gIlRoZSBQQ0kgc3BlY2lmaWNhdGlvbnMgKFJl\n"
+ "diAzLjAsIDMuMi41ICJUcmFuc2FjdGlvbiBPcmRlcmluZyBhbmQKPiBQb3N0aW5nIikgbWFuZGF0\n"
+ "ZSBub24tcG9zdGVkIGNvbmZpZ3VyYXRpb24gdHJhbnNhY3Rpb25zLiBBcyBmdXJ0aGVyCj4gaGln\n"
+ "aGxpZ2h0ZWQgaW4gdGhlIFBDSWUgc3BlY2lmaWNhdGlvbnMgKDQuMCAtIFJldjAuMywgIk9yZGVy\n"
+ "aW5nCj4gQ29uc2lkZXJhdGlvbnMgZm9yIHRoZSBFbmhhbmNlZCBDb25maWd1cmF0aW9uIEFjY2Vz\n"
+ "cyBNZWNoYW5pc20iKSwKPiB0aHJvdWdoIEVDQU0gYW5kIEVDQU0tZGVyaXZhdGl2ZSBjb25maWd1\n"
+ "cmF0aW9uIG1lY2hhbmlzbSwgdGhlIG1lbW9yeQo+IG1hcHBlZCB0cmFuc2FjdGlvbnMgZnJvbSB0\n"
+ "aGUgaG9zdCBDUFUgaW50byBDb25maWd1cmF0aW9uIFJlcXVlc3RzIG9uIHRoZQo+IFBDSSBleHBy\n"
+ "ZXNzIGZhYnJpYyBtYXkgY3JlYXRlIG9yZGVyaW5nIHByb2JsZW1zIGZvciBzb2Z0d2FyZSBiZWNh\n"
+ "dXNlCj4gd3JpdGVzIHRvIG1lbW9yeSBhZGRyZXNzIGFyZSB0eXBpY2FsbHkgcG9zdGVkIHRyYW5z\n"
+ "YWN0aW9ucyAodW5sZXNzIHRoZQo+IGFyY2hpdGVjdHVyZSBjYW4gZW5mb3JjZSB0aHJvdWdoIHZp\n"
+ "cnR1YWwgYWRkcmVzcyBtYXBwaW5nIG5vbi1wb3N0ZWQKPiB3cml0ZSB0cmFuc2FjdGlvbnMgYmVo\n"
+ "YXZpb3VyKSBidXQgd3JpdGVzIHRvIENvbmZpZ3VyYXRpb24gU3BhY2UgYXJlIG5vdAo+IHBvc3Rl\n"
+ "ZCBvbiB0aGUgUENJIGV4cHJlc3MgZmFicmljLiIKPiAKPiBPbiBBUk02NDoKPiAKPiAiVGhpcyBy\n"
+ "dWxlIGlzIHJlaW5mb3JjZWQgYnkgdGhlIEFSTSB2OCBhcmNoaXRlY3R1cmUgcmVmZXJlbmNlIG1h\n"
+ "bnVhbAo+IChpc3N1ZSBBLmssIEVhcmx5IFdyaXRlIEFja25vd2xlZGdtZW50KSB0aGF0IGV4cGxp\n"
+ "Y2l0bHkgcmVjb21tZW5kcwo+IHRoYXQgTm8gRWFybHkgV3JpdGUgQWNrbm93bGVkZ21lbnQgYXR0\n"
+ "cmlidXRlIHNob3VsZCBiZSB1c2VkIHRvIG1hcAo+IFBDSSBjb25maWd1cmF0aW9uICh3cml0ZSkg\n"
+ "dHJhbnNhY3Rpb25zLiIKPiAKPiA+IElmIGEgZ2l2ZW4gUENJZSBob3N0IGJyaWRnZSAoYXJjaGl0\n"
+ "ZWN0dXJlIHNwZWNpZmljKSByZXF1aXJlIGEgc3BlY2lhbAo+ID4gc2F1Y2UgdG8gcHJvdmlkZSB0\n"
+ "aGUgaWxsdXNpb24gb2Ygbm9uLXBvc3RpbmcsIHRoZW4gaW1wbGVtZW50IHRoaXMgaW4KPiA+IHRo\n"
+ "ZSBhY3R1YWwgcm9vdCBjb21wbGV4IGNvZGUuCj4gPiAKPiA+IEJUVy4gSSdtIHByZXR0eSBzdXJl\n"
+ "IHdlICJhY2NpZGVudGFsbHkiIG1hZGUgY29uZmlnIHdyaXRlcyBwb3N0ZWQgYXQKPiA+IGxlYXN0\n"
+ "IHRvIHRoZSBQSEIgb24gYSBudW1iZXIgb2YgcG93ZXJwYyBzeXN0ZW1zIGZvcmV2ZXIgYW5kIHdl\n"
+ "ICpuZXZlcioKPiA+IGhhZCBhIHByb2JsZW0gYmVjYXVzZSBvZiBpdCA7KQo+IAo+IE9rIHNvIHdl\n"
+ "IHNob3VsZCBpZ25vcmUgdGhlIFBDSWUgc3BlY2lmaWNhdGlvbnMgYW5kIEFSTSB2OCByZWZlcmVu\n"
+ "Y2UKPiBtYW51YWwgd2FpdGluZyBmb3IgYSBrZXJuZWwgYnVnIHRvIGFwcGVhciA/IElzIHRoYXQg\n"
+ "d2hhdCB5b3Ugc3VnZ2VzdAo+IGRvaW5nID8KPiAKPiBMb3JlbnpvCj4gCj4gPiA+IHYyIC0+IHYz\n"
+ "Ogo+ID4gPiAJLSBDcmVhdGVkIGEgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0\n"
+ "aW9uIGluIGEKPiA+ID4gc2VwYXJhdGUKPiA+ID4gCcKgwqBhc20tZ2VuZXJpYyBoZWFkZXIgYW5k\n"
+ "IHBhdGNoZWQgYWxsIGFyY2hlcyB0byBtYWtlIHVzZSBvZiBpdAo+ID4gPiAJLSBSZW1vdmVkIFBD\n"
+ "SSBkcml2ZXJzIHBhdGNoZXMgZnJvbSB0aGUgc2VyaWVzIHRvIHNpbXBsaWZ5IHRoZQo+ID4gPiAJ\n"
+ "wqDCoHJldmlldywgdGhleSB3aWxsIGJlIHBvc3RlZCBzZXBhcmF0ZWx5IG9uY2UgdGhlCj4gPiA+\n"
+ "IGlvcmVtYXBfbm9wb3N0KCkKPiA+ID4gCcKgwqBpbnRlcmZhY2UgaXMgc2V0dGxlZAo+ID4gPiAJ\n"
+ "LSBGaXhlZCBkZXZtX2lvcmVtYXBfKiBCVVMgb2Zmc2V0IGNvbW1lbnRzIGFuZCBpbXBsZW1lbnRl\n"
+ "ZAo+ID4gPiAJwqDCoG5vcG9zdCBpbnRlcmZhY2Ugb24gdG9wIG9mIGl0Cj4gPiA+IAktIEFkZGVk\n"
+ "IGNvbGxlY3RlZCB0YWdzCj4gPiA+IAo+ID4gPiB2MTogaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIw\n"
+ "MTcvMi8yNy8yMjgKPiA+ID4gCj4gPiA+IHYxIC0+IHYyOgo+ID4gPiAJLSBDaGFuZ2VkIHBjaV9y\n"
+ "ZW1hcF9jZmdzcGFjZSgpIHRvIG1vcmUgZ2VuZXJpYyBpb3JlbWFwX25vcG9zdCgpCj4gPiA+IAnC\n"
+ "oMKgaW50ZXJmYWNlCj4gPiA+IAktIEFkZGVkIHBncHJvdF9ub25wb3N0ZWQKPiA+ID4gCS0gRml4\n"
+ "ZWQgYnVpbGQgZXJyb3JzIG9uIGFyY2hlcyBub3QgcmVseWluZyBvbiBhc20tZ2VuZXJpYwo+ID4g\n"
+ "PiBoZWFkZXJzCj4gPiA+IAktIEFkZGVkIFBDSSB2ZXJzYXRpbGUgaG9zdCBjb250cm9sbGVyIGRy\n"
+ "aXZlciBwYXRjaAo+ID4gPiAJLSBBZGRlZCBtaXNzaW5nIGNvbmZpZyBzcGFjZSByZW1hcHBpbmcg\n"
+ "dG8gaGlzaWxpY29uIGhvc3QKPiA+ID4gY29udHJvbGxlcgo+ID4gPiAKPiA+ID4gLS0tLS0tLS0t\n"
+ "LS0tLS0tLS0tLS0tCj4gPiA+IE9yaWdpbmFsIGNvdmVyIGxldHRlcgo+ID4gPiAtLS0tLS0tLS0t\n"
+ "LS0tLS0tLS0tLS0KPiA+ID4gCj4gPiA+IFBDSSBsb2NhbCBidXMgc3BlY2lmaWNhdGlvbnMgKFJl\n"
+ "djMuMCwgMy4yLjUgIlRyYW5zYWN0aW9uIE9yZGVyaW5nCj4gPiA+IGFuZCBQb3N0aW5nIikgc3Ry\n"
+ "aWN0bHkgcmVxdWlyZSBQQ0kgY29uZmlndXJhdGlvbiBhbmQgSS9PIEFkZHJlc3MKPiA+ID4gc3Bh\n"
+ "Y2UKPiA+ID4gd3JpdGUgdHJhbnNhY3Rpb25zIHRvIGJlIG5vbi1wb3N0ZWQuCj4gPiA+IAo+ID4g\n"
+ "PiBDdXJyZW50IGNyb3Agb2YgRFQvQUNQSSBQQ0kgaG9zdCBjb250cm9sbGVycyBkcml2ZXJzIHJl\n"
+ "bGllcyBvbgo+ID4gPiB0aGUgaW9yZW1hcCBpbnRlcmZhY2UgdG8gbWFwIEVDQU0gYW5kIEVDQU0t\n"
+ "ZGVyaXZhdGl2ZSBQQ0kgY29uZmlnCj4gPiA+IHJlZ2lvbnMgYW5kIHBjaV9yZW1hcF9pb3NwYWNl\n"
+ "KCkgdG8gY3JlYXRlIGEgVk1BIGZvciBtYXBwaW5nCj4gPiA+IFBDSSBob3N0IGJyaWRnZSBJL08g\n"
+ "QWRkcmVzcyBzcGFjZSB0cmFuc2FjdGlvbnMgdG8gQ1BVIHZpcnR1YWwgYWRkcmVzcwo+ID4gPiBz\n"
+ "cGFjZS4KPiA+ID4gCj4gPiA+IE9uIHNvbWUgcGxhdGZvcm1zIChpZSBBUk0vQVJNNjQpIGlvcmVt\n"
+ "YXAgZmFpbHMgdG8gY29tcGx5IHdpdGggdGhlIFBDSQo+ID4gPiBjb25maWd1cmF0aW9uIG5vbi1w\n"
+ "b3N0ZWQgd3JpdGUgdHJhbnNhY3Rpb25zIHJlcXVpcmVtZW50LCBiZWNhdXNlIGl0Cj4gPiA+IHBy\n"
+ "b3ZpZGVzIGEgbWVtb3J5IG1hcHBpbmcgdGhhdCBpc3N1ZXMgImJ1ZmZlcmFibGUiIG9yLCBpbiBQ\n"
+ "Q0kgdGVybXMKPiA+ID4gInBvc3RlZCIgd3JpdGUgdHJhbnNhY3Rpb25zLiBMaWtld2lzZSwgdGhl\n"
+ "IGN1cnJlbnQKPiA+ID4gcGNpX3JlbWFwX2lvc3BhY2UoKQo+ID4gPiBpbXBsZW1lbnRhdGlvbiBt\n"
+ "YXBzIHRoZSBwaHlzaWNhbCBhZGRyZXNzIHJhbmdlIHRoYXQgdGhlIFBDSQo+ID4gPiB0cmFuc2xh\n"
+ "dGVzCj4gPiA+IHRvIEkvTyBzcGFjZSBjeWNsZXMgdG8gdmlydHVhbCBhZGRyZXNzIHNwYWNlIHRo\n"
+ "cm91Z2ggcGdwcm90X2RldmljZSgpCj4gPiA+IGF0dHJpYnV0ZXMgdGhhdCBvbiBlZyBBUk02NCBw\n"
+ "cm92aWRlcyBhIG1lbW9yeSBtYXBwaW5nIGlzc3VpbmcKPiA+ID4gcG9zdGVkIHdyaXRlcyB0cmFu\n"
+ "c2FjdGlvbnMsIHdoaWNoIGlzIG5vdCBQQ0kgc3BlY2lmaWNhdGlvbnMKPiA+ID4gY29tcGxpYW50\n"
+ "Lgo+ID4gPiAKPiA+ID4gVGhpcyBwYXRjaCBzZXJpZXNbMV0gYWRkcmVzc2VzIGJvdGggaXNzdWVz\n"
+ "IGluIG9uZSBnbzoKPiA+ID4gCj4gPiA+IC0gSXQgdXBkYXRlcyB0aGUgcGNpX3JlbWFwX2lvc3Bh\n"
+ "Y2UoKSBmdW5jdGlvbiB0byB1c2UgYSBwYWdlIG1hcHBpbmcKPiA+ID4gwqAgdGhhdCBndWFyYW50\n"
+ "ZWVzIG5vbi1wb3N0ZWQgd3JpdGUgdHJhbnNhY3Rpb25zIGZvciBJL08gc3BhY2UKPiA+ID4gYWRk\n"
+ "cmVzc2VzCj4gPiA+IC0gSXQgYWRkcyBhIGtlcm5lbCBBUEkgdG8gcmVtYXAgUENJIGNvbmZpZyBz\n"
+ "cGFjZSByZXNvdXJjZXMsIHNvIHRoYXQKPiA+ID4gwqAgYXJjaGl0ZWN0dXJlIGNhbiBvdmVycmlk\n"
+ "ZSBpdCB3aXRoIGEgbWFwcGluZyBpbXBsZW1lbnRhdGlvbiB0aGF0Cj4gPiA+IMKgIGd1YXJhbnRl\n"
+ "ZXMgUENJIHNwZWNpZmljYXRpb25zIGNvbXBsaWFuY3kgd3J0IG5vbi1wb3N0ZWQgd3JpdGUKPiA+\n"
+ "ID4gwqAgY29uZmlndXJhdGlvbiB0cmFuc2FjdGlvbnMKPiA+ID4gLSBJdCB1cGRhdGVzIGFsbCBQ\n"
+ "Q0kgaG9zdCBjb250cm9sbGVyIGltcGxlbWVudGF0aW9ucyAoYW5kIHRoZSBnZW5lcmljCj4gPiA+\n"
+ "IMKgIEVDQU0gbGF5ZXIpIHRvIHVzZSB0aGUgbmV3bHkgaW50cm9kdWNlZCBtYXBwaW5nIGludGVy\n"
+ "ZmFjZQo+ID4gPiAKPiA+ID4gVGVzdGVkIG9uIEp1bm8gRUNBTSBiYXNlZCBpbnRlcmZhY2UgKERU\n"
+ "L0FDUEkpLgo+ID4gPiAKPiA+ID4gTm9uLUVDQU0gUENJIGhvc3QgY29udHJvbGxlciBkcml2ZXJz\n"
+ "IHBhdGNoZXMgbmVlZCBjaGVja2luZyB0byBtYWtlCj4gPiA+IHN1cmUgdGhhdDoKPiA+ID4gCj4g\n"
+ "PiA+IC0gSSBwYXRjaGVkIHRoZSBjb3JyZWN0IHJlc291cmNlIHJlZ2lvbiBtYXBwaW5nIGZvciBj\n"
+ "b25maWcgc3BhY2UKPiA+ID4gLSBUaGVyZSBhcmUgbm90IGFueSBvdGhlciB3YXlzIHRvIGVuc3Vy\n"
+ "ZSBwb3N0ZWQtd3JpdGUgY29tcGxldGlvbgo+ID4gPiDCoCBpbiB0aGUgcmVzcGVjdGl2ZSBwY2lf\n"
+ "b3BzIHRoYXQgbWFrZSB0aGUgcmVsZXZhbnQgcGF0Y2ggdW5uZWNlc3NhcnkKPiA+ID4gCj4gPiA+\n"
+ "IFsxXQo+ID4gPiBnaXQ6Ly9naXQua2VybmVsLm9yZy9wdWIvc2NtL2xpbnV4L2tlcm5lbC9naXQv\n"
+ "bHBpZXJhbGlzaS9saW51eC5naXQKPiA+ID4gcGNpL2NvbmZpZy1pby1tYXBwaW5ncy1maXgtdjMK\n"
+ "PiA+ID4gCj4gPiA+IExvcmVuem8gUGllcmFsaXNpICgzMik6Cj4gPiA+IMKgIFBDSTogcmVtb3Zl\n"
+ "IF9fd2VhayB0YWcgZnJvbSBwY2lfcmVtYXBfaW9zcGFjZSgpCj4gPiA+IMKgIGFzbS1nZW5lcmlj\n"
+ "L3BndGFibGUuaDogaW50cm9kdWNlIHBncHJvdF9ub25wb3N0ZWQgcmVtYXAgYXR0cmlidXRlCj4g\n"
+ "PiA+IMKgIFBDSTogZml4IHBjaV9yZW1hcF9pb3NwYWNlKCkgcmVtYXAgYXR0cmlidXRlCj4gPiA+\n"
+ "IMKgIGFzbS1nZW5lcmljOiBhZGQgaW9yZW1hcF9ub3Bvc3QoKSByZW1hcCBpbnRlcmZhY2UKPiA+\n"
+ "ID4gwqAgYWxwaGE6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0\n"
+ "aW9uCj4gPiA+IMKgIGF2cjMyOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBs\n"
+ "ZW1lbnRhdGlvbgo+ID4gPiDCoCBhcmM6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgp\n"
+ "IGltcGxlbWVudGF0aW9uCj4gPiA+IMKgIGNyaXM6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25v\n"
+ "cG9zdCgpIGltcGxlbWVudGF0aW9uCj4gPiA+IMKgIGZydjogaW5jbHVkZSBkZWZhdWx0IGlvcmVt\n"
+ "YXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiA+ID4gwqAgaGV4YWdvbjogaW5jbHVkZSBkZWZh\n"
+ "dWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiA+ID4gwqAgaWE2NDogaW5jbHVk\n"
+ "ZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiA+ID4gwqAgbTMycjog\n"
+ "aW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiA+ID4gwqAg\n"
+ "bTY4azogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiA+\n"
+ "ID4gwqAgbWV0YWc6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0\n"
+ "aW9uCj4gPiA+IMKgIG1pY3JvYmxhemU6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgp\n"
+ "IGltcGxlbWVudGF0aW9uCj4gPiA+IMKgIG1pcHM6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25v\n"
+ "cG9zdCgpIGltcGxlbWVudGF0aW9uCj4gPiA+IMKgIG1uMTAzMDA6IGluY2x1ZGUgZGVmYXVsdCBp\n"
+ "b3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4gPiA+IMKgIG5pb3MyOiBpbmNsdWRlIGRl\n"
+ "ZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlvbgo+ID4gPiDCoCBvcGVucmlzYzog\n"
+ "aW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiA+ID4gwqAg\n"
+ "cGFyaXNjOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlvbgo+\n"
+ "ID4gPiDCoCBwb3dlcnBjOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1l\n"
+ "bnRhdGlvbgo+ID4gPiDCoCBzMzkwOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBp\n"
+ "bXBsZW1lbnRhdGlvbgo+ID4gPiDCoCBzaDogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0\n"
+ "KCkgaW1wbGVtZW50YXRpb24KPiA+ID4gwqAgc3BhcmM6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFw\n"
+ "X25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4gPiA+IMKgIHRpbGU6IGluY2x1ZGUgZGVmYXVsdCBp\n"
+ "b3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4gPiA+IMKgIHVuaWNvcmUzMjogaW5jbHVk\n"
+ "ZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiA+ID4gwqAgeDg2OiBp\n"
+ "bmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlvbgo+ID4gPiDCoCB4\n"
+ "dGVuc2E6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4g\n"
+ "PiA+IMKgIGFybTY0OiBpbXBsZW1lbnQgaW9yZW1hcF9ub3Bvc3QoKSBpbnRlcmZhY2UKPiA+ID4g\n"
+ "wqAgYXJtOiBpbXBsZW1lbnQgaW9yZW1hcF9ub3Bvc3QoKSBpbnRlcmZhY2UKPiA+ID4gwqAgbGli\n"
+ "OiBmaXggRGV2cmVzIGRldm1faW9yZW1hcF8qIG9mZnNldCBwYXJhbWV0ZXIga2VybmVsZG9jCj4g\n"
+ "PiA+IGRlc2NyaXB0aW9uCj4gPiA+IMKgIGxpYjogaW1wbGVtZW50IERldnJlcyBpb3JlbWFwX25v\n"
+ "cG9zdCgpIGludGVyZmFjZQo+ID4gPiAKPiA+ID4gwqBEb2N1bWVudGF0aW9uL2RyaXZlci1tb2Rl\n"
+ "bC9kZXZyZXMudHh0IHzCoMKgMyArKwo+ID4gPiDCoGFyY2gvYWxwaGEvaW5jbHVkZS9hc20vaW8u\n"
+ "aMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+ID4gPiDCoGFyY2gvYXJjL2luY2x1ZGUv\n"
+ "YXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gPiA+IMKgYXJjaC9h\n"
+ "cm0vaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqA5ICsrKysK\n"
+ "PiA+ID4gwqBhcmNoL2FybS9tbS9pb3JlbWFwLmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg\n"
+ "wqDCoMKgfMKgwqA3ICsrKwo+ID4gPiDCoGFyY2gvYXJtL21tL25vbW11LmPCoMKgwqDCoMKgwqDC\n"
+ "oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgOSArKysrCj4gPiA+IMKgYXJjaC9hcm02NC9p\n"
+ "bmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoHwgMTIgKysrKysKPiA+ID4gwqBh\n"
+ "cmNoL2F2cjMyL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsK\n"
+ "PiA+ID4gwqBhcmNoL2NyaXMvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC\n"
+ "oHzCoMKgMSArCj4gPiA+IMKgYXJjaC9mcnYvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKg\n"
+ "wqDCoMKgwqDCoMKgfMKgwqAxICsKPiA+ID4gwqBhcmNoL2hleGFnb24vaW5jbHVkZS9hc20vaW8u\n"
+ "aMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMiArCj4gPiA+IMKgYXJjaC9pYTY0L2luY2x1ZGUvYXNt\n"
+ "L2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+ID4gPiDCoGFyY2gvbTMyci9p\n"
+ "bmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiA+ID4gwqBh\n"
+ "cmNoL202OGsvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSAr\n"
+ "Cj4gPiA+IMKgYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDC\n"
+ "oHzCoMKgMiArCj4gPiA+IMKgYXJjaC9taWNyb2JsYXplL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDC\n"
+ "oMKgwqB8wqDCoDEgKwo+ID4gPiDCoGFyY2gvbWlwcy9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDC\n"
+ "oMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiA+ID4gwqBhcmNoL21uMTAzMDAvaW5jbHVkZS9hc20v\n"
+ "aW8uaMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gPiA+IMKgYXJjaC9uaW9zMi9pbmNsdWRl\n"
+ "L2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gPiA+IMKgYXJjaC9vcGVu\n"
+ "cmlzYy9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoHzCoMKgMiArCj4gPiA+IMKgYXJj\n"
+ "aC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiA+\n"
+ "ID4gwqBhcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKg\n"
+ "MSArCj4gPiA+IMKgYXJjaC9zMzkwL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDC\n"
+ "oMKgwqB8wqDCoDEgKwo+ID4gPiDCoGFyY2gvc2gvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDC\n"
+ "oMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+ID4gPiDCoGFyY2gvc3BhcmMvaW5jbHVkZS9hc20v\n"
+ "aW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+ID4gPiDCoGFyY2gvdGlsZS9pbmNs\n"
+ "dWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiA+ID4gwqBhcmNo\n"
+ "L3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+ID4gPiDC\n"
+ "oGFyY2gveDg2L2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKg\n"
+ "MSArCj4gPiA+IMKgYXJjaC94dGVuc2EvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDC\n"
+ "oMKgfMKgwqAxICsKPiA+ID4gwqBkcml2ZXJzL3BjaS9wY2kuY8KgwqDCoMKgwqDCoMKgwqDCoMKg\n"
+ "wqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgNCArLQo+ID4gPiDCoGluY2x1ZGUvYXNtLWdlbmVy\n"
+ "aWMvaW9yZW1hcC1ub3Bvc3QuaMKgwqB8wqDCoDkgKysrKwo+ID4gPiDCoGluY2x1ZGUvYXNtLWdl\n"
+ "bmVyaWMvcGd0YWJsZS5owqDCoMKgwqDCoMKgwqDCoMKgfMKgwqA0ICsrCj4gPiA+IMKgaW5jbHVk\n"
+ "ZS9saW51eC9kZXZpY2UuaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAyICsK\n"
+ "PiA+ID4gwqBpbmNsdWRlL2xpbnV4L2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC\n"
+ "oMKgwqDCoMKgfMKgwqAyICsKPiA+ID4gwqBsaWIvZGV2cmVzLmPCoMKgwqDCoMKgwqDCoMKgwqDC\n"
+ "oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfCA4NAo+ID4gPiArKysrKysrKysrKysr\n"
+ "KysrKysrKysrKysrKysrKysrKystLQo+ID4gPiDCoDM1IGZpbGVzIGNoYW5nZWQsIDE2NyBpbnNl\n"
+ "cnRpb25zKCspLCA1IGRlbGV0aW9ucygtKQo+ID4gPiDCoGNyZWF0ZSBtb2RlIDEwMDY0NCBpbmNs\n"
+ "dWRlL2FzbS1nZW5lcmljL2lvcmVtYXAtbm9wb3N0LmgKPiA+ID4gCgpfX19fX19fX19fX19fX19f\n"
+ "X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg\n"
+ "bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu\n"
+ ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==
 
-b4a27a70cbf2491ee12dfa52890aa28fb277afd7e5634efdea1f0d93ddbd3bbb
+39757df2c4e13d96201739479781a98ca8b0a58808a403963e4bebd34ef92395

diff --git a/a/1.txt b/N2/1.txt
index d724faa..940cdba 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -88,20 +88,20 @@ attribute at this stage I'd say.
 > > > v2 -> v3:
 > > > 	- Created a default ioremap_nopost() implementation in a
 > > > separate
-> > > 	  asm-generic header and patched all arches to make use of it
+> > > 	??asm-generic header and patched all arches to make use of it
 > > > 	- Removed PCI drivers patches from the series to simplify the
-> > > 	  review, they will be posted separately once the
+> > > 	??review, they will be posted separately once the
 > > > ioremap_nopost()
-> > > 	  interface is settled
+> > > 	??interface is settled
 > > > 	- Fixed devm_ioremap_* BUS offset comments and implemented
-> > > 	  nopost interface on top of it
+> > > 	??nopost interface on top of it
 > > > 	- Added collected tags
 > > > 
 > > > v1: https://lkml.org/lkml/2017/2/27/228
 > > > 
 > > > v1 -> v2:
 > > > 	- Changed pci_remap_cfgspace() to more generic ioremap_nopost()
-> > > 	  interface
+> > > 	??interface
 > > > 	- Added pgprot_nonposted
 > > > 	- Fixed build errors on arches not relying on asm-generic
 > > > headers
@@ -139,14 +139,14 @@ attribute at this stage I'd say.
 > > > This patch series[1] addresses both issues in one go:
 > > > 
 > > > - It updates the pci_remap_iospace() function to use a page mapping
-> > >   that guarantees non-posted write transactions for I/O space
+> > > ? that guarantees non-posted write transactions for I/O space
 > > > addresses
 > > > - It adds a kernel API to remap PCI config space resources, so that
-> > >   architecture can override it with a mapping implementation that
-> > >   guarantees PCI specifications compliancy wrt non-posted write
-> > >   configuration transactions
+> > > ? architecture can override it with a mapping implementation that
+> > > ? guarantees PCI specifications compliancy wrt non-posted write
+> > > ? configuration transactions
 > > > - It updates all PCI host controller implementations (and the generic
-> > >   ECAM layer) to use the newly introduced mapping interface
+> > > ? ECAM layer) to use the newly introduced mapping interface
 > > > 
 > > > Tested on Juno ECAM based interface (DT/ACPI).
 > > > 
@@ -155,88 +155,83 @@ attribute at this stage I'd say.
 > > > 
 > > > - I patched the correct resource region mapping for config space
 > > > - There are not any other ways to ensure posted-write completion
-> > >   in the respective pci_ops that make the relevant patch unnecessary
+> > > ? in the respective pci_ops that make the relevant patch unnecessary
 > > > 
 > > > [1]
 > > > git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/linux.git
 > > > pci/config-io-mappings-fix-v3
 > > > 
 > > > Lorenzo Pieralisi (32):
-> > >   PCI: remove __weak tag from pci_remap_iospace()
-> > >   asm-generic/pgtable.h: introduce pgprot_nonposted remap attribute
-> > >   PCI: fix pci_remap_iospace() remap attribute
-> > >   asm-generic: add ioremap_nopost() remap interface
-> > >   alpha: include default ioremap_nopost() implementation
-> > >   avr32: include default ioremap_nopost() implementation
-> > >   arc: include default ioremap_nopost() implementation
-> > >   cris: include default ioremap_nopost() implementation
-> > >   frv: include default ioremap_nopost() implementation
-> > >   hexagon: include default ioremap_nopost() implementation
-> > >   ia64: include default ioremap_nopost() implementation
-> > >   m32r: include default ioremap_nopost() implementation
-> > >   m68k: include default ioremap_nopost() implementation
-> > >   metag: include default ioremap_nopost() implementation
-> > >   microblaze: include default ioremap_nopost() implementation
-> > >   mips: include default ioremap_nopost() implementation
-> > >   mn10300: include default ioremap_nopost() implementation
-> > >   nios2: include default ioremap_nopost() implementation
-> > >   openrisc: include default ioremap_nopost() implementation
-> > >   parisc: include default ioremap_nopost() implementation
-> > >   powerpc: include default ioremap_nopost() implementation
-> > >   s390: include default ioremap_nopost() implementation
-> > >   sh: include default ioremap_nopost() implementation
-> > >   sparc: include default ioremap_nopost() implementation
-> > >   tile: include default ioremap_nopost() implementation
-> > >   unicore32: include default ioremap_nopost() implementation
-> > >   x86: include default ioremap_nopost() implementation
-> > >   xtensa: include default ioremap_nopost() implementation
-> > >   arm64: implement ioremap_nopost() interface
-> > >   arm: implement ioremap_nopost() interface
-> > >   lib: fix Devres devm_ioremap_* offset parameter kerneldoc
+> > > ? PCI: remove __weak tag from pci_remap_iospace()
+> > > ? asm-generic/pgtable.h: introduce pgprot_nonposted remap attribute
+> > > ? PCI: fix pci_remap_iospace() remap attribute
+> > > ? asm-generic: add ioremap_nopost() remap interface
+> > > ? alpha: include default ioremap_nopost() implementation
+> > > ? avr32: include default ioremap_nopost() implementation
+> > > ? arc: include default ioremap_nopost() implementation
+> > > ? cris: include default ioremap_nopost() implementation
+> > > ? frv: include default ioremap_nopost() implementation
+> > > ? hexagon: include default ioremap_nopost() implementation
+> > > ? ia64: include default ioremap_nopost() implementation
+> > > ? m32r: include default ioremap_nopost() implementation
+> > > ? m68k: include default ioremap_nopost() implementation
+> > > ? metag: include default ioremap_nopost() implementation
+> > > ? microblaze: include default ioremap_nopost() implementation
+> > > ? mips: include default ioremap_nopost() implementation
+> > > ? mn10300: include default ioremap_nopost() implementation
+> > > ? nios2: include default ioremap_nopost() implementation
+> > > ? openrisc: include default ioremap_nopost() implementation
+> > > ? parisc: include default ioremap_nopost() implementation
+> > > ? powerpc: include default ioremap_nopost() implementation
+> > > ? s390: include default ioremap_nopost() implementation
+> > > ? sh: include default ioremap_nopost() implementation
+> > > ? sparc: include default ioremap_nopost() implementation
+> > > ? tile: include default ioremap_nopost() implementation
+> > > ? unicore32: include default ioremap_nopost() implementation
+> > > ? x86: include default ioremap_nopost() implementation
+> > > ? xtensa: include default ioremap_nopost() implementation
+> > > ? arm64: implement ioremap_nopost() interface
+> > > ? arm: implement ioremap_nopost() interface
+> > > ? lib: fix Devres devm_ioremap_* offset parameter kerneldoc
 > > > description
-> > >   lib: implement Devres ioremap_nopost() interface
-> > > 
-> > >  Documentation/driver-model/devres.txt |  3 ++
-> > >  arch/alpha/include/asm/io.h           |  1 +
-> > >  arch/arc/include/asm/io.h             |  1 +
-> > >  arch/arm/include/asm/io.h             |  9 ++++
-> > >  arch/arm/mm/ioremap.c                 |  7 +++
-> > >  arch/arm/mm/nommu.c                   |  9 ++++
-> > >  arch/arm64/include/asm/io.h           | 12 +++++
-> > >  arch/avr32/include/asm/io.h           |  1 +
-> > >  arch/cris/include/asm/io.h            |  1 +
-> > >  arch/frv/include/asm/io.h             |  1 +
-> > >  arch/hexagon/include/asm/io.h         |  2 +
-> > >  arch/ia64/include/asm/io.h            |  1 +
-> > >  arch/m32r/include/asm/io.h            |  1 +
-> > >  arch/m68k/include/asm/io.h            |  1 +
-> > >  arch/metag/include/asm/io.h           |  2 +
-> > >  arch/microblaze/include/asm/io.h      |  1 +
-> > >  arch/mips/include/asm/io.h            |  1 +
-> > >  arch/mn10300/include/asm/io.h         |  1 +
-> > >  arch/nios2/include/asm/io.h           |  1 +
-> > >  arch/openrisc/include/asm/io.h        |  2 +
-> > >  arch/parisc/include/asm/io.h          |  1 +
-> > >  arch/powerpc/include/asm/io.h         |  1 +
-> > >  arch/s390/include/asm/io.h            |  1 +
-> > >  arch/sh/include/asm/io.h              |  1 +
-> > >  arch/sparc/include/asm/io.h           |  1 +
-> > >  arch/tile/include/asm/io.h            |  1 +
-> > >  arch/unicore32/include/asm/io.h       |  1 +
-> > >  arch/x86/include/asm/io.h             |  1 +
-> > >  arch/xtensa/include/asm/io.h          |  1 +
-> > >  drivers/pci/pci.c                     |  4 +-
-> > >  include/asm-generic/ioremap-nopost.h  |  9 ++++
-> > >  include/asm-generic/pgtable.h         |  4 ++
-> > >  include/linux/device.h                |  2 +
-> > >  include/linux/io.h                    |  2 +
-> > >  lib/devres.c                          | 84
+> > > ? lib: implement Devres ioremap_nopost() interface
+> > > 
+> > > ?Documentation/driver-model/devres.txt |??3 ++
+> > > ?arch/alpha/include/asm/io.h???????????|??1 +
+> > > ?arch/arc/include/asm/io.h?????????????|??1 +
+> > > ?arch/arm/include/asm/io.h?????????????|??9 ++++
+> > > ?arch/arm/mm/ioremap.c?????????????????|??7 +++
+> > > ?arch/arm/mm/nommu.c???????????????????|??9 ++++
+> > > ?arch/arm64/include/asm/io.h???????????| 12 +++++
+> > > ?arch/avr32/include/asm/io.h???????????|??1 +
+> > > ?arch/cris/include/asm/io.h????????????|??1 +
+> > > ?arch/frv/include/asm/io.h?????????????|??1 +
+> > > ?arch/hexagon/include/asm/io.h?????????|??2 +
+> > > ?arch/ia64/include/asm/io.h????????????|??1 +
+> > > ?arch/m32r/include/asm/io.h????????????|??1 +
+> > > ?arch/m68k/include/asm/io.h????????????|??1 +
+> > > ?arch/metag/include/asm/io.h???????????|??2 +
+> > > ?arch/microblaze/include/asm/io.h??????|??1 +
+> > > ?arch/mips/include/asm/io.h????????????|??1 +
+> > > ?arch/mn10300/include/asm/io.h?????????|??1 +
+> > > ?arch/nios2/include/asm/io.h???????????|??1 +
+> > > ?arch/openrisc/include/asm/io.h????????|??2 +
+> > > ?arch/parisc/include/asm/io.h??????????|??1 +
+> > > ?arch/powerpc/include/asm/io.h?????????|??1 +
+> > > ?arch/s390/include/asm/io.h????????????|??1 +
+> > > ?arch/sh/include/asm/io.h??????????????|??1 +
+> > > ?arch/sparc/include/asm/io.h???????????|??1 +
+> > > ?arch/tile/include/asm/io.h????????????|??1 +
+> > > ?arch/unicore32/include/asm/io.h???????|??1 +
+> > > ?arch/x86/include/asm/io.h?????????????|??1 +
+> > > ?arch/xtensa/include/asm/io.h??????????|??1 +
+> > > ?drivers/pci/pci.c?????????????????????|??4 +-
+> > > ?include/asm-generic/ioremap-nopost.h??|??9 ++++
+> > > ?include/asm-generic/pgtable.h?????????|??4 ++
+> > > ?include/linux/device.h????????????????|??2 +
+> > > ?include/linux/io.h????????????????????|??2 +
+> > > ?lib/devres.c??????????????????????????| 84
 > > > +++++++++++++++++++++++++++++++++--
-> > >  35 files changed, 167 insertions(+), 5 deletions(-)
-> > >  create mode 100644 include/asm-generic/ioremap-nopost.h
-> > > 
-
-_______________________________________________
-linux-arm-kernel mailing list
-linux-arm-kernel@lists.infradead.org
-http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
+> > > ?35 files changed, 167 insertions(+), 5 deletions(-)
+> > > ?create mode 100644 include/asm-generic/ioremap-nopost.h
+> > >
diff --git a/a/content_digest b/N2/content_digest
index 5da58c3..a4fac0b 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -1,34 +1,10 @@
  "ref\020170411122923.6285-1-lorenzo.pieralisi@arm.com\0"
  "ref\01491917906.7236.7.camel@kernel.crashing.org\0"
  "ref\020170411140857.GA6821@red-moon\0"
- "From\0Benjamin Herrenschmidt <benh@kernel.crashing.org>\0"
- "Subject\0Re: [PATCH v3 00/32] PCI: fix config and I/O Address space memory mappings\0"
+ "From\0benh@kernel.crashing.org (Benjamin Herrenschmidt)\0"
+ "Subject\0[PATCH v3 00/32] PCI: fix config and I/O Address space memory mappings\0"
  "Date\0Wed, 12 Apr 2017 09:12:51 +1000\0"
- "To\0Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>\0"
- "Cc\0Jonas Bonn <jonas@southpole.se>"
-  Rich Felker <dalias@libc.org>
-  linux-pci@vger.kernel.org
-  Will Deacon <will.deacon@arm.com>
-  James E.J. Bottomley <jejb@parisc-linux.org>
-  David Howells <dhowells@redhat.com>
-  Max Filippov <jcmvbkbc@gmail.com>
-  Paul Mackerras <paulus@samba.org>
-  Huacai Chen <chenhc@lemote.com>
-  Guan Xuetao <gxt@mprc.pku.edu.cn>
-  Thomas Gleixner <tglx@linutronix.de>
-  Hans-Christian Egtvedt <egtvedt@samfundet.no>
-  linux-arch@vger.kernel.org
-  Jesper Nilsson <jesper.nilsson@axis.com>
-  Yoshinori Sato <ysato@users.sourceforge.jp>
-  Michael Ellerman <mpe@ellerman.id.au>
-  Helge Deller <deller@gmx.de>
-  Russell King <linux@armlinux.org.uk>
-  Ingo Molnar <mingo@redhat.com>
-  Geert Uytterhoeven <geert@linux-m68k.org>
-  Catalin Marinas <catalin.marinas@arm.com>
-  Matt Turner <mattst88@gmail.com>
-  Haavard Skinnemoen <hskinnemoen@gmail.com>
- " Fenghua Yu <fenghua.yu@intel.co>\0"
+ "To\0linux-arm-kernel@lists.infradead.org\0"
  "\00:1\0"
  "b\0"
  "On Tue, 2017-04-11 at 15:08 +0100, Lorenzo Pieralisi wrote:\n"
@@ -121,20 +97,20 @@
  "> > > v2 -> v3:\n"
  "> > > \t- Created a default ioremap_nopost() implementation in a\n"
  "> > > separate\n"
- "> > > \t\302\240\302\240asm-generic header and patched all arches to make use of it\n"
+ "> > > \t??asm-generic header and patched all arches to make use of it\n"
  "> > > \t- Removed PCI drivers patches from the series to simplify the\n"
- "> > > \t\302\240\302\240review, they will be posted separately once the\n"
+ "> > > \t??review, they will be posted separately once the\n"
  "> > > ioremap_nopost()\n"
- "> > > \t\302\240\302\240interface is settled\n"
+ "> > > \t??interface is settled\n"
  "> > > \t- Fixed devm_ioremap_* BUS offset comments and implemented\n"
- "> > > \t\302\240\302\240nopost interface on top of it\n"
+ "> > > \t??nopost interface on top of it\n"
  "> > > \t- Added collected tags\n"
  "> > > \n"
  "> > > v1: https://lkml.org/lkml/2017/2/27/228\n"
  "> > > \n"
  "> > > v1 -> v2:\n"
  "> > > \t- Changed pci_remap_cfgspace() to more generic ioremap_nopost()\n"
- "> > > \t\302\240\302\240interface\n"
+ "> > > \t??interface\n"
  "> > > \t- Added pgprot_nonposted\n"
  "> > > \t- Fixed build errors on arches not relying on asm-generic\n"
  "> > > headers\n"
@@ -172,14 +148,14 @@
  "> > > This patch series[1] addresses both issues in one go:\n"
  "> > > \n"
  "> > > - It updates the pci_remap_iospace() function to use a page mapping\n"
- "> > > \302\240 that guarantees non-posted write transactions for I/O space\n"
+ "> > > ? that guarantees non-posted write transactions for I/O space\n"
  "> > > addresses\n"
  "> > > - It adds a kernel API to remap PCI config space resources, so that\n"
- "> > > \302\240 architecture can override it with a mapping implementation that\n"
- "> > > \302\240 guarantees PCI specifications compliancy wrt non-posted write\n"
- "> > > \302\240 configuration transactions\n"
+ "> > > ? architecture can override it with a mapping implementation that\n"
+ "> > > ? guarantees PCI specifications compliancy wrt non-posted write\n"
+ "> > > ? configuration transactions\n"
  "> > > - It updates all PCI host controller implementations (and the generic\n"
- "> > > \302\240 ECAM layer) to use the newly introduced mapping interface\n"
+ "> > > ? ECAM layer) to use the newly introduced mapping interface\n"
  "> > > \n"
  "> > > Tested on Juno ECAM based interface (DT/ACPI).\n"
  "> > > \n"
@@ -188,90 +164,85 @@
  "> > > \n"
  "> > > - I patched the correct resource region mapping for config space\n"
  "> > > - There are not any other ways to ensure posted-write completion\n"
- "> > > \302\240 in the respective pci_ops that make the relevant patch unnecessary\n"
+ "> > > ? in the respective pci_ops that make the relevant patch unnecessary\n"
  "> > > \n"
  "> > > [1]\n"
  "> > > git://git.kernel.org/pub/scm/linux/kernel/git/lpieralisi/linux.git\n"
  "> > > pci/config-io-mappings-fix-v3\n"
  "> > > \n"
  "> > > Lorenzo Pieralisi (32):\n"
- "> > > \302\240 PCI: remove __weak tag from pci_remap_iospace()\n"
- "> > > \302\240 asm-generic/pgtable.h: introduce pgprot_nonposted remap attribute\n"
- "> > > \302\240 PCI: fix pci_remap_iospace() remap attribute\n"
- "> > > \302\240 asm-generic: add ioremap_nopost() remap interface\n"
- "> > > \302\240 alpha: include default ioremap_nopost() implementation\n"
- "> > > \302\240 avr32: include default ioremap_nopost() implementation\n"
- "> > > \302\240 arc: include default ioremap_nopost() implementation\n"
- "> > > \302\240 cris: include default ioremap_nopost() implementation\n"
- "> > > \302\240 frv: include default ioremap_nopost() implementation\n"
- "> > > \302\240 hexagon: include default ioremap_nopost() implementation\n"
- "> > > \302\240 ia64: include default ioremap_nopost() implementation\n"
- "> > > \302\240 m32r: include default ioremap_nopost() implementation\n"
- "> > > \302\240 m68k: include default ioremap_nopost() implementation\n"
- "> > > \302\240 metag: include default ioremap_nopost() implementation\n"
- "> > > \302\240 microblaze: include default ioremap_nopost() implementation\n"
- "> > > \302\240 mips: include default ioremap_nopost() implementation\n"
- "> > > \302\240 mn10300: include default ioremap_nopost() implementation\n"
- "> > > \302\240 nios2: include default ioremap_nopost() implementation\n"
- "> > > \302\240 openrisc: include default ioremap_nopost() implementation\n"
- "> > > \302\240 parisc: include default ioremap_nopost() implementation\n"
- "> > > \302\240 powerpc: include default ioremap_nopost() implementation\n"
- "> > > \302\240 s390: include default ioremap_nopost() implementation\n"
- "> > > \302\240 sh: include default ioremap_nopost() implementation\n"
- "> > > \302\240 sparc: include default ioremap_nopost() implementation\n"
- "> > > \302\240 tile: include default ioremap_nopost() implementation\n"
- "> > > \302\240 unicore32: include default ioremap_nopost() implementation\n"
- "> > > \302\240 x86: include default ioremap_nopost() implementation\n"
- "> > > \302\240 xtensa: include default ioremap_nopost() implementation\n"
- "> > > \302\240 arm64: implement ioremap_nopost() interface\n"
- "> > > \302\240 arm: implement ioremap_nopost() interface\n"
- "> > > \302\240 lib: fix Devres devm_ioremap_* offset parameter kerneldoc\n"
+ "> > > ? PCI: remove __weak tag from pci_remap_iospace()\n"
+ "> > > ? asm-generic/pgtable.h: introduce pgprot_nonposted remap attribute\n"
+ "> > > ? PCI: fix pci_remap_iospace() remap attribute\n"
+ "> > > ? asm-generic: add ioremap_nopost() remap interface\n"
+ "> > > ? alpha: include default ioremap_nopost() implementation\n"
+ "> > > ? avr32: include default ioremap_nopost() implementation\n"
+ "> > > ? arc: include default ioremap_nopost() implementation\n"
+ "> > > ? cris: include default ioremap_nopost() implementation\n"
+ "> > > ? frv: include default ioremap_nopost() implementation\n"
+ "> > > ? hexagon: include default ioremap_nopost() implementation\n"
+ "> > > ? ia64: include default ioremap_nopost() implementation\n"
+ "> > > ? m32r: include default ioremap_nopost() implementation\n"
+ "> > > ? m68k: include default ioremap_nopost() implementation\n"
+ "> > > ? metag: include default ioremap_nopost() implementation\n"
+ "> > > ? microblaze: include default ioremap_nopost() implementation\n"
+ "> > > ? mips: include default ioremap_nopost() implementation\n"
+ "> > > ? mn10300: include default ioremap_nopost() implementation\n"
+ "> > > ? nios2: include default ioremap_nopost() implementation\n"
+ "> > > ? openrisc: include default ioremap_nopost() implementation\n"
+ "> > > ? parisc: include default ioremap_nopost() implementation\n"
+ "> > > ? powerpc: include default ioremap_nopost() implementation\n"
+ "> > > ? s390: include default ioremap_nopost() implementation\n"
+ "> > > ? sh: include default ioremap_nopost() implementation\n"
+ "> > > ? sparc: include default ioremap_nopost() implementation\n"
+ "> > > ? tile: include default ioremap_nopost() implementation\n"
+ "> > > ? unicore32: include default ioremap_nopost() implementation\n"
+ "> > > ? x86: include default ioremap_nopost() implementation\n"
+ "> > > ? xtensa: include default ioremap_nopost() implementation\n"
+ "> > > ? arm64: implement ioremap_nopost() interface\n"
+ "> > > ? arm: implement ioremap_nopost() interface\n"
+ "> > > ? lib: fix Devres devm_ioremap_* offset parameter kerneldoc\n"
  "> > > description\n"
- "> > > \302\240 lib: implement Devres ioremap_nopost() interface\n"
- "> > > \n"
- "> > > \302\240Documentation/driver-model/devres.txt |\302\240\302\2403 ++\n"
- "> > > \302\240arch/alpha/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/arc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/arm/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2409 ++++\n"
- "> > > \302\240arch/arm/mm/ioremap.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2407 +++\n"
- "> > > \302\240arch/arm/mm/nommu.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2409 ++++\n"
- "> > > \302\240arch/arm64/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240| 12 +++++\n"
- "> > > \302\240arch/avr32/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/cris/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/frv/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/hexagon/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n"
- "> > > \302\240arch/ia64/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/m32r/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/m68k/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/metag/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n"
- "> > > \302\240arch/microblaze/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/mips/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/mn10300/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/nios2/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/openrisc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n"
- "> > > \302\240arch/parisc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/powerpc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/s390/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/sh/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/sparc/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/tile/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/unicore32/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/x86/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240arch/xtensa/include/asm/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2401 +\n"
- "> > > \302\240drivers/pci/pci.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2404 +-\n"
- "> > > \302\240include/asm-generic/ioremap-nopost.h\302\240\302\240|\302\240\302\2409 ++++\n"
- "> > > \302\240include/asm-generic/pgtable.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2404 ++\n"
- "> > > \302\240include/linux/device.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n"
- "> > > \302\240include/linux/io.h\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240|\302\240\302\2402 +\n"
- "> > > \302\240lib/devres.c\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240\302\240| 84\n"
+ "> > > ? lib: implement Devres ioremap_nopost() interface\n"
+ "> > > \n"
+ "> > > ?Documentation/driver-model/devres.txt |??3 ++\n"
+ "> > > ?arch/alpha/include/asm/io.h???????????|??1 +\n"
+ "> > > ?arch/arc/include/asm/io.h?????????????|??1 +\n"
+ "> > > ?arch/arm/include/asm/io.h?????????????|??9 ++++\n"
+ "> > > ?arch/arm/mm/ioremap.c?????????????????|??7 +++\n"
+ "> > > ?arch/arm/mm/nommu.c???????????????????|??9 ++++\n"
+ "> > > ?arch/arm64/include/asm/io.h???????????| 12 +++++\n"
+ "> > > ?arch/avr32/include/asm/io.h???????????|??1 +\n"
+ "> > > ?arch/cris/include/asm/io.h????????????|??1 +\n"
+ "> > > ?arch/frv/include/asm/io.h?????????????|??1 +\n"
+ "> > > ?arch/hexagon/include/asm/io.h?????????|??2 +\n"
+ "> > > ?arch/ia64/include/asm/io.h????????????|??1 +\n"
+ "> > > ?arch/m32r/include/asm/io.h????????????|??1 +\n"
+ "> > > ?arch/m68k/include/asm/io.h????????????|??1 +\n"
+ "> > > ?arch/metag/include/asm/io.h???????????|??2 +\n"
+ "> > > ?arch/microblaze/include/asm/io.h??????|??1 +\n"
+ "> > > ?arch/mips/include/asm/io.h????????????|??1 +\n"
+ "> > > ?arch/mn10300/include/asm/io.h?????????|??1 +\n"
+ "> > > ?arch/nios2/include/asm/io.h???????????|??1 +\n"
+ "> > > ?arch/openrisc/include/asm/io.h????????|??2 +\n"
+ "> > > ?arch/parisc/include/asm/io.h??????????|??1 +\n"
+ "> > > ?arch/powerpc/include/asm/io.h?????????|??1 +\n"
+ "> > > ?arch/s390/include/asm/io.h????????????|??1 +\n"
+ "> > > ?arch/sh/include/asm/io.h??????????????|??1 +\n"
+ "> > > ?arch/sparc/include/asm/io.h???????????|??1 +\n"
+ "> > > ?arch/tile/include/asm/io.h????????????|??1 +\n"
+ "> > > ?arch/unicore32/include/asm/io.h???????|??1 +\n"
+ "> > > ?arch/x86/include/asm/io.h?????????????|??1 +\n"
+ "> > > ?arch/xtensa/include/asm/io.h??????????|??1 +\n"
+ "> > > ?drivers/pci/pci.c?????????????????????|??4 +-\n"
+ "> > > ?include/asm-generic/ioremap-nopost.h??|??9 ++++\n"
+ "> > > ?include/asm-generic/pgtable.h?????????|??4 ++\n"
+ "> > > ?include/linux/device.h????????????????|??2 +\n"
+ "> > > ?include/linux/io.h????????????????????|??2 +\n"
+ "> > > ?lib/devres.c??????????????????????????| 84\n"
  "> > > +++++++++++++++++++++++++++++++++--\n"
- "> > > \302\24035 files changed, 167 insertions(+), 5 deletions(-)\n"
- "> > > \302\240create mode 100644 include/asm-generic/ioremap-nopost.h\n"
- "> > > \n"
- "\n"
- "_______________________________________________\n"
- "linux-arm-kernel mailing list\n"
- "linux-arm-kernel@lists.infradead.org\n"
- http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
+ "> > > ?35 files changed, 167 insertions(+), 5 deletions(-)\n"
+ "> > > ?create mode 100644 include/asm-generic/ioremap-nopost.h\n"
+ > > >
 
-b4a27a70cbf2491ee12dfa52890aa28fb277afd7e5634efdea1f0d93ddbd3bbb
+f79eba3db5f88de7a6d13ddf8dc54e6629e51ab2e37ceaa0a785bcfa3a48d11c

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.