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

diff --git a/a/1.txt b/N1/1.txt
index 9e63a30..54cdcaf 100644
--- a/a/1.txt
+++ b/N1/1.txt
@@ -1,149 +1,181 @@
-T24gVHVlLCAyMDE3LTA0LTExIGF0IDEzOjI4ICswMTAwLCBMb3JlbnpvIFBpZXJhbGlzaSB3cm90
-ZToKPiBUaGlzIHBhdGNoIHNlcmllc1sxXSBpcyBhIHYzIG9mIGEgcHJldmlvdXMgdmVyc2lvbjoK
-PiAKPiB2MjogaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMTcvMy8yNy8yMjAKCkkgYW0gbm90IGEg
-ZmFuIG9mIHRoaXMgYXQgQWxsLgoKVGhhdCB3aG9sZSBjb25jZXB0IG9mICJpb3JlbWFwX25vcG9z
-dCIgaXMgc2ltcGx5IG5vdCBhcHBsaWNhYmxlIHRvIHRoZQptYWpvcml0eSBvZiBhcmNoaXRlY3R1
-cmVzIGFuZCBjZXJ0YWlubHkgbm90IGluIGEgd2F5IHRoYXQgY2FuIGFwcGx5IHRvCmFyYml0cmFy
-eSBtYXBwaW5ncy4KCkl0J3MgYWxzbyB2ZXJ5IHdyb25nIHRvIHByb3ZpZGUgYSAiZGVmYXVsdCIg
-b3BlcmF0aW9uIHdob3NlIHNlbWFudGljcwphcmUgd2Vha2VyIHRoYW4gd2hhdCBpdCdzIHN1cHBv
-c2VkIHRvIGltcGxlbWVudC4gVmVyeSB3cm9uZyBhY3R1YWxseS4KUGVvcGxlIHdpbGwgdXNlIGl0
-IGFzc3VtaW5nIHRoZSBub24tcG9zdGVkIGJlaGF2aW91ciBhbmQgdGhpbmdzIHdpbGwKYnJlYWsg
-aW4gc3VidGxlIHdheSB3aGVuIGl0IGNhbm5vdCBiZSBwcm92aWRlZC4KCldoYXQgZXhhY3RseSBh
-cmUgeW91IHRyeWluZyB0byBmaXggaGVyZSA/CgpJZiBhIGdpdmVuIFBDSWUgaG9zdCBicmlkZ2Ug
-KGFyY2hpdGVjdHVyZSBzcGVjaWZpYykgcmVxdWlyZSBhIHNwZWNpYWwKc2F1Y2UgdG8gcHJvdmlk
-ZSB0aGUgaWxsdXNpb24gb2Ygbm9uLXBvc3RpbmcsIHRoZW4gaW1wbGVtZW50IHRoaXMgaW4KdGhl
-IGFjdHVhbCByb290IGNvbXBsZXggY29kZS4KCkJUVy4gSSdtIHByZXR0eSBzdXJlIHdlICJhY2Np
-ZGVudGFsbHkiIG1hZGUgY29uZmlnIHdyaXRlcyBwb3N0ZWQgYXQKbGVhc3QgdG8gdGhlIFBIQiBv
-biBhIG51bWJlciBvZiBwb3dlcnBjIHN5c3RlbXMgZm9yZXZlciBhbmQgd2UgKm5ldmVyKgpoYWQg
-YSBwcm9ibGVtIGJlY2F1c2Ugb2YgaXQgOykKCj4gdjIgLT4gdjM6Cj4gCS0gQ3JlYXRlZCBhIGRl
-ZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlvbiBpbiBhCj4gc2VwYXJhdGUKPiAJ
-wqDCoGFzbS1nZW5lcmljIGhlYWRlciBhbmQgcGF0Y2hlZCBhbGwgYXJjaGVzIHRvIG1ha2UgdXNl
-IG9mIGl0Cj4gCS0gUmVtb3ZlZCBQQ0kgZHJpdmVycyBwYXRjaGVzIGZyb20gdGhlIHNlcmllcyB0
-byBzaW1wbGlmeSB0aGUKPiAJwqDCoHJldmlldywgdGhleSB3aWxsIGJlIHBvc3RlZCBzZXBhcmF0
-ZWx5IG9uY2UgdGhlCj4gaW9yZW1hcF9ub3Bvc3QoKQo+IAnCoMKgaW50ZXJmYWNlIGlzIHNldHRs
-ZWQKPiAJLSBGaXhlZCBkZXZtX2lvcmVtYXBfKiBCVVMgb2Zmc2V0IGNvbW1lbnRzIGFuZCBpbXBs
-ZW1lbnRlZAo+IAnCoMKgbm9wb3N0IGludGVyZmFjZSBvbiB0b3Agb2YgaXQKPiAJLSBBZGRlZCBj
-b2xsZWN0ZWQgdGFncwo+IAo+IHYxOiBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxNy8yLzI3LzIy
-OAo+IAo+IHYxIC0+IHYyOgo+IAktIENoYW5nZWQgcGNpX3JlbWFwX2NmZ3NwYWNlKCkgdG8gbW9y
-ZSBnZW5lcmljIGlvcmVtYXBfbm9wb3N0KCkKPiAJwqDCoGludGVyZmFjZQo+IAktIEFkZGVkIHBn
-cHJvdF9ub25wb3N0ZWQKPiAJLSBGaXhlZCBidWlsZCBlcnJvcnMgb24gYXJjaGVzIG5vdCByZWx5
-aW5nIG9uIGFzbS1nZW5lcmljCj4gaGVhZGVycwo+IAktIEFkZGVkIFBDSSB2ZXJzYXRpbGUgaG9z
-dCBjb250cm9sbGVyIGRyaXZlciBwYXRjaAo+IAktIEFkZGVkIG1pc3NpbmcgY29uZmlnIHNwYWNl
-IHJlbWFwcGluZyB0byBoaXNpbGljb24gaG9zdAo+IGNvbnRyb2xsZXIKPiAKPiAtLS0tLS0tLS0t
-LS0tLS0tLS0tLS0KPiBPcmlnaW5hbCBjb3ZlciBsZXR0ZXIKPiAtLS0tLS0tLS0tLS0tLS0tLS0t
-LS0KPiAKPiBQQ0kgbG9jYWwgYnVzIHNwZWNpZmljYXRpb25zIChSZXYzLjAsIDMuMi41ICJUcmFu
-c2FjdGlvbiBPcmRlcmluZwo+IGFuZCBQb3N0aW5nIikgc3RyaWN0bHkgcmVxdWlyZSBQQ0kgY29u
-ZmlndXJhdGlvbiBhbmQgSS9PIEFkZHJlc3MKPiBzcGFjZQo+IHdyaXRlIHRyYW5zYWN0aW9ucyB0
-byBiZSBub24tcG9zdGVkLgo+IAo+IEN1cnJlbnQgY3JvcCBvZiBEVC9BQ1BJIFBDSSBob3N0IGNv
-bnRyb2xsZXJzIGRyaXZlcnMgcmVsaWVzIG9uCj4gdGhlIGlvcmVtYXAgaW50ZXJmYWNlIHRvIG1h
-cCBFQ0FNIGFuZCBFQ0FNLWRlcml2YXRpdmUgUENJIGNvbmZpZwo+IHJlZ2lvbnMgYW5kIHBjaV9y
-ZW1hcF9pb3NwYWNlKCkgdG8gY3JlYXRlIGEgVk1BIGZvciBtYXBwaW5nCj4gUENJIGhvc3QgYnJp
-ZGdlIEkvTyBBZGRyZXNzIHNwYWNlIHRyYW5zYWN0aW9ucyB0byBDUFUgdmlydHVhbCBhZGRyZXNz
-Cj4gc3BhY2UuCj4gCj4gT24gc29tZSBwbGF0Zm9ybXMgKGllIEFSTS9BUk02NCkgaW9yZW1hcCBm
-YWlscyB0byBjb21wbHkgd2l0aCB0aGUgUENJCj4gY29uZmlndXJhdGlvbiBub24tcG9zdGVkIHdy
-aXRlIHRyYW5zYWN0aW9ucyByZXF1aXJlbWVudCwgYmVjYXVzZSBpdAo+IHByb3ZpZGVzIGEgbWVt
-b3J5IG1hcHBpbmcgdGhhdCBpc3N1ZXMgImJ1ZmZlcmFibGUiIG9yLCBpbiBQQ0kgdGVybXMKPiAi
-cG9zdGVkIiB3cml0ZSB0cmFuc2FjdGlvbnMuIExpa2V3aXNlLCB0aGUgY3VycmVudAo+IHBjaV9y
-ZW1hcF9pb3NwYWNlKCkKPiBpbXBsZW1lbnRhdGlvbiBtYXBzIHRoZSBwaHlzaWNhbCBhZGRyZXNz
-IHJhbmdlIHRoYXQgdGhlIFBDSQo+IHRyYW5zbGF0ZXMKPiB0byBJL08gc3BhY2UgY3ljbGVzIHRv
-IHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0aHJvdWdoIHBncHJvdF9kZXZpY2UoKQo+IGF0dHJpYnV0
-ZXMgdGhhdCBvbiBlZyBBUk02NCBwcm92aWRlcyBhIG1lbW9yeSBtYXBwaW5nIGlzc3VpbmcKPiBw
-b3N0ZWQgd3JpdGVzIHRyYW5zYWN0aW9ucywgd2hpY2ggaXMgbm90IFBDSSBzcGVjaWZpY2F0aW9u
-cwo+IGNvbXBsaWFudC4KPiAKPiBUaGlzIHBhdGNoIHNlcmllc1sxXSBhZGRyZXNzZXMgYm90aCBp
-c3N1ZXMgaW4gb25lIGdvOgo+IAo+IC0gSXQgdXBkYXRlcyB0aGUgcGNpX3JlbWFwX2lvc3BhY2Uo
-KSBmdW5jdGlvbiB0byB1c2UgYSBwYWdlIG1hcHBpbmcKPiDCoCB0aGF0IGd1YXJhbnRlZXMgbm9u
-LXBvc3RlZCB3cml0ZSB0cmFuc2FjdGlvbnMgZm9yIEkvTyBzcGFjZQo+IGFkZHJlc3Nlcwo+IC0g
-SXQgYWRkcyBhIGtlcm5lbCBBUEkgdG8gcmVtYXAgUENJIGNvbmZpZyBzcGFjZSByZXNvdXJjZXMs
-IHNvIHRoYXQKPiDCoCBhcmNoaXRlY3R1cmUgY2FuIG92ZXJyaWRlIGl0IHdpdGggYSBtYXBwaW5n
-IGltcGxlbWVudGF0aW9uIHRoYXQKPiDCoCBndWFyYW50ZWVzIFBDSSBzcGVjaWZpY2F0aW9ucyBj
-b21wbGlhbmN5IHdydCBub24tcG9zdGVkIHdyaXRlCj4gwqAgY29uZmlndXJhdGlvbiB0cmFuc2Fj
-dGlvbnMKPiAtIEl0IHVwZGF0ZXMgYWxsIFBDSSBob3N0IGNvbnRyb2xsZXIgaW1wbGVtZW50YXRp
-b25zIChhbmQgdGhlIGdlbmVyaWMKPiDCoCBFQ0FNIGxheWVyKSB0byB1c2UgdGhlIG5ld2x5IGlu
-dHJvZHVjZWQgbWFwcGluZyBpbnRlcmZhY2UKPiAKPiBUZXN0ZWQgb24gSnVubyBFQ0FNIGJhc2Vk
-IGludGVyZmFjZSAoRFQvQUNQSSkuCj4gCj4gTm9uLUVDQU0gUENJIGhvc3QgY29udHJvbGxlciBk
-cml2ZXJzIHBhdGNoZXMgbmVlZCBjaGVja2luZyB0byBtYWtlCj4gc3VyZSB0aGF0Ogo+IAo+IC0g
-SSBwYXRjaGVkIHRoZSBjb3JyZWN0IHJlc291cmNlIHJlZ2lvbiBtYXBwaW5nIGZvciBjb25maWcg
-c3BhY2UKPiAtIFRoZXJlIGFyZSBub3QgYW55IG90aGVyIHdheXMgdG8gZW5zdXJlIHBvc3RlZC13
-cml0ZSBjb21wbGV0aW9uCj4gwqAgaW4gdGhlIHJlc3BlY3RpdmUgcGNpX29wcyB0aGF0IG1ha2Ug
-dGhlIHJlbGV2YW50IHBhdGNoIHVubmVjZXNzYXJ5Cj4gCj4gWzFdCj4gZ2l0Oi8vZ2l0Lmtlcm5l
-bC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xwaWVyYWxpc2kvbGludXguZ2l0Cj4gcGNp
-L2NvbmZpZy1pby1tYXBwaW5ncy1maXgtdjMKPiAKPiBMb3JlbnpvIFBpZXJhbGlzaSAoMzIpOgo+
-IMKgIFBDSTogcmVtb3ZlIF9fd2VhayB0YWcgZnJvbSBwY2lfcmVtYXBfaW9zcGFjZSgpCj4gwqAg
-YXNtLWdlbmVyaWMvcGd0YWJsZS5oOiBpbnRyb2R1Y2UgcGdwcm90X25vbnBvc3RlZCByZW1hcCBh
-dHRyaWJ1dGUKPiDCoCBQQ0k6IGZpeCBwY2lfcmVtYXBfaW9zcGFjZSgpIHJlbWFwIGF0dHJpYnV0
-ZQo+IMKgIGFzbS1nZW5lcmljOiBhZGQgaW9yZW1hcF9ub3Bvc3QoKSByZW1hcCBpbnRlcmZhY2UK
-PiDCoCBhbHBoYTogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRp
-b24KPiDCoCBhdnIzMjogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50
-YXRpb24KPiDCoCBhcmM6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVu
-dGF0aW9uCj4gwqAgY3JpczogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVt
-ZW50YXRpb24KPiDCoCBmcnY6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxl
-bWVudGF0aW9uCj4gwqAgaGV4YWdvbjogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkg
-aW1wbGVtZW50YXRpb24KPiDCoCBpYTY0OiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3Qo
-KSBpbXBsZW1lbnRhdGlvbgo+IMKgIG0zMnI6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9z
-dCgpIGltcGxlbWVudGF0aW9uCj4gwqAgbTY4azogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9w
-b3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBtZXRhZzogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBf
-bm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBtaWNyb2JsYXplOiBpbmNsdWRlIGRlZmF1bHQg
-aW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlvbgo+IMKgIG1pcHM6IGluY2x1ZGUgZGVmYXVs
-dCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4gwqAgbW4xMDMwMDogaW5jbHVkZSBk
-ZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBuaW9zMjogaW5jbHVk
-ZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBvcGVucmlzYzog
-aW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBwYXJp
-c2M6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4gwqAg
-cG93ZXJwYzogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24K
-PiDCoCBzMzkwOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlv
-bgo+IMKgIHNoOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlv
-bgo+IMKgIHNwYXJjOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRh
-dGlvbgo+IMKgIHRpbGU6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVu
-dGF0aW9uCj4gwqAgdW5pY29yZTMyOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBp
-bXBsZW1lbnRhdGlvbgo+IMKgIHg4NjogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkg
-aW1wbGVtZW50YXRpb24KPiDCoCB4dGVuc2E6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9z
-dCgpIGltcGxlbWVudGF0aW9uCj4gwqAgYXJtNjQ6IGltcGxlbWVudCBpb3JlbWFwX25vcG9zdCgp
-IGludGVyZmFjZQo+IMKgIGFybTogaW1wbGVtZW50IGlvcmVtYXBfbm9wb3N0KCkgaW50ZXJmYWNl
-Cj4gwqAgbGliOiBmaXggRGV2cmVzIGRldm1faW9yZW1hcF8qIG9mZnNldCBwYXJhbWV0ZXIga2Vy
-bmVsZG9jCj4gZGVzY3JpcHRpb24KPiDCoCBsaWI6IGltcGxlbWVudCBEZXZyZXMgaW9yZW1hcF9u
-b3Bvc3QoKSBpbnRlcmZhY2UKPiAKPiDCoERvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RldnJl
-cy50eHQgfMKgwqAzICsrCj4gwqBhcmNoL2FscGhhL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKg
-wqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvYXJjL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDC
-oMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL2FybS9pbmNsdWRlL2FzbS9pby5o
-wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDkgKysrKwo+IMKgYXJjaC9hcm0vbW0vaW9y
-ZW1hcC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgNyArKysKPiDCoGFy
-Y2gvYXJtL21tL25vbW11LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzC
-oMKgOSArKysrCj4gwqBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKg
-wqDCoMKgfCAxMiArKysrKwo+IMKgYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDC
-oMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL2NyaXMvaW5jbHVkZS9hc20vaW8uaMKgwqDC
-oMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL2Zydi9pbmNsdWRlL2FzbS9pby5o
-wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJjaC9oZXhhZ29uL2luY2x1
-ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKwo+IMKgYXJjaC9pYTY0L2luY2x1
-ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJjaC9tMzJy
-L2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJj
-aC9tNjhrL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+
-IMKgYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKg
-MiArCj4gwqBhcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoHzCoMKg
-MSArCj4gwqBhcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
-oHzCoMKgMSArCj4gwqBhcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKg
-wqDCoHzCoMKgMSArCj4gwqBhcmNoL25pb3MyL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDC
-oMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vaW8uaMKgwqDC
-oMKgwqDCoMKgwqB8wqDCoDIgKwo+IMKgYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaMKgwqDC
-oMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5o
-wqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pby5o
-wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvc2gvaW5jbHVkZS9hc20v
-aW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJjaC9zcGFyYy9p
-bmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL3Rp
-bGUvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBh
-cmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKg
-YXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAx
-ICsKPiDCoGFyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoHzC
-oMKgMSArCj4gwqBkcml2ZXJzL3BjaS9wY2kuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
-oMKgwqDCoMKgwqDCoHzCoMKgNCArLQo+IMKgaW5jbHVkZS9hc20tZ2VuZXJpYy9pb3JlbWFwLW5v
-cG9zdC5owqDCoHzCoMKgOSArKysrCj4gwqBpbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaMKg
-wqDCoMKgwqDCoMKgwqDCoHzCoMKgNCArKwo+IMKgaW5jbHVkZS9saW51eC9kZXZpY2UuaMKgwqDC
-oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAyICsKPiDCoGluY2x1ZGUvbGludXgvaW8u
-aMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKwo+IMKgbGli
-L2RldnJlcy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
-wqDCoHwgODQKPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQo+IMKgMzUgZmls
-ZXMgY2hhbmdlZCwgMTY3IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCj4gwqBjcmVhdGUg
-bW9kZSAxMDA2NDQgaW5jbHVkZS9hc20tZ2VuZXJpYy9pb3JlbWFwLW5vcG9zdC5oCj4gCgpfX19f
-X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy
-bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0
-cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs
-Cg==
\ No newline at end of file
+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.
+
+What exactly are you trying to fix here ?
+
+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 ;)
+
+> 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
\ No newline at end of file
diff --git a/a/content_digest b/N1/content_digest
index ec9938c..35a5662 100644
--- a/a/content_digest
+++ b/N1/content_digest
@@ -38,29 +38,7 @@
   " Matt Turner <mattst88\@gmail.com>",
   " Haavard Skinnemoen <hskinnemoen\@gmail.com>",
   " 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"
+  " James Hogan <james.hoga>\0"
 ]
 [
   "\0000:1\0"
@@ -69,155 +47,187 @@
   "b\0"
 ]
 [
-  "T24gVHVlLCAyMDE3LTA0LTExIGF0IDEzOjI4ICswMTAwLCBMb3JlbnpvIFBpZXJhbGlzaSB3cm90\n",
-  "ZToKPiBUaGlzIHBhdGNoIHNlcmllc1sxXSBpcyBhIHYzIG9mIGEgcHJldmlvdXMgdmVyc2lvbjoK\n",
-  "PiAKPiB2MjogaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMTcvMy8yNy8yMjAKCkkgYW0gbm90IGEg\n",
-  "ZmFuIG9mIHRoaXMgYXQgQWxsLgoKVGhhdCB3aG9sZSBjb25jZXB0IG9mICJpb3JlbWFwX25vcG9z\n",
-  "dCIgaXMgc2ltcGx5IG5vdCBhcHBsaWNhYmxlIHRvIHRoZQptYWpvcml0eSBvZiBhcmNoaXRlY3R1\n",
-  "cmVzIGFuZCBjZXJ0YWlubHkgbm90IGluIGEgd2F5IHRoYXQgY2FuIGFwcGx5IHRvCmFyYml0cmFy\n",
-  "eSBtYXBwaW5ncy4KCkl0J3MgYWxzbyB2ZXJ5IHdyb25nIHRvIHByb3ZpZGUgYSAiZGVmYXVsdCIg\n",
-  "b3BlcmF0aW9uIHdob3NlIHNlbWFudGljcwphcmUgd2Vha2VyIHRoYW4gd2hhdCBpdCdzIHN1cHBv\n",
-  "c2VkIHRvIGltcGxlbWVudC4gVmVyeSB3cm9uZyBhY3R1YWxseS4KUGVvcGxlIHdpbGwgdXNlIGl0\n",
-  "IGFzc3VtaW5nIHRoZSBub24tcG9zdGVkIGJlaGF2aW91ciBhbmQgdGhpbmdzIHdpbGwKYnJlYWsg\n",
-  "aW4gc3VidGxlIHdheSB3aGVuIGl0IGNhbm5vdCBiZSBwcm92aWRlZC4KCldoYXQgZXhhY3RseSBh\n",
-  "cmUgeW91IHRyeWluZyB0byBmaXggaGVyZSA/CgpJZiBhIGdpdmVuIFBDSWUgaG9zdCBicmlkZ2Ug\n",
-  "KGFyY2hpdGVjdHVyZSBzcGVjaWZpYykgcmVxdWlyZSBhIHNwZWNpYWwKc2F1Y2UgdG8gcHJvdmlk\n",
-  "ZSB0aGUgaWxsdXNpb24gb2Ygbm9uLXBvc3RpbmcsIHRoZW4gaW1wbGVtZW50IHRoaXMgaW4KdGhl\n",
-  "IGFjdHVhbCByb290IGNvbXBsZXggY29kZS4KCkJUVy4gSSdtIHByZXR0eSBzdXJlIHdlICJhY2Np\n",
-  "ZGVudGFsbHkiIG1hZGUgY29uZmlnIHdyaXRlcyBwb3N0ZWQgYXQKbGVhc3QgdG8gdGhlIFBIQiBv\n",
-  "biBhIG51bWJlciBvZiBwb3dlcnBjIHN5c3RlbXMgZm9yZXZlciBhbmQgd2UgKm5ldmVyKgpoYWQg\n",
-  "YSBwcm9ibGVtIGJlY2F1c2Ugb2YgaXQgOykKCj4gdjIgLT4gdjM6Cj4gCS0gQ3JlYXRlZCBhIGRl\n",
-  "ZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlvbiBpbiBhCj4gc2VwYXJhdGUKPiAJ\n",
-  "wqDCoGFzbS1nZW5lcmljIGhlYWRlciBhbmQgcGF0Y2hlZCBhbGwgYXJjaGVzIHRvIG1ha2UgdXNl\n",
-  "IG9mIGl0Cj4gCS0gUmVtb3ZlZCBQQ0kgZHJpdmVycyBwYXRjaGVzIGZyb20gdGhlIHNlcmllcyB0\n",
-  "byBzaW1wbGlmeSB0aGUKPiAJwqDCoHJldmlldywgdGhleSB3aWxsIGJlIHBvc3RlZCBzZXBhcmF0\n",
-  "ZWx5IG9uY2UgdGhlCj4gaW9yZW1hcF9ub3Bvc3QoKQo+IAnCoMKgaW50ZXJmYWNlIGlzIHNldHRs\n",
-  "ZWQKPiAJLSBGaXhlZCBkZXZtX2lvcmVtYXBfKiBCVVMgb2Zmc2V0IGNvbW1lbnRzIGFuZCBpbXBs\n",
-  "ZW1lbnRlZAo+IAnCoMKgbm9wb3N0IGludGVyZmFjZSBvbiB0b3Agb2YgaXQKPiAJLSBBZGRlZCBj\n",
-  "b2xsZWN0ZWQgdGFncwo+IAo+IHYxOiBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxNy8yLzI3LzIy\n",
-  "OAo+IAo+IHYxIC0+IHYyOgo+IAktIENoYW5nZWQgcGNpX3JlbWFwX2NmZ3NwYWNlKCkgdG8gbW9y\n",
-  "ZSBnZW5lcmljIGlvcmVtYXBfbm9wb3N0KCkKPiAJwqDCoGludGVyZmFjZQo+IAktIEFkZGVkIHBn\n",
-  "cHJvdF9ub25wb3N0ZWQKPiAJLSBGaXhlZCBidWlsZCBlcnJvcnMgb24gYXJjaGVzIG5vdCByZWx5\n",
-  "aW5nIG9uIGFzbS1nZW5lcmljCj4gaGVhZGVycwo+IAktIEFkZGVkIFBDSSB2ZXJzYXRpbGUgaG9z\n",
-  "dCBjb250cm9sbGVyIGRyaXZlciBwYXRjaAo+IAktIEFkZGVkIG1pc3NpbmcgY29uZmlnIHNwYWNl\n",
-  "IHJlbWFwcGluZyB0byBoaXNpbGljb24gaG9zdAo+IGNvbnRyb2xsZXIKPiAKPiAtLS0tLS0tLS0t\n",
-  "LS0tLS0tLS0tLS0KPiBPcmlnaW5hbCBjb3ZlciBsZXR0ZXIKPiAtLS0tLS0tLS0tLS0tLS0tLS0t\n",
-  "LS0KPiAKPiBQQ0kgbG9jYWwgYnVzIHNwZWNpZmljYXRpb25zIChSZXYzLjAsIDMuMi41ICJUcmFu\n",
-  "c2FjdGlvbiBPcmRlcmluZwo+IGFuZCBQb3N0aW5nIikgc3RyaWN0bHkgcmVxdWlyZSBQQ0kgY29u\n",
-  "ZmlndXJhdGlvbiBhbmQgSS9PIEFkZHJlc3MKPiBzcGFjZQo+IHdyaXRlIHRyYW5zYWN0aW9ucyB0\n",
-  "byBiZSBub24tcG9zdGVkLgo+IAo+IEN1cnJlbnQgY3JvcCBvZiBEVC9BQ1BJIFBDSSBob3N0IGNv\n",
-  "bnRyb2xsZXJzIGRyaXZlcnMgcmVsaWVzIG9uCj4gdGhlIGlvcmVtYXAgaW50ZXJmYWNlIHRvIG1h\n",
-  "cCBFQ0FNIGFuZCBFQ0FNLWRlcml2YXRpdmUgUENJIGNvbmZpZwo+IHJlZ2lvbnMgYW5kIHBjaV9y\n",
-  "ZW1hcF9pb3NwYWNlKCkgdG8gY3JlYXRlIGEgVk1BIGZvciBtYXBwaW5nCj4gUENJIGhvc3QgYnJp\n",
-  "ZGdlIEkvTyBBZGRyZXNzIHNwYWNlIHRyYW5zYWN0aW9ucyB0byBDUFUgdmlydHVhbCBhZGRyZXNz\n",
-  "Cj4gc3BhY2UuCj4gCj4gT24gc29tZSBwbGF0Zm9ybXMgKGllIEFSTS9BUk02NCkgaW9yZW1hcCBm\n",
-  "YWlscyB0byBjb21wbHkgd2l0aCB0aGUgUENJCj4gY29uZmlndXJhdGlvbiBub24tcG9zdGVkIHdy\n",
-  "aXRlIHRyYW5zYWN0aW9ucyByZXF1aXJlbWVudCwgYmVjYXVzZSBpdAo+IHByb3ZpZGVzIGEgbWVt\n",
-  "b3J5IG1hcHBpbmcgdGhhdCBpc3N1ZXMgImJ1ZmZlcmFibGUiIG9yLCBpbiBQQ0kgdGVybXMKPiAi\n",
-  "cG9zdGVkIiB3cml0ZSB0cmFuc2FjdGlvbnMuIExpa2V3aXNlLCB0aGUgY3VycmVudAo+IHBjaV9y\n",
-  "ZW1hcF9pb3NwYWNlKCkKPiBpbXBsZW1lbnRhdGlvbiBtYXBzIHRoZSBwaHlzaWNhbCBhZGRyZXNz\n",
-  "IHJhbmdlIHRoYXQgdGhlIFBDSQo+IHRyYW5zbGF0ZXMKPiB0byBJL08gc3BhY2UgY3ljbGVzIHRv\n",
-  "IHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0aHJvdWdoIHBncHJvdF9kZXZpY2UoKQo+IGF0dHJpYnV0\n",
-  "ZXMgdGhhdCBvbiBlZyBBUk02NCBwcm92aWRlcyBhIG1lbW9yeSBtYXBwaW5nIGlzc3VpbmcKPiBw\n",
-  "b3N0ZWQgd3JpdGVzIHRyYW5zYWN0aW9ucywgd2hpY2ggaXMgbm90IFBDSSBzcGVjaWZpY2F0aW9u\n",
-  "cwo+IGNvbXBsaWFudC4KPiAKPiBUaGlzIHBhdGNoIHNlcmllc1sxXSBhZGRyZXNzZXMgYm90aCBp\n",
-  "c3N1ZXMgaW4gb25lIGdvOgo+IAo+IC0gSXQgdXBkYXRlcyB0aGUgcGNpX3JlbWFwX2lvc3BhY2Uo\n",
-  "KSBmdW5jdGlvbiB0byB1c2UgYSBwYWdlIG1hcHBpbmcKPiDCoCB0aGF0IGd1YXJhbnRlZXMgbm9u\n",
-  "LXBvc3RlZCB3cml0ZSB0cmFuc2FjdGlvbnMgZm9yIEkvTyBzcGFjZQo+IGFkZHJlc3Nlcwo+IC0g\n",
-  "SXQgYWRkcyBhIGtlcm5lbCBBUEkgdG8gcmVtYXAgUENJIGNvbmZpZyBzcGFjZSByZXNvdXJjZXMs\n",
-  "IHNvIHRoYXQKPiDCoCBhcmNoaXRlY3R1cmUgY2FuIG92ZXJyaWRlIGl0IHdpdGggYSBtYXBwaW5n\n",
-  "IGltcGxlbWVudGF0aW9uIHRoYXQKPiDCoCBndWFyYW50ZWVzIFBDSSBzcGVjaWZpY2F0aW9ucyBj\n",
-  "b21wbGlhbmN5IHdydCBub24tcG9zdGVkIHdyaXRlCj4gwqAgY29uZmlndXJhdGlvbiB0cmFuc2Fj\n",
-  "dGlvbnMKPiAtIEl0IHVwZGF0ZXMgYWxsIFBDSSBob3N0IGNvbnRyb2xsZXIgaW1wbGVtZW50YXRp\n",
-  "b25zIChhbmQgdGhlIGdlbmVyaWMKPiDCoCBFQ0FNIGxheWVyKSB0byB1c2UgdGhlIG5ld2x5IGlu\n",
-  "dHJvZHVjZWQgbWFwcGluZyBpbnRlcmZhY2UKPiAKPiBUZXN0ZWQgb24gSnVubyBFQ0FNIGJhc2Vk\n",
-  "IGludGVyZmFjZSAoRFQvQUNQSSkuCj4gCj4gTm9uLUVDQU0gUENJIGhvc3QgY29udHJvbGxlciBk\n",
-  "cml2ZXJzIHBhdGNoZXMgbmVlZCBjaGVja2luZyB0byBtYWtlCj4gc3VyZSB0aGF0Ogo+IAo+IC0g\n",
-  "SSBwYXRjaGVkIHRoZSBjb3JyZWN0IHJlc291cmNlIHJlZ2lvbiBtYXBwaW5nIGZvciBjb25maWcg\n",
-  "c3BhY2UKPiAtIFRoZXJlIGFyZSBub3QgYW55IG90aGVyIHdheXMgdG8gZW5zdXJlIHBvc3RlZC13\n",
-  "cml0ZSBjb21wbGV0aW9uCj4gwqAgaW4gdGhlIHJlc3BlY3RpdmUgcGNpX29wcyB0aGF0IG1ha2Ug\n",
-  "dGhlIHJlbGV2YW50IHBhdGNoIHVubmVjZXNzYXJ5Cj4gCj4gWzFdCj4gZ2l0Oi8vZ2l0Lmtlcm5l\n",
-  "bC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xwaWVyYWxpc2kvbGludXguZ2l0Cj4gcGNp\n",
-  "L2NvbmZpZy1pby1tYXBwaW5ncy1maXgtdjMKPiAKPiBMb3JlbnpvIFBpZXJhbGlzaSAoMzIpOgo+\n",
-  "IMKgIFBDSTogcmVtb3ZlIF9fd2VhayB0YWcgZnJvbSBwY2lfcmVtYXBfaW9zcGFjZSgpCj4gwqAg\n",
-  "YXNtLWdlbmVyaWMvcGd0YWJsZS5oOiBpbnRyb2R1Y2UgcGdwcm90X25vbnBvc3RlZCByZW1hcCBh\n",
-  "dHRyaWJ1dGUKPiDCoCBQQ0k6IGZpeCBwY2lfcmVtYXBfaW9zcGFjZSgpIHJlbWFwIGF0dHJpYnV0\n",
-  "ZQo+IMKgIGFzbS1nZW5lcmljOiBhZGQgaW9yZW1hcF9ub3Bvc3QoKSByZW1hcCBpbnRlcmZhY2UK\n",
-  "PiDCoCBhbHBoYTogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRp\n",
-  "b24KPiDCoCBhdnIzMjogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50\n",
-  "YXRpb24KPiDCoCBhcmM6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVu\n",
-  "dGF0aW9uCj4gwqAgY3JpczogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVt\n",
-  "ZW50YXRpb24KPiDCoCBmcnY6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxl\n",
-  "bWVudGF0aW9uCj4gwqAgaGV4YWdvbjogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkg\n",
-  "aW1wbGVtZW50YXRpb24KPiDCoCBpYTY0OiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3Qo\n",
-  "KSBpbXBsZW1lbnRhdGlvbgo+IMKgIG0zMnI6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9z\n",
-  "dCgpIGltcGxlbWVudGF0aW9uCj4gwqAgbTY4azogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9w\n",
-  "b3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBtZXRhZzogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBf\n",
-  "bm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBtaWNyb2JsYXplOiBpbmNsdWRlIGRlZmF1bHQg\n",
-  "aW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlvbgo+IMKgIG1pcHM6IGluY2x1ZGUgZGVmYXVs\n",
-  "dCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4gwqAgbW4xMDMwMDogaW5jbHVkZSBk\n",
-  "ZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBuaW9zMjogaW5jbHVk\n",
-  "ZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBvcGVucmlzYzog\n",
-  "aW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBwYXJp\n",
-  "c2M6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4gwqAg\n",
-  "cG93ZXJwYzogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24K\n",
-  "PiDCoCBzMzkwOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlv\n",
-  "bgo+IMKgIHNoOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlv\n",
-  "bgo+IMKgIHNwYXJjOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRh\n",
-  "dGlvbgo+IMKgIHRpbGU6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVu\n",
-  "dGF0aW9uCj4gwqAgdW5pY29yZTMyOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBp\n",
-  "bXBsZW1lbnRhdGlvbgo+IMKgIHg4NjogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkg\n",
-  "aW1wbGVtZW50YXRpb24KPiDCoCB4dGVuc2E6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9z\n",
-  "dCgpIGltcGxlbWVudGF0aW9uCj4gwqAgYXJtNjQ6IGltcGxlbWVudCBpb3JlbWFwX25vcG9zdCgp\n",
-  "IGludGVyZmFjZQo+IMKgIGFybTogaW1wbGVtZW50IGlvcmVtYXBfbm9wb3N0KCkgaW50ZXJmYWNl\n",
-  "Cj4gwqAgbGliOiBmaXggRGV2cmVzIGRldm1faW9yZW1hcF8qIG9mZnNldCBwYXJhbWV0ZXIga2Vy\n",
-  "bmVsZG9jCj4gZGVzY3JpcHRpb24KPiDCoCBsaWI6IGltcGxlbWVudCBEZXZyZXMgaW9yZW1hcF9u\n",
-  "b3Bvc3QoKSBpbnRlcmZhY2UKPiAKPiDCoERvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RldnJl\n",
-  "cy50eHQgfMKgwqAzICsrCj4gwqBhcmNoL2FscGhhL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKg\n",
-  "wqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvYXJjL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDC\n",
-  "oMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL2FybS9pbmNsdWRlL2FzbS9pby5o\n",
-  "wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDkgKysrKwo+IMKgYXJjaC9hcm0vbW0vaW9y\n",
-  "ZW1hcC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgNyArKysKPiDCoGFy\n",
-  "Y2gvYXJtL21tL25vbW11LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzC\n",
-  "oMKgOSArKysrCj4gwqBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKg\n",
-  "wqDCoMKgfCAxMiArKysrKwo+IMKgYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDC\n",
-  "oMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL2NyaXMvaW5jbHVkZS9hc20vaW8uaMKgwqDC\n",
-  "oMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL2Zydi9pbmNsdWRlL2FzbS9pby5o\n",
-  "wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJjaC9oZXhhZ29uL2luY2x1\n",
-  "ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKwo+IMKgYXJjaC9pYTY0L2luY2x1\n",
-  "ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJjaC9tMzJy\n",
-  "L2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJj\n",
-  "aC9tNjhrL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+\n",
-  "IMKgYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKg\n",
-  "MiArCj4gwqBhcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoHzCoMKg\n",
-  "MSArCj4gwqBhcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC\n",
-  "oHzCoMKgMSArCj4gwqBhcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKg\n",
-  "wqDCoHzCoMKgMSArCj4gwqBhcmNoL25pb3MyL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDC\n",
-  "oMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vaW8uaMKgwqDC\n",
-  "oMKgwqDCoMKgwqB8wqDCoDIgKwo+IMKgYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaMKgwqDC\n",
-  "oMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5o\n",
-  "wqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pby5o\n",
-  "wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvc2gvaW5jbHVkZS9hc20v\n",
-  "aW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJjaC9zcGFyYy9p\n",
-  "bmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL3Rp\n",
-  "bGUvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBh\n",
-  "cmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKg\n",
-  "YXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAx\n",
-  "ICsKPiDCoGFyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoHzC\n",
-  "oMKgMSArCj4gwqBkcml2ZXJzL3BjaS9wY2kuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC\n",
-  "oMKgwqDCoMKgwqDCoHzCoMKgNCArLQo+IMKgaW5jbHVkZS9hc20tZ2VuZXJpYy9pb3JlbWFwLW5v\n",
-  "cG9zdC5owqDCoHzCoMKgOSArKysrCj4gwqBpbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaMKg\n",
-  "wqDCoMKgwqDCoMKgwqDCoHzCoMKgNCArKwo+IMKgaW5jbHVkZS9saW51eC9kZXZpY2UuaMKgwqDC\n",
-  "oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAyICsKPiDCoGluY2x1ZGUvbGludXgvaW8u\n",
-  "aMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKwo+IMKgbGli\n",
-  "L2RldnJlcy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg\n",
-  "wqDCoHwgODQKPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQo+IMKgMzUgZmls\n",
-  "ZXMgY2hhbmdlZCwgMTY3IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCj4gwqBjcmVhdGUg\n",
-  "bW9kZSAxMDA2NDQgaW5jbHVkZS9hc20tZ2VuZXJpYy9pb3JlbWFwLW5vcG9zdC5oCj4gCgpfX19f\n",
-  "X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy\n",
-  "bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0\n",
-  "cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs\n",
-  "Cg=="
+  "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",
+  "What exactly are you trying to fix here ?\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",
+  "> 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"
 ]
 
-4ebb9f14a671848e4cdb9eff828f6b9cdbaec870664c45ea763db967516f7bb2
+b9c210a7eaa66949f43020505d10c26670e3ad662003275e5f518ff89e2fbabe

diff --git a/a/1.txt b/N2/1.txt
index 9e63a30..50b1eaf 100644
--- a/a/1.txt
+++ b/N2/1.txt
@@ -1,149 +1,176 @@
-T24gVHVlLCAyMDE3LTA0LTExIGF0IDEzOjI4ICswMTAwLCBMb3JlbnpvIFBpZXJhbGlzaSB3cm90
-ZToKPiBUaGlzIHBhdGNoIHNlcmllc1sxXSBpcyBhIHYzIG9mIGEgcHJldmlvdXMgdmVyc2lvbjoK
-PiAKPiB2MjogaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMTcvMy8yNy8yMjAKCkkgYW0gbm90IGEg
-ZmFuIG9mIHRoaXMgYXQgQWxsLgoKVGhhdCB3aG9sZSBjb25jZXB0IG9mICJpb3JlbWFwX25vcG9z
-dCIgaXMgc2ltcGx5IG5vdCBhcHBsaWNhYmxlIHRvIHRoZQptYWpvcml0eSBvZiBhcmNoaXRlY3R1
-cmVzIGFuZCBjZXJ0YWlubHkgbm90IGluIGEgd2F5IHRoYXQgY2FuIGFwcGx5IHRvCmFyYml0cmFy
-eSBtYXBwaW5ncy4KCkl0J3MgYWxzbyB2ZXJ5IHdyb25nIHRvIHByb3ZpZGUgYSAiZGVmYXVsdCIg
-b3BlcmF0aW9uIHdob3NlIHNlbWFudGljcwphcmUgd2Vha2VyIHRoYW4gd2hhdCBpdCdzIHN1cHBv
-c2VkIHRvIGltcGxlbWVudC4gVmVyeSB3cm9uZyBhY3R1YWxseS4KUGVvcGxlIHdpbGwgdXNlIGl0
-IGFzc3VtaW5nIHRoZSBub24tcG9zdGVkIGJlaGF2aW91ciBhbmQgdGhpbmdzIHdpbGwKYnJlYWsg
-aW4gc3VidGxlIHdheSB3aGVuIGl0IGNhbm5vdCBiZSBwcm92aWRlZC4KCldoYXQgZXhhY3RseSBh
-cmUgeW91IHRyeWluZyB0byBmaXggaGVyZSA/CgpJZiBhIGdpdmVuIFBDSWUgaG9zdCBicmlkZ2Ug
-KGFyY2hpdGVjdHVyZSBzcGVjaWZpYykgcmVxdWlyZSBhIHNwZWNpYWwKc2F1Y2UgdG8gcHJvdmlk
-ZSB0aGUgaWxsdXNpb24gb2Ygbm9uLXBvc3RpbmcsIHRoZW4gaW1wbGVtZW50IHRoaXMgaW4KdGhl
-IGFjdHVhbCByb290IGNvbXBsZXggY29kZS4KCkJUVy4gSSdtIHByZXR0eSBzdXJlIHdlICJhY2Np
-ZGVudGFsbHkiIG1hZGUgY29uZmlnIHdyaXRlcyBwb3N0ZWQgYXQKbGVhc3QgdG8gdGhlIFBIQiBv
-biBhIG51bWJlciBvZiBwb3dlcnBjIHN5c3RlbXMgZm9yZXZlciBhbmQgd2UgKm5ldmVyKgpoYWQg
-YSBwcm9ibGVtIGJlY2F1c2Ugb2YgaXQgOykKCj4gdjIgLT4gdjM6Cj4gCS0gQ3JlYXRlZCBhIGRl
-ZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlvbiBpbiBhCj4gc2VwYXJhdGUKPiAJ
-wqDCoGFzbS1nZW5lcmljIGhlYWRlciBhbmQgcGF0Y2hlZCBhbGwgYXJjaGVzIHRvIG1ha2UgdXNl
-IG9mIGl0Cj4gCS0gUmVtb3ZlZCBQQ0kgZHJpdmVycyBwYXRjaGVzIGZyb20gdGhlIHNlcmllcyB0
-byBzaW1wbGlmeSB0aGUKPiAJwqDCoHJldmlldywgdGhleSB3aWxsIGJlIHBvc3RlZCBzZXBhcmF0
-ZWx5IG9uY2UgdGhlCj4gaW9yZW1hcF9ub3Bvc3QoKQo+IAnCoMKgaW50ZXJmYWNlIGlzIHNldHRs
-ZWQKPiAJLSBGaXhlZCBkZXZtX2lvcmVtYXBfKiBCVVMgb2Zmc2V0IGNvbW1lbnRzIGFuZCBpbXBs
-ZW1lbnRlZAo+IAnCoMKgbm9wb3N0IGludGVyZmFjZSBvbiB0b3Agb2YgaXQKPiAJLSBBZGRlZCBj
-b2xsZWN0ZWQgdGFncwo+IAo+IHYxOiBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxNy8yLzI3LzIy
-OAo+IAo+IHYxIC0+IHYyOgo+IAktIENoYW5nZWQgcGNpX3JlbWFwX2NmZ3NwYWNlKCkgdG8gbW9y
-ZSBnZW5lcmljIGlvcmVtYXBfbm9wb3N0KCkKPiAJwqDCoGludGVyZmFjZQo+IAktIEFkZGVkIHBn
-cHJvdF9ub25wb3N0ZWQKPiAJLSBGaXhlZCBidWlsZCBlcnJvcnMgb24gYXJjaGVzIG5vdCByZWx5
-aW5nIG9uIGFzbS1nZW5lcmljCj4gaGVhZGVycwo+IAktIEFkZGVkIFBDSSB2ZXJzYXRpbGUgaG9z
-dCBjb250cm9sbGVyIGRyaXZlciBwYXRjaAo+IAktIEFkZGVkIG1pc3NpbmcgY29uZmlnIHNwYWNl
-IHJlbWFwcGluZyB0byBoaXNpbGljb24gaG9zdAo+IGNvbnRyb2xsZXIKPiAKPiAtLS0tLS0tLS0t
-LS0tLS0tLS0tLS0KPiBPcmlnaW5hbCBjb3ZlciBsZXR0ZXIKPiAtLS0tLS0tLS0tLS0tLS0tLS0t
-LS0KPiAKPiBQQ0kgbG9jYWwgYnVzIHNwZWNpZmljYXRpb25zIChSZXYzLjAsIDMuMi41ICJUcmFu
-c2FjdGlvbiBPcmRlcmluZwo+IGFuZCBQb3N0aW5nIikgc3RyaWN0bHkgcmVxdWlyZSBQQ0kgY29u
-ZmlndXJhdGlvbiBhbmQgSS9PIEFkZHJlc3MKPiBzcGFjZQo+IHdyaXRlIHRyYW5zYWN0aW9ucyB0
-byBiZSBub24tcG9zdGVkLgo+IAo+IEN1cnJlbnQgY3JvcCBvZiBEVC9BQ1BJIFBDSSBob3N0IGNv
-bnRyb2xsZXJzIGRyaXZlcnMgcmVsaWVzIG9uCj4gdGhlIGlvcmVtYXAgaW50ZXJmYWNlIHRvIG1h
-cCBFQ0FNIGFuZCBFQ0FNLWRlcml2YXRpdmUgUENJIGNvbmZpZwo+IHJlZ2lvbnMgYW5kIHBjaV9y
-ZW1hcF9pb3NwYWNlKCkgdG8gY3JlYXRlIGEgVk1BIGZvciBtYXBwaW5nCj4gUENJIGhvc3QgYnJp
-ZGdlIEkvTyBBZGRyZXNzIHNwYWNlIHRyYW5zYWN0aW9ucyB0byBDUFUgdmlydHVhbCBhZGRyZXNz
-Cj4gc3BhY2UuCj4gCj4gT24gc29tZSBwbGF0Zm9ybXMgKGllIEFSTS9BUk02NCkgaW9yZW1hcCBm
-YWlscyB0byBjb21wbHkgd2l0aCB0aGUgUENJCj4gY29uZmlndXJhdGlvbiBub24tcG9zdGVkIHdy
-aXRlIHRyYW5zYWN0aW9ucyByZXF1aXJlbWVudCwgYmVjYXVzZSBpdAo+IHByb3ZpZGVzIGEgbWVt
-b3J5IG1hcHBpbmcgdGhhdCBpc3N1ZXMgImJ1ZmZlcmFibGUiIG9yLCBpbiBQQ0kgdGVybXMKPiAi
-cG9zdGVkIiB3cml0ZSB0cmFuc2FjdGlvbnMuIExpa2V3aXNlLCB0aGUgY3VycmVudAo+IHBjaV9y
-ZW1hcF9pb3NwYWNlKCkKPiBpbXBsZW1lbnRhdGlvbiBtYXBzIHRoZSBwaHlzaWNhbCBhZGRyZXNz
-IHJhbmdlIHRoYXQgdGhlIFBDSQo+IHRyYW5zbGF0ZXMKPiB0byBJL08gc3BhY2UgY3ljbGVzIHRv
-IHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0aHJvdWdoIHBncHJvdF9kZXZpY2UoKQo+IGF0dHJpYnV0
-ZXMgdGhhdCBvbiBlZyBBUk02NCBwcm92aWRlcyBhIG1lbW9yeSBtYXBwaW5nIGlzc3VpbmcKPiBw
-b3N0ZWQgd3JpdGVzIHRyYW5zYWN0aW9ucywgd2hpY2ggaXMgbm90IFBDSSBzcGVjaWZpY2F0aW9u
-cwo+IGNvbXBsaWFudC4KPiAKPiBUaGlzIHBhdGNoIHNlcmllc1sxXSBhZGRyZXNzZXMgYm90aCBp
-c3N1ZXMgaW4gb25lIGdvOgo+IAo+IC0gSXQgdXBkYXRlcyB0aGUgcGNpX3JlbWFwX2lvc3BhY2Uo
-KSBmdW5jdGlvbiB0byB1c2UgYSBwYWdlIG1hcHBpbmcKPiDCoCB0aGF0IGd1YXJhbnRlZXMgbm9u
-LXBvc3RlZCB3cml0ZSB0cmFuc2FjdGlvbnMgZm9yIEkvTyBzcGFjZQo+IGFkZHJlc3Nlcwo+IC0g
-SXQgYWRkcyBhIGtlcm5lbCBBUEkgdG8gcmVtYXAgUENJIGNvbmZpZyBzcGFjZSByZXNvdXJjZXMs
-IHNvIHRoYXQKPiDCoCBhcmNoaXRlY3R1cmUgY2FuIG92ZXJyaWRlIGl0IHdpdGggYSBtYXBwaW5n
-IGltcGxlbWVudGF0aW9uIHRoYXQKPiDCoCBndWFyYW50ZWVzIFBDSSBzcGVjaWZpY2F0aW9ucyBj
-b21wbGlhbmN5IHdydCBub24tcG9zdGVkIHdyaXRlCj4gwqAgY29uZmlndXJhdGlvbiB0cmFuc2Fj
-dGlvbnMKPiAtIEl0IHVwZGF0ZXMgYWxsIFBDSSBob3N0IGNvbnRyb2xsZXIgaW1wbGVtZW50YXRp
-b25zIChhbmQgdGhlIGdlbmVyaWMKPiDCoCBFQ0FNIGxheWVyKSB0byB1c2UgdGhlIG5ld2x5IGlu
-dHJvZHVjZWQgbWFwcGluZyBpbnRlcmZhY2UKPiAKPiBUZXN0ZWQgb24gSnVubyBFQ0FNIGJhc2Vk
-IGludGVyZmFjZSAoRFQvQUNQSSkuCj4gCj4gTm9uLUVDQU0gUENJIGhvc3QgY29udHJvbGxlciBk
-cml2ZXJzIHBhdGNoZXMgbmVlZCBjaGVja2luZyB0byBtYWtlCj4gc3VyZSB0aGF0Ogo+IAo+IC0g
-SSBwYXRjaGVkIHRoZSBjb3JyZWN0IHJlc291cmNlIHJlZ2lvbiBtYXBwaW5nIGZvciBjb25maWcg
-c3BhY2UKPiAtIFRoZXJlIGFyZSBub3QgYW55IG90aGVyIHdheXMgdG8gZW5zdXJlIHBvc3RlZC13
-cml0ZSBjb21wbGV0aW9uCj4gwqAgaW4gdGhlIHJlc3BlY3RpdmUgcGNpX29wcyB0aGF0IG1ha2Ug
-dGhlIHJlbGV2YW50IHBhdGNoIHVubmVjZXNzYXJ5Cj4gCj4gWzFdCj4gZ2l0Oi8vZ2l0Lmtlcm5l
-bC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xwaWVyYWxpc2kvbGludXguZ2l0Cj4gcGNp
-L2NvbmZpZy1pby1tYXBwaW5ncy1maXgtdjMKPiAKPiBMb3JlbnpvIFBpZXJhbGlzaSAoMzIpOgo+
-IMKgIFBDSTogcmVtb3ZlIF9fd2VhayB0YWcgZnJvbSBwY2lfcmVtYXBfaW9zcGFjZSgpCj4gwqAg
-YXNtLWdlbmVyaWMvcGd0YWJsZS5oOiBpbnRyb2R1Y2UgcGdwcm90X25vbnBvc3RlZCByZW1hcCBh
-dHRyaWJ1dGUKPiDCoCBQQ0k6IGZpeCBwY2lfcmVtYXBfaW9zcGFjZSgpIHJlbWFwIGF0dHJpYnV0
-ZQo+IMKgIGFzbS1nZW5lcmljOiBhZGQgaW9yZW1hcF9ub3Bvc3QoKSByZW1hcCBpbnRlcmZhY2UK
-PiDCoCBhbHBoYTogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRp
-b24KPiDCoCBhdnIzMjogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50
-YXRpb24KPiDCoCBhcmM6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVu
-dGF0aW9uCj4gwqAgY3JpczogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVt
-ZW50YXRpb24KPiDCoCBmcnY6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxl
-bWVudGF0aW9uCj4gwqAgaGV4YWdvbjogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkg
-aW1wbGVtZW50YXRpb24KPiDCoCBpYTY0OiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3Qo
-KSBpbXBsZW1lbnRhdGlvbgo+IMKgIG0zMnI6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9z
-dCgpIGltcGxlbWVudGF0aW9uCj4gwqAgbTY4azogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9w
-b3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBtZXRhZzogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBf
-bm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBtaWNyb2JsYXplOiBpbmNsdWRlIGRlZmF1bHQg
-aW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlvbgo+IMKgIG1pcHM6IGluY2x1ZGUgZGVmYXVs
-dCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4gwqAgbW4xMDMwMDogaW5jbHVkZSBk
-ZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBuaW9zMjogaW5jbHVk
-ZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBvcGVucmlzYzog
-aW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBwYXJp
-c2M6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4gwqAg
-cG93ZXJwYzogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24K
-PiDCoCBzMzkwOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlv
-bgo+IMKgIHNoOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlv
-bgo+IMKgIHNwYXJjOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRh
-dGlvbgo+IMKgIHRpbGU6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVu
-dGF0aW9uCj4gwqAgdW5pY29yZTMyOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBp
-bXBsZW1lbnRhdGlvbgo+IMKgIHg4NjogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkg
-aW1wbGVtZW50YXRpb24KPiDCoCB4dGVuc2E6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9z
-dCgpIGltcGxlbWVudGF0aW9uCj4gwqAgYXJtNjQ6IGltcGxlbWVudCBpb3JlbWFwX25vcG9zdCgp
-IGludGVyZmFjZQo+IMKgIGFybTogaW1wbGVtZW50IGlvcmVtYXBfbm9wb3N0KCkgaW50ZXJmYWNl
-Cj4gwqAgbGliOiBmaXggRGV2cmVzIGRldm1faW9yZW1hcF8qIG9mZnNldCBwYXJhbWV0ZXIga2Vy
-bmVsZG9jCj4gZGVzY3JpcHRpb24KPiDCoCBsaWI6IGltcGxlbWVudCBEZXZyZXMgaW9yZW1hcF9u
-b3Bvc3QoKSBpbnRlcmZhY2UKPiAKPiDCoERvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RldnJl
-cy50eHQgfMKgwqAzICsrCj4gwqBhcmNoL2FscGhhL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKg
-wqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvYXJjL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDC
-oMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL2FybS9pbmNsdWRlL2FzbS9pby5o
-wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDkgKysrKwo+IMKgYXJjaC9hcm0vbW0vaW9y
-ZW1hcC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgNyArKysKPiDCoGFy
-Y2gvYXJtL21tL25vbW11LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzC
-oMKgOSArKysrCj4gwqBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKg
-wqDCoMKgfCAxMiArKysrKwo+IMKgYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDC
-oMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL2NyaXMvaW5jbHVkZS9hc20vaW8uaMKgwqDC
-oMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL2Zydi9pbmNsdWRlL2FzbS9pby5o
-wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJjaC9oZXhhZ29uL2luY2x1
-ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKwo+IMKgYXJjaC9pYTY0L2luY2x1
-ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJjaC9tMzJy
-L2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJj
-aC9tNjhrL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+
-IMKgYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKg
-MiArCj4gwqBhcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoHzCoMKg
-MSArCj4gwqBhcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
-oHzCoMKgMSArCj4gwqBhcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKg
-wqDCoHzCoMKgMSArCj4gwqBhcmNoL25pb3MyL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDC
-oMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vaW8uaMKgwqDC
-oMKgwqDCoMKgwqB8wqDCoDIgKwo+IMKgYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaMKgwqDC
-oMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5o
-wqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pby5o
-wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvc2gvaW5jbHVkZS9hc20v
-aW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJjaC9zcGFyYy9p
-bmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL3Rp
-bGUvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBh
-cmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKg
-YXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAx
-ICsKPiDCoGFyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoHzC
-oMKgMSArCj4gwqBkcml2ZXJzL3BjaS9wY2kuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC
-oMKgwqDCoMKgwqDCoHzCoMKgNCArLQo+IMKgaW5jbHVkZS9hc20tZ2VuZXJpYy9pb3JlbWFwLW5v
-cG9zdC5owqDCoHzCoMKgOSArKysrCj4gwqBpbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaMKg
-wqDCoMKgwqDCoMKgwqDCoHzCoMKgNCArKwo+IMKgaW5jbHVkZS9saW51eC9kZXZpY2UuaMKgwqDC
-oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAyICsKPiDCoGluY2x1ZGUvbGludXgvaW8u
-aMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKwo+IMKgbGli
-L2RldnJlcy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg
-wqDCoHwgODQKPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQo+IMKgMzUgZmls
-ZXMgY2hhbmdlZCwgMTY3IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCj4gwqBjcmVhdGUg
-bW9kZSAxMDA2NDQgaW5jbHVkZS9hc20tZ2VuZXJpYy9pb3JlbWFwLW5vcG9zdC5oCj4gCgpfX19f
-X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy
-bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0
-cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs
-Cg==
\ No newline at end of file
+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.
+
+What exactly are you trying to fix here ?
+
+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 ;)
+
+> 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
+>
\ No newline at end of file
diff --git a/a/content_digest b/N2/content_digest
index ec9938c..3f98db8 100644
--- a/a/content_digest
+++ b/N2/content_digest
@@ -2,65 +2,16 @@
   "ref\00020170411122923.6285-1-lorenzo.pieralisi\@arm.com\0"
 ]
 [
-  "From\0Benjamin Herrenschmidt <benh\@kernel.crashing.org>\0"
+  "From\0benh\@kernel.crashing.org (Benjamin Herrenschmidt)\0"
 ]
 [
-  "Subject\0Re: [PATCH v3 00/32] PCI: fix config and I/O Address space memory mappings\0"
+  "Subject\0[PATCH v3 00/32] PCI: fix config and I/O Address space memory mappings\0"
 ]
 [
   "Date\0Tue, 11 Apr 2017 23:38:26 +1000\0"
 ]
 [
-  "To\0Lorenzo Pieralisi <lorenzo.pieralisi\@arm.com>",
-  " linux-pci\@vger.kernel.org\0"
-]
-[
-  "Cc\0Jonas Bonn <jonas\@southpole.se>",
-  " Rich Felker <dalias\@libc.org>",
-  " Catalin Marinas <catalin.marinas\@arm.com>",
-  " 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>",
-  " Matt Turner <mattst88\@gmail.com>",
-  " Haavard Skinnemoen <hskinnemoen\@gmail.com>",
-  " 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"
+  "To\0linux-arm-kernel\@lists.infradead.org\0"
 ]
 [
   "\0000:1\0"
@@ -69,155 +20,182 @@
   "b\0"
 ]
 [
-  "T24gVHVlLCAyMDE3LTA0LTExIGF0IDEzOjI4ICswMTAwLCBMb3JlbnpvIFBpZXJhbGlzaSB3cm90\n",
-  "ZToKPiBUaGlzIHBhdGNoIHNlcmllc1sxXSBpcyBhIHYzIG9mIGEgcHJldmlvdXMgdmVyc2lvbjoK\n",
-  "PiAKPiB2MjogaHR0cHM6Ly9sa21sLm9yZy9sa21sLzIwMTcvMy8yNy8yMjAKCkkgYW0gbm90IGEg\n",
-  "ZmFuIG9mIHRoaXMgYXQgQWxsLgoKVGhhdCB3aG9sZSBjb25jZXB0IG9mICJpb3JlbWFwX25vcG9z\n",
-  "dCIgaXMgc2ltcGx5IG5vdCBhcHBsaWNhYmxlIHRvIHRoZQptYWpvcml0eSBvZiBhcmNoaXRlY3R1\n",
-  "cmVzIGFuZCBjZXJ0YWlubHkgbm90IGluIGEgd2F5IHRoYXQgY2FuIGFwcGx5IHRvCmFyYml0cmFy\n",
-  "eSBtYXBwaW5ncy4KCkl0J3MgYWxzbyB2ZXJ5IHdyb25nIHRvIHByb3ZpZGUgYSAiZGVmYXVsdCIg\n",
-  "b3BlcmF0aW9uIHdob3NlIHNlbWFudGljcwphcmUgd2Vha2VyIHRoYW4gd2hhdCBpdCdzIHN1cHBv\n",
-  "c2VkIHRvIGltcGxlbWVudC4gVmVyeSB3cm9uZyBhY3R1YWxseS4KUGVvcGxlIHdpbGwgdXNlIGl0\n",
-  "IGFzc3VtaW5nIHRoZSBub24tcG9zdGVkIGJlaGF2aW91ciBhbmQgdGhpbmdzIHdpbGwKYnJlYWsg\n",
-  "aW4gc3VidGxlIHdheSB3aGVuIGl0IGNhbm5vdCBiZSBwcm92aWRlZC4KCldoYXQgZXhhY3RseSBh\n",
-  "cmUgeW91IHRyeWluZyB0byBmaXggaGVyZSA/CgpJZiBhIGdpdmVuIFBDSWUgaG9zdCBicmlkZ2Ug\n",
-  "KGFyY2hpdGVjdHVyZSBzcGVjaWZpYykgcmVxdWlyZSBhIHNwZWNpYWwKc2F1Y2UgdG8gcHJvdmlk\n",
-  "ZSB0aGUgaWxsdXNpb24gb2Ygbm9uLXBvc3RpbmcsIHRoZW4gaW1wbGVtZW50IHRoaXMgaW4KdGhl\n",
-  "IGFjdHVhbCByb290IGNvbXBsZXggY29kZS4KCkJUVy4gSSdtIHByZXR0eSBzdXJlIHdlICJhY2Np\n",
-  "ZGVudGFsbHkiIG1hZGUgY29uZmlnIHdyaXRlcyBwb3N0ZWQgYXQKbGVhc3QgdG8gdGhlIFBIQiBv\n",
-  "biBhIG51bWJlciBvZiBwb3dlcnBjIHN5c3RlbXMgZm9yZXZlciBhbmQgd2UgKm5ldmVyKgpoYWQg\n",
-  "YSBwcm9ibGVtIGJlY2F1c2Ugb2YgaXQgOykKCj4gdjIgLT4gdjM6Cj4gCS0gQ3JlYXRlZCBhIGRl\n",
-  "ZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlvbiBpbiBhCj4gc2VwYXJhdGUKPiAJ\n",
-  "wqDCoGFzbS1nZW5lcmljIGhlYWRlciBhbmQgcGF0Y2hlZCBhbGwgYXJjaGVzIHRvIG1ha2UgdXNl\n",
-  "IG9mIGl0Cj4gCS0gUmVtb3ZlZCBQQ0kgZHJpdmVycyBwYXRjaGVzIGZyb20gdGhlIHNlcmllcyB0\n",
-  "byBzaW1wbGlmeSB0aGUKPiAJwqDCoHJldmlldywgdGhleSB3aWxsIGJlIHBvc3RlZCBzZXBhcmF0\n",
-  "ZWx5IG9uY2UgdGhlCj4gaW9yZW1hcF9ub3Bvc3QoKQo+IAnCoMKgaW50ZXJmYWNlIGlzIHNldHRs\n",
-  "ZWQKPiAJLSBGaXhlZCBkZXZtX2lvcmVtYXBfKiBCVVMgb2Zmc2V0IGNvbW1lbnRzIGFuZCBpbXBs\n",
-  "ZW1lbnRlZAo+IAnCoMKgbm9wb3N0IGludGVyZmFjZSBvbiB0b3Agb2YgaXQKPiAJLSBBZGRlZCBj\n",
-  "b2xsZWN0ZWQgdGFncwo+IAo+IHYxOiBodHRwczovL2xrbWwub3JnL2xrbWwvMjAxNy8yLzI3LzIy\n",
-  "OAo+IAo+IHYxIC0+IHYyOgo+IAktIENoYW5nZWQgcGNpX3JlbWFwX2NmZ3NwYWNlKCkgdG8gbW9y\n",
-  "ZSBnZW5lcmljIGlvcmVtYXBfbm9wb3N0KCkKPiAJwqDCoGludGVyZmFjZQo+IAktIEFkZGVkIHBn\n",
-  "cHJvdF9ub25wb3N0ZWQKPiAJLSBGaXhlZCBidWlsZCBlcnJvcnMgb24gYXJjaGVzIG5vdCByZWx5\n",
-  "aW5nIG9uIGFzbS1nZW5lcmljCj4gaGVhZGVycwo+IAktIEFkZGVkIFBDSSB2ZXJzYXRpbGUgaG9z\n",
-  "dCBjb250cm9sbGVyIGRyaXZlciBwYXRjaAo+IAktIEFkZGVkIG1pc3NpbmcgY29uZmlnIHNwYWNl\n",
-  "IHJlbWFwcGluZyB0byBoaXNpbGljb24gaG9zdAo+IGNvbnRyb2xsZXIKPiAKPiAtLS0tLS0tLS0t\n",
-  "LS0tLS0tLS0tLS0KPiBPcmlnaW5hbCBjb3ZlciBsZXR0ZXIKPiAtLS0tLS0tLS0tLS0tLS0tLS0t\n",
-  "LS0KPiAKPiBQQ0kgbG9jYWwgYnVzIHNwZWNpZmljYXRpb25zIChSZXYzLjAsIDMuMi41ICJUcmFu\n",
-  "c2FjdGlvbiBPcmRlcmluZwo+IGFuZCBQb3N0aW5nIikgc3RyaWN0bHkgcmVxdWlyZSBQQ0kgY29u\n",
-  "ZmlndXJhdGlvbiBhbmQgSS9PIEFkZHJlc3MKPiBzcGFjZQo+IHdyaXRlIHRyYW5zYWN0aW9ucyB0\n",
-  "byBiZSBub24tcG9zdGVkLgo+IAo+IEN1cnJlbnQgY3JvcCBvZiBEVC9BQ1BJIFBDSSBob3N0IGNv\n",
-  "bnRyb2xsZXJzIGRyaXZlcnMgcmVsaWVzIG9uCj4gdGhlIGlvcmVtYXAgaW50ZXJmYWNlIHRvIG1h\n",
-  "cCBFQ0FNIGFuZCBFQ0FNLWRlcml2YXRpdmUgUENJIGNvbmZpZwo+IHJlZ2lvbnMgYW5kIHBjaV9y\n",
-  "ZW1hcF9pb3NwYWNlKCkgdG8gY3JlYXRlIGEgVk1BIGZvciBtYXBwaW5nCj4gUENJIGhvc3QgYnJp\n",
-  "ZGdlIEkvTyBBZGRyZXNzIHNwYWNlIHRyYW5zYWN0aW9ucyB0byBDUFUgdmlydHVhbCBhZGRyZXNz\n",
-  "Cj4gc3BhY2UuCj4gCj4gT24gc29tZSBwbGF0Zm9ybXMgKGllIEFSTS9BUk02NCkgaW9yZW1hcCBm\n",
-  "YWlscyB0byBjb21wbHkgd2l0aCB0aGUgUENJCj4gY29uZmlndXJhdGlvbiBub24tcG9zdGVkIHdy\n",
-  "aXRlIHRyYW5zYWN0aW9ucyByZXF1aXJlbWVudCwgYmVjYXVzZSBpdAo+IHByb3ZpZGVzIGEgbWVt\n",
-  "b3J5IG1hcHBpbmcgdGhhdCBpc3N1ZXMgImJ1ZmZlcmFibGUiIG9yLCBpbiBQQ0kgdGVybXMKPiAi\n",
-  "cG9zdGVkIiB3cml0ZSB0cmFuc2FjdGlvbnMuIExpa2V3aXNlLCB0aGUgY3VycmVudAo+IHBjaV9y\n",
-  "ZW1hcF9pb3NwYWNlKCkKPiBpbXBsZW1lbnRhdGlvbiBtYXBzIHRoZSBwaHlzaWNhbCBhZGRyZXNz\n",
-  "IHJhbmdlIHRoYXQgdGhlIFBDSQo+IHRyYW5zbGF0ZXMKPiB0byBJL08gc3BhY2UgY3ljbGVzIHRv\n",
-  "IHZpcnR1YWwgYWRkcmVzcyBzcGFjZSB0aHJvdWdoIHBncHJvdF9kZXZpY2UoKQo+IGF0dHJpYnV0\n",
-  "ZXMgdGhhdCBvbiBlZyBBUk02NCBwcm92aWRlcyBhIG1lbW9yeSBtYXBwaW5nIGlzc3VpbmcKPiBw\n",
-  "b3N0ZWQgd3JpdGVzIHRyYW5zYWN0aW9ucywgd2hpY2ggaXMgbm90IFBDSSBzcGVjaWZpY2F0aW9u\n",
-  "cwo+IGNvbXBsaWFudC4KPiAKPiBUaGlzIHBhdGNoIHNlcmllc1sxXSBhZGRyZXNzZXMgYm90aCBp\n",
-  "c3N1ZXMgaW4gb25lIGdvOgo+IAo+IC0gSXQgdXBkYXRlcyB0aGUgcGNpX3JlbWFwX2lvc3BhY2Uo\n",
-  "KSBmdW5jdGlvbiB0byB1c2UgYSBwYWdlIG1hcHBpbmcKPiDCoCB0aGF0IGd1YXJhbnRlZXMgbm9u\n",
-  "LXBvc3RlZCB3cml0ZSB0cmFuc2FjdGlvbnMgZm9yIEkvTyBzcGFjZQo+IGFkZHJlc3Nlcwo+IC0g\n",
-  "SXQgYWRkcyBhIGtlcm5lbCBBUEkgdG8gcmVtYXAgUENJIGNvbmZpZyBzcGFjZSByZXNvdXJjZXMs\n",
-  "IHNvIHRoYXQKPiDCoCBhcmNoaXRlY3R1cmUgY2FuIG92ZXJyaWRlIGl0IHdpdGggYSBtYXBwaW5n\n",
-  "IGltcGxlbWVudGF0aW9uIHRoYXQKPiDCoCBndWFyYW50ZWVzIFBDSSBzcGVjaWZpY2F0aW9ucyBj\n",
-  "b21wbGlhbmN5IHdydCBub24tcG9zdGVkIHdyaXRlCj4gwqAgY29uZmlndXJhdGlvbiB0cmFuc2Fj\n",
-  "dGlvbnMKPiAtIEl0IHVwZGF0ZXMgYWxsIFBDSSBob3N0IGNvbnRyb2xsZXIgaW1wbGVtZW50YXRp\n",
-  "b25zIChhbmQgdGhlIGdlbmVyaWMKPiDCoCBFQ0FNIGxheWVyKSB0byB1c2UgdGhlIG5ld2x5IGlu\n",
-  "dHJvZHVjZWQgbWFwcGluZyBpbnRlcmZhY2UKPiAKPiBUZXN0ZWQgb24gSnVubyBFQ0FNIGJhc2Vk\n",
-  "IGludGVyZmFjZSAoRFQvQUNQSSkuCj4gCj4gTm9uLUVDQU0gUENJIGhvc3QgY29udHJvbGxlciBk\n",
-  "cml2ZXJzIHBhdGNoZXMgbmVlZCBjaGVja2luZyB0byBtYWtlCj4gc3VyZSB0aGF0Ogo+IAo+IC0g\n",
-  "SSBwYXRjaGVkIHRoZSBjb3JyZWN0IHJlc291cmNlIHJlZ2lvbiBtYXBwaW5nIGZvciBjb25maWcg\n",
-  "c3BhY2UKPiAtIFRoZXJlIGFyZSBub3QgYW55IG90aGVyIHdheXMgdG8gZW5zdXJlIHBvc3RlZC13\n",
-  "cml0ZSBjb21wbGV0aW9uCj4gwqAgaW4gdGhlIHJlc3BlY3RpdmUgcGNpX29wcyB0aGF0IG1ha2Ug\n",
-  "dGhlIHJlbGV2YW50IHBhdGNoIHVubmVjZXNzYXJ5Cj4gCj4gWzFdCj4gZ2l0Oi8vZ2l0Lmtlcm5l\n",
-  "bC5vcmcvcHViL3NjbS9saW51eC9rZXJuZWwvZ2l0L2xwaWVyYWxpc2kvbGludXguZ2l0Cj4gcGNp\n",
-  "L2NvbmZpZy1pby1tYXBwaW5ncy1maXgtdjMKPiAKPiBMb3JlbnpvIFBpZXJhbGlzaSAoMzIpOgo+\n",
-  "IMKgIFBDSTogcmVtb3ZlIF9fd2VhayB0YWcgZnJvbSBwY2lfcmVtYXBfaW9zcGFjZSgpCj4gwqAg\n",
-  "YXNtLWdlbmVyaWMvcGd0YWJsZS5oOiBpbnRyb2R1Y2UgcGdwcm90X25vbnBvc3RlZCByZW1hcCBh\n",
-  "dHRyaWJ1dGUKPiDCoCBQQ0k6IGZpeCBwY2lfcmVtYXBfaW9zcGFjZSgpIHJlbWFwIGF0dHJpYnV0\n",
-  "ZQo+IMKgIGFzbS1nZW5lcmljOiBhZGQgaW9yZW1hcF9ub3Bvc3QoKSByZW1hcCBpbnRlcmZhY2UK\n",
-  "PiDCoCBhbHBoYTogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRp\n",
-  "b24KPiDCoCBhdnIzMjogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50\n",
-  "YXRpb24KPiDCoCBhcmM6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVu\n",
-  "dGF0aW9uCj4gwqAgY3JpczogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVt\n",
-  "ZW50YXRpb24KPiDCoCBmcnY6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxl\n",
-  "bWVudGF0aW9uCj4gwqAgaGV4YWdvbjogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkg\n",
-  "aW1wbGVtZW50YXRpb24KPiDCoCBpYTY0OiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3Qo\n",
-  "KSBpbXBsZW1lbnRhdGlvbgo+IMKgIG0zMnI6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9z\n",
-  "dCgpIGltcGxlbWVudGF0aW9uCj4gwqAgbTY4azogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9w\n",
-  "b3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBtZXRhZzogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBf\n",
-  "bm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBtaWNyb2JsYXplOiBpbmNsdWRlIGRlZmF1bHQg\n",
-  "aW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlvbgo+IMKgIG1pcHM6IGluY2x1ZGUgZGVmYXVs\n",
-  "dCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4gwqAgbW4xMDMwMDogaW5jbHVkZSBk\n",
-  "ZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBuaW9zMjogaW5jbHVk\n",
-  "ZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBvcGVucmlzYzog\n",
-  "aW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24KPiDCoCBwYXJp\n",
-  "c2M6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVudGF0aW9uCj4gwqAg\n",
-  "cG93ZXJwYzogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkgaW1wbGVtZW50YXRpb24K\n",
-  "PiDCoCBzMzkwOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlv\n",
-  "bgo+IMKgIHNoOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRhdGlv\n",
-  "bgo+IMKgIHNwYXJjOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBpbXBsZW1lbnRh\n",
-  "dGlvbgo+IMKgIHRpbGU6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9zdCgpIGltcGxlbWVu\n",
-  "dGF0aW9uCj4gwqAgdW5pY29yZTMyOiBpbmNsdWRlIGRlZmF1bHQgaW9yZW1hcF9ub3Bvc3QoKSBp\n",
-  "bXBsZW1lbnRhdGlvbgo+IMKgIHg4NjogaW5jbHVkZSBkZWZhdWx0IGlvcmVtYXBfbm9wb3N0KCkg\n",
-  "aW1wbGVtZW50YXRpb24KPiDCoCB4dGVuc2E6IGluY2x1ZGUgZGVmYXVsdCBpb3JlbWFwX25vcG9z\n",
-  "dCgpIGltcGxlbWVudGF0aW9uCj4gwqAgYXJtNjQ6IGltcGxlbWVudCBpb3JlbWFwX25vcG9zdCgp\n",
-  "IGludGVyZmFjZQo+IMKgIGFybTogaW1wbGVtZW50IGlvcmVtYXBfbm9wb3N0KCkgaW50ZXJmYWNl\n",
-  "Cj4gwqAgbGliOiBmaXggRGV2cmVzIGRldm1faW9yZW1hcF8qIG9mZnNldCBwYXJhbWV0ZXIga2Vy\n",
-  "bmVsZG9jCj4gZGVzY3JpcHRpb24KPiDCoCBsaWI6IGltcGxlbWVudCBEZXZyZXMgaW9yZW1hcF9u\n",
-  "b3Bvc3QoKSBpbnRlcmZhY2UKPiAKPiDCoERvY3VtZW50YXRpb24vZHJpdmVyLW1vZGVsL2RldnJl\n",
-  "cy50eHQgfMKgwqAzICsrCj4gwqBhcmNoL2FscGhhL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKg\n",
-  "wqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvYXJjL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDC\n",
-  "oMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL2FybS9pbmNsdWRlL2FzbS9pby5o\n",
-  "wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDkgKysrKwo+IMKgYXJjaC9hcm0vbW0vaW9y\n",
-  "ZW1hcC5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgNyArKysKPiDCoGFy\n",
-  "Y2gvYXJtL21tL25vbW11LmPCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzC\n",
-  "oMKgOSArKysrCj4gwqBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKg\n",
-  "wqDCoMKgfCAxMiArKysrKwo+IMKgYXJjaC9hdnIzMi9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDC\n",
-  "oMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL2NyaXMvaW5jbHVkZS9hc20vaW8uaMKgwqDC\n",
-  "oMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL2Zydi9pbmNsdWRlL2FzbS9pby5o\n",
-  "wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJjaC9oZXhhZ29uL2luY2x1\n",
-  "ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKwo+IMKgYXJjaC9pYTY0L2luY2x1\n",
-  "ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJjaC9tMzJy\n",
-  "L2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJj\n",
-  "aC9tNjhrL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+\n",
-  "IMKgYXJjaC9tZXRhZy9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKg\n",
-  "MiArCj4gwqBhcmNoL21pY3JvYmxhemUvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoHzCoMKg\n",
-  "MSArCj4gwqBhcmNoL21pcHMvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC\n",
-  "oHzCoMKgMSArCj4gwqBhcmNoL21uMTAzMDAvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKg\n",
-  "wqDCoHzCoMKgMSArCj4gwqBhcmNoL25pb3MyL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDC\n",
-  "oMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvb3BlbnJpc2MvaW5jbHVkZS9hc20vaW8uaMKgwqDC\n",
-  "oMKgwqDCoMKgwqB8wqDCoDIgKwo+IMKgYXJjaC9wYXJpc2MvaW5jbHVkZS9hc20vaW8uaMKgwqDC\n",
-  "oMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvcG93ZXJwYy9pbmNsdWRlL2FzbS9pby5o\n",
-  "wqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvczM5MC9pbmNsdWRlL2FzbS9pby5o\n",
-  "wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAxICsKPiDCoGFyY2gvc2gvaW5jbHVkZS9hc20v\n",
-  "aW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKgYXJjaC9zcGFyYy9p\n",
-  "bmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBhcmNoL3Rp\n",
-  "bGUvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoHzCoMKgMSArCj4gwqBh\n",
-  "cmNoL3VuaWNvcmUzMi9pbmNsdWRlL2FzbS9pby5owqDCoMKgwqDCoMKgwqB8wqDCoDEgKwo+IMKg\n",
-  "YXJjaC94ODYvaW5jbHVkZS9hc20vaW8uaMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAx\n",
-  "ICsKPiDCoGFyY2gveHRlbnNhL2luY2x1ZGUvYXNtL2lvLmjCoMKgwqDCoMKgwqDCoMKgwqDCoHzC\n",
-  "oMKgMSArCj4gwqBkcml2ZXJzL3BjaS9wY2kuY8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC\n",
-  "oMKgwqDCoMKgwqDCoHzCoMKgNCArLQo+IMKgaW5jbHVkZS9hc20tZ2VuZXJpYy9pb3JlbWFwLW5v\n",
-  "cG9zdC5owqDCoHzCoMKgOSArKysrCj4gwqBpbmNsdWRlL2FzbS1nZW5lcmljL3BndGFibGUuaMKg\n",
-  "wqDCoMKgwqDCoMKgwqDCoHzCoMKgNCArKwo+IMKgaW5jbHVkZS9saW51eC9kZXZpY2UuaMKgwqDC\n",
-  "oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgfMKgwqAyICsKPiDCoGluY2x1ZGUvbGludXgvaW8u\n",
-  "aMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqB8wqDCoDIgKwo+IMKgbGli\n",
-  "L2RldnJlcy5jwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg\n",
-  "wqDCoHwgODQKPiArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystLQo+IMKgMzUgZmls\n",
-  "ZXMgY2hhbmdlZCwgMTY3IGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCj4gwqBjcmVhdGUg\n",
-  "bW9kZSAxMDA2NDQgaW5jbHVkZS9hc20tZ2VuZXJpYy9pb3JlbWFwLW5vcG9zdC5oCj4gCgpfX19f\n",
-  "X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2Vy\n",
-  "bmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0\n",
-  "cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVs\n",
-  "Cg=="
+  "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",
+  "What exactly are you trying to fix here ?\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",
+  "> v2 -> v3:\n",
+  "> \t- Created a default ioremap_nopost() implementation in a\n",
+  "> separate\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??review, they will be posted separately once the\n",
+  "> ioremap_nopost()\n",
+  "> \t??interface is settled\n",
+  "> \t- Fixed devm_ioremap_* BUS offset comments and implemented\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??interface\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",
+  "> ? 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",
+  "> ? 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",
+  "> ? 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",
+  "> ? 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",
+  "> ? 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",
+  "> ? 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",
+  "> ?35 files changed, 167 insertions(+), 5 deletions(-)\n",
+  "> ?create mode 100644 include/asm-generic/ioremap-nopost.h\n",
+  ">"
 ]
 
-4ebb9f14a671848e4cdb9eff828f6b9cdbaec870664c45ea763db967516f7bb2
+42125c0e633314ad99e7a71bf542ee0541fca5fe3bd56d4c0c8320ff4efbea22

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.