From mboxrd@z Thu Jan 1 00:00:00 1970 From: Yongji Xie Subject: Re: [RFC PATCH v3 1/5] PCI: Add support for enforcing all MMIO BARs to be page aligned Date: Mon, 1 Feb 2016 16:50:49 +0800 Message-ID: <56AF1C69.20108@linux.vnet.ibm.com> References: <1452841574-2781-1-git-send-email-xyjxie@linux.vnet.ibm.com> <1452841574-2781-2-git-send-email-xyjxie@linux.vnet.ibm.com> <1454021169.23148.5.camel@redhat.com> <56AB40DC.4000302@linux.vnet.ibm.com> <1454094068.8133.1.camel@redhat.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Cc: nikunj@linux.vnet.ibm.com, zhong@linux.vnet.ibm.com, corbet@lwn.net, aik@ozlabs.ru, warrier@linux.vnet.ibm.com, paulus@samba.org, bhelgaas@google.com To: Alex Williamson , kvm@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pci@vger.kernel.org, linuxppc-dev@lists.ozlabs.org, linux-doc@vger.kernel.org Return-path: In-Reply-To: <1454094068.8133.1.camel@redhat.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: linuxppc-dev-bounces+glppe-linuxppc-embedded-2=m.gmane.org@lists.ozlabs.org Sender: "Linuxppc-dev" List-Id: kvm.vger.kernel.org T24gMjAxNi8xLzMwIDM6MDEsIEFsZXggV2lsbGlhbXNvbiB3cm90ZToKPiBPbiBGcmksIDIwMTYt MDEtMjkgYXQgMTg6MzcgKzA4MDAsIFlvbmdqaSBYaWUgd3JvdGU6Cj4+IE9uIDIwMTYvMS8yOSA2 OjQ2LCBBbGV4IFdpbGxpYW1zb24gd3JvdGU6Cj4+PiBPbiBGcmksIDIwMTYtMDEtMTUgYXQgMTU6 MDYgKzA4MDAsIFlvbmdqaSBYaWUgd3JvdGU6Cj4+Pj4gV2hlbiB2ZmlvIHBhc3N0aHJvdWdoIGEg UENJIGRldmljZSBvZiB3aGljaCBNTUlPIEJBUnMKPj4+PiBhcmUgc21hbGxlciB0aGFuIFBBR0Vf U0laRSwgZ3Vlc3Qgd2lsbCBub3QgaGFuZGxlIHRoZQo+Pj4+IG1taW8gYWNjZXNzZXMgdG8gdGhl IEJBUnMgd2hpY2ggbGVhZHMgdG8gbW1pbyBlbXVsYXRpb25zCj4+Pj4gaW4gaG9zdC4KPj4+PiAg ICAKPj4+PiBUaGlzIGlzIGJlY2F1c2UgdmZpbyB3aWxsIG5vdCBhbGxvdyB0byBwYXNzdGhyb3Vn aCBvbmUKPj4+PiBCQVIncyBtbWlvIHBhZ2Ugd2hpY2ggbWF5IGJlIHNoYXJlZCB3aXRoIG90aGVy IEJBUnMuCj4+Pj4gICAgCj4+Pj4gVG8gc29sdmUgdGhpcyBwZXJmb3JtYW5jZSBpc3N1ZSwgdGhp cyBwYXRjaCBhZGRzIGEga2VybmVsCj4+Pj4gcGFyYW1ldGVyICJwY2k9cmVzb3VyY2VfcGFnZV9h bGlnbmVkPW9uIiB0byBlbmZvcmNlCj4+Pj4gdGhlIGFsaWdubWVudCBvZiBhbGwgTU1JTyBCQVJz IHRvIGJlIGF0IGxlYXN0IFBBR0VfU0laRSwKPj4+PiBzbyB0aGF0IG9uZSBCQVIncyBtbWlvIHBh Z2Ugd291bGQgbm90IGJlIHNoYXJlZCB3aXRoIG90aGVyCj4+Pj4gQkFScy4gV2UgY2FuIGFsc28g ZGlzYWJsZSBpdCB0aHJvdWdoIGtlcm5lbCBwYXJhbWV0ZXIKPj4+PiAicGNpPXJlc291cmNlX3Bh Z2VfYWxpZ25lZD1vZmYiLgo+Pj4+ICAgIAo+Pj4+IEZvciB0aGUgZGVmYXVsdCB2YWx1ZSBvZiB0 aGUgcGFyYW1ldGVyLCB3ZSB0aGluayBpdCBzaG91bGQgYmUKPj4+PiBhcmNoLWluZGVwZW5kZW50 LCBzbyB3ZSBhZGQgYSBtYWNybwo+Pj4+IEhBVkVfUENJX0RFRkFVTFRfUkVTT1VSQ0VTX1BBR0Vf QUxJR05FRCB0byBjaGFuZ2UgaXQuIEFuZCB3ZQo+Pj4+IGRlZmluZSB0aGlzIG1hY3JvIHRvIGVu YWJsZSB0aGlzIHBhcmFtZXRlciBieSBkZWZhdWx0IG9uIFBQQzY0Cj4+Pj4gcGxhdGZvcm0gd2hp Y2ggY2FuIGVhc2lseSBoaXQgdGhpcyBwZXJmb3JtYW5jZSBpc3N1ZSBiZWNhdXNlCj4+Pj4gaXRz IFBBR0VfU0laRSBpcyA2NEtCLgo+Pj4+ICAgIAo+Pj4+IE5vdGUgdGhhdCB0aGUga2VybmVsIHBh cmFtZXRlciB3b24ndCB3b3JrcyBpZiBrZXJuZWwgZG9lc24ndCBkbwo+Pj4+IHJlc291cmNlcyBy ZWFsbG9jYXRpb24uCj4+PiBBbmQgd2hlcmUgZG8geW91IGFjY291bnQgZm9yIHRoaXMgc28gdGhh dCB3ZSBrbm93IHdoZXRoZXIgaXQncyByZWFsbHkgaW4KPj4+IGVmZmVjdD8KPj4gICAKPj4gV2Ug Y2FuIGNoZWNrIHRoZSBmbGFnIFBDSV9QUk9CRV9PTkxZIHRvIGtub3cgd2hldGhlciBrZXJuZWwg ZG8KPj4gcmVzb3VyY2VzIHJlYWxsb2NhdGlvbi4gVGhlbiB3ZSBrbm93IGlmIHRoZSBrZXJuZWwg cGFyYW1ldGVyIGlzIHJlYWxseQo+PiBpbiBlZmZlY3QuCj4+ICAgCj4+IGVudW0gewo+PiAgICAg ICAvKiBGb3JjZSByZS1hc3NpZ25pbmcgYWxsIHJlc291cmNlcyAoaWdub3JlIGZpcm13YXJlCj4+ ICAgICAgICAqIHNldHVwIGNvbXBsZXRlbHkpCj4+ICAgICAgICAqLwo+PiAgICAgICBQQ0lfUkVB U1NJR05fQUxMX1JTUkMgICAgPSAweDAwMDAwMDAxLAo+PiAgIAo+PiAgICAgICAvKiBSZS1hc3Np Z24gYWxsIGJ1cyBudW1iZXJzICovCj4+ICAgICAgIFBDSV9SRUFTU0lHTl9BTExfQlVTICAgID0g MHgwMDAwMDAwMiwKPj4gICAKPj4gICAgICAgLyogRG8gbm90IHRyeSB0byBhc3NpZ24sIGp1c3Qg dXNlIGV4aXN0aW5nIHNldHVwICovCj4+IC0tLT4gICAgUENJX1BST0JFX09OTFkgICAgICAgID0g MHgwMDAwMDAwNCwKPj4gICAKPj4gQW5kIEkgd2lsbCBhZGQgdGhpcyB0byBjb21taXQgbG9nLgo+ IFdlIG5lZWQgbW9yZSB0aGFuIGEgY29tbWl0IGxvZyBlbnRyeSBmb3IgdGhpcywgd2hhdCdzIHRo ZSBwdXJwb3NlIG9mIHRoZQo+IHBjaV9yZXNvdXJjZXNfc2hhcmVfcGFnZSgpIGZ1bmN0aW9uIGlm IHdlIGRvbid0IGtub3cgaWYgdGhpcyBpcyBpbgo+IGVmZmVjdD8KCkl0IHNlZW1zIHRoZSBwYXJh bWV0ZXIgd2lsbCBiZSBhbHdheXMgaW4gZWZmZWN0IGlmIHdlIHJldXNlIHRoZSAKcmUtYWxpZ25p bmcgY29kZQpvZiBwYXJhbWV0ZXIgInJlc291cmNlX2FsaWdubWVudD0iIGluIHBjaV9yZWFzc2ln bmRldl9yZXNvdXJjZV9hbGlnbm1lbnQoKS4KCj4+Pj4gU2lnbmVkLW9mZi1ieTogWW9uZ2ppIFhp ZSA8eHlqeGllQGxpbnV4LnZuZXQuaWJtLmNvbT4KPj4+PiAtLS0KPj4+PiAgICBEb2N1bWVudGF0 aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCB8ICAgIDUgKysrKysKPj4+PiAgICBhcmNoL3Bvd2Vy cGMvaW5jbHVkZS9hc20vcGNpLmggICAgICB8ICAgMTEgKysrKysrKysrKysKPj4+PiAgICBkcml2 ZXJzL3BjaS9wY2kuYyAgICAgICAgICAgICAgICAgICB8ICAgMzUgKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKysrKysKPj4+PiAgICBkcml2ZXJzL3BjaS9wY2kuaCAgICAgICAgICAgICAg ICAgICB8ICAgIDggKysrKysrKy0KPj4+PiAgICBpbmNsdWRlL2xpbnV4L3BjaS5oICAgICAgICAg ICAgICAgICB8ICAgIDQgKysrKwo+Pj4+ICAgIDUgZmlsZXMgY2hhbmdlZCwgNjIgaW5zZXJ0aW9u cygrKSwgMSBkZWxldGlvbigtKQo+Pj4+ICAgIAo+Pj4+IGRpZmYgLS1naXQgYS9Eb2N1bWVudGF0 aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dCBiL0RvY3VtZW50YXRpb24va2VybmVsLXBhcmFtZXRl cnMudHh0Cj4+Pj4gaW5kZXggNzQyZjY5ZC4uM2YyYTdjOSAxMDA2NDQKPj4+PiAtLS0gYS9Eb2N1 bWVudGF0aW9uL2tlcm5lbC1wYXJhbWV0ZXJzLnR4dAo+Pj4+ICsrKyBiL0RvY3VtZW50YXRpb24v a2VybmVsLXBhcmFtZXRlcnMudHh0Cj4+Pj4gQEAgLTI4NTcsNiArMjg1NywxMSBAQCBieXRlcyBy ZXNwZWN0aXZlbHkuIFN1Y2ggbGV0dGVyIHN1ZmZpeGVzIGNhbiBhbHNvIGJlIGVudGlyZWx5IG9t aXR0ZWQuCj4+Pj4gICAgCQkJCVBBR0VfU0laRSBpcyB1c2VkIGFzIGFsaWdubWVudC4KPj4+PiAg ICAJCQkJUENJLVBDSSBicmlkZ2UgY2FuIGJlIHNwZWNpZmllZCwgaWYgcmVzb3VyY2UKPj4+PiAg ICAJCQkJd2luZG93cyBuZWVkIHRvIGJlIGV4cGFuZGVkLgo+Pj4+ICsJCXJlc291cmNlX3BhZ2Vf YWxpZ25lZD0JRW5hYmxlL2Rpc2FibGUgZW5mb3JjaW5nIHRoZSBhbGlnbm1lbnQKPj4+PiArCQkJ CW9mIGFsbCBQQ0kgZGV2aWNlcycgbWVtb3J5IHJlc291cmNlcyB0byBiZQo+Pj4+ICsJCQkJYXQg bGVhc3QgUEFHRV9TSVpFIGlmIHJlc291cmNlcyByZWFsbG9jYXRpb24KPj4+PiArCQkJCWlzIGRv bmUgYnkga2VybmVsLgo+Pj4+ICsJCQkJRm9ybWF0OiB7ICJvbiIgfCAib2ZmIiB9Cj4+Pj4gICAg CQllY3JjPQkJRW5hYmxlL2Rpc2FibGUgUENJZSBFQ1JDICh0cmFuc2FjdGlvbiBsYXllcgo+Pj4+ ICAgIAkJCQllbmQtdG8tZW5kIENSQyBjaGVja2luZykuCj4+Pj4gICAgCQkJCWJpb3M6IFVzZSBC SU9TL2Zpcm13YXJlIHNldHRpbmdzLiBUaGlzIGlzIHRoZQo+Pj4+IGRpZmYgLS1naXQgYS9hcmNo L3Bvd2VycGMvaW5jbHVkZS9hc20vcGNpLmggYi9hcmNoL3Bvd2VycGMvaW5jbHVkZS9hc20vcGNp LmgKPj4+PiBpbmRleCAzNDUzYmQ4Li4yZDJiM2VmIDEwMDY0NAo+Pj4+IC0tLSBhL2FyY2gvcG93 ZXJwYy9pbmNsdWRlL2FzbS9wY2kuaAo+Pj4+ICsrKyBiL2FyY2gvcG93ZXJwYy9pbmNsdWRlL2Fz bS9wY2kuaAo+Pj4+IEBAIC0xMzYsNiArMTM2LDE3IEBAIGV4dGVybiBwZ3Byb3RfdAlwY2lfcGh5 c19tZW1fYWNjZXNzX3Byb3Qoc3RydWN0IGZpbGUgKmZpbGUsCj4+Pj4gICAgCQkJCQkgdW5zaWdu ZWQgbG9uZyBwZm4sCj4+Pj4gICAgCQkJCQkgdW5zaWduZWQgbG9uZyBzaXplLAo+Pj4+ICAgIAkJ CQkJIHBncHJvdF90IHByb3QpOwo+Pj4+ICsjaWZkZWYgQ09ORklHX1BQQzY0Cj4+Pj4gKwo+Pj4+ ICsvKiBGb3IgUFBDNjQsIFdlIGVuZm9yY2UgYWxsIFBDSSBNTUlPIEJBUnMgdG8gYmUgcGFnZSBh bGlnbmVkCj4+Pj4gKyAqIGJ5IGRlZmF1bHQuIFRoaXMgd291bGQgYmUgaGVscGZ1bCB0byBpbXBy b3ZlIHBlcmZvcm1hbmNlCj4+Pj4gKyAqIHdoZW4gd2UgcGFzc3Rocm91Z2ggYSBQQ0kgZGV2aWNl IG9mIHdoaWNoIEJBUnMgYXJlIHNtYWxsZXIKPj4+PiArICogdGhhbiBQQUdFX1NJWkUoNjRLQiku IEFuZCB3ZSBjYW4gdXNlIGtlcm5lbCBwYXJhbWV0ZXIKPj4+PiArICogInBjaT1yZXNvdXJjZV9w YWdlX2FsaWduZWQ9b2ZmIiB0byBkaXNhYmxlIGl0Lgo+Pj4+ICsgKi8KPj4+PiArI2RlZmluZSBI QVZFX1BDSV9ERUZBVUxUX1JFU09VUkNFU19QQUdFX0FMSUdORUQJMQo+Pj4+ICsKPj4+PiArI2Vu ZGlmCj4+Pj4gICAgCj4+Pj4gICAgI2RlZmluZSBIQVZFX0FSQ0hfUENJX1JFU09VUkNFX1RPX1VT RVIKPj4+PiAgICBleHRlcm4gdm9pZCBwY2lfcmVzb3VyY2VfdG9fdXNlcihjb25zdCBzdHJ1Y3Qg cGNpX2RldiAqZGV2LCBpbnQgYmFyLAo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2ku YyBiL2RyaXZlcnMvcGNpL3BjaS5jCj4+Pj4gaW5kZXggMzE0ZGI4Yy4uN2IyMTIzOCAxMDA2NDQK Pj4+PiAtLS0gYS9kcml2ZXJzL3BjaS9wY2kuYwo+Pj4+ICsrKyBiL2RyaXZlcnMvcGNpL3BjaS5j Cj4+Pj4gQEAgLTk5LDYgKzk5LDkgQEAgdTggcGNpX2NhY2hlX2xpbmVfc2l6ZTsKPj4+PiAgICAg Ki8KPj4+PiAgICB1bnNpZ25lZCBpbnQgcGNpYmlvc19tYXhfbGF0ZW5jeSA9IDI1NTsKPj4+PiAg ICAKPj4+PiArYm9vbCBwY2lfcmVzb3VyY2VzX3BhZ2VfYWxpZ25lZCA9Cj4+Pj4gKwlJU19FTkFC TEVEKEhBVkVfUENJX0RFRkFVTFRfUkVTT1VSQ0VTX1BBR0VfQUxJR05FRCk7Cj4+PiBJIGRvbid0 IHRoaW5rIHRoaXMgaXMgcHJvcGVyIHVzZSBvZiBJU19FTkFCTEVELCB3aGljaCBzZWVtcyB0byBi ZQo+Pj4gdGFyZ2V0ZWQgYXQgQ09ORklHXyB0eXBlIG9wdGlvbnMuICBZb3UgY291bGQgZGVmaW5l IHRoaXMgYXMgdGhhdCBpbiBhbgo+Pj4gYXJjaCBLY29uZmlnLgo+PiAgIAo+PiBJcyBpdCBiZXR0 ZXIgdGhhdCB3ZSBkZWZpbmUgdGhpcyBhcyBhIHBjaSBLY29uZmlnIGFuZCBzZWxlY3QgaXQgaW4g YXJjaAo+PiBLY29uZmlnPwo+IElmIHlvdSB3YW50IHRvIHVzZSBJU19FTkFCTEUgaGVyZSwgSSB3 b3VsZCB0aGluayBzby4KCkFjdHVhbGx5LCBJJ20gbm90IHN1cmUgaWYgaXQncyBuZWNlc3Nhcnkg dG8gYWRkIGEgS2NvbmZpZyBvcHRpb24gZm9yIGl0LgoKSSBwcmVmZXIgdG8gZG8gaXQgbGlrZSBw cmV2aW91cyB2ZXJzaW9uOgoKI2lmZGVmIEhBVkVfUENJX0RFRkFVTFRfUkVTT1VSQ0VTX1BBR0Vf QUxJR05FRApib29sIHBjaV9yZXNvdXJjZXNfcGFnZV9hbGlnbmVkID0gdHJ1ZTsKI2Vsc2UKYm9v bCBwY2lfcmVzb3VyY2VzX3BhZ2VfYWxpZ25lZDsKI2VuZGlmCgo+Pj4+ICsKPj4+PiAgICAvKiBJ ZiBzZXQsIHRoZSBQQ0llIEFSSSBjYXBhYmlsaXR5IHdpbGwgbm90IGJlIHVzZWQuICovCj4+Pj4g ICAgc3RhdGljIGJvb2wgcGNpZV9hcmlfZGlzYWJsZWQ7Cj4+Pj4gICAgCj4+Pj4gQEAgLTQ3NDYs NiArNDc0OSwzNSBAQCBzdGF0aWMgc3NpemVfdCBwY2lfcmVzb3VyY2VfYWxpZ25tZW50X3N0b3Jl KHN0cnVjdCBidXNfdHlwZSAqYnVzLAo+Pj4+ICAgIEJVU19BVFRSKHJlc291cmNlX2FsaWdubWVu dCwgMDY0NCwgcGNpX3Jlc291cmNlX2FsaWdubWVudF9zaG93LAo+Pj4+ICAgIAkJCQkJcGNpX3Jl c291cmNlX2FsaWdubWVudF9zdG9yZSk7Cj4+Pj4gICAgCj4+Pj4gK3N0YXRpYyB2b2lkIHBjaV9y ZXNvdXJjZXNfZ2V0X3BhZ2VfYWxpZ25lZChjaGFyICpzdHIpCj4+Pj4gK3sKPj4+PiArCWlmICgh c3RybmNtcChzdHIsICJvZmYiLCAzKSkKPj4+PiArCQlwY2lfcmVzb3VyY2VzX3BhZ2VfYWxpZ25l ZCA9IGZhbHNlOwo+Pj4+ICsJZWxzZSBpZiAoIXN0cm5jbXAoc3RyLCAib24iLCAyKSkKPj4+PiAr CQlwY2lfcmVzb3VyY2VzX3BhZ2VfYWxpZ25lZCA9IHRydWU7Cj4+Pj4gK30KPj4+ICJnZXQiPwo+ PiAgIAo+PiBIb3cgYWJvdXQgcGNpX3Jlc291cmNlc19wYXJzZV9wYWdlX2FsaWduZWRfcGFyYW0o KT8KPiBCZXR0ZXIuCj4KPj4+PiArCj4+Pj4gKy8qCj4+Pj4gKyAqIFRoaXMgZnVuY3Rpb24gY2hl Y2tzIHdoZXRoZXIgUENJIEJBUnMnIG1taW8gcGFnZSB3aWxsIGJlIHNoYXJlZAo+Pj4+ICsgKiB3 aXRoIG90aGVyIEJBUnMuCj4+Pj4gKyAqLwo+Pj4+ICtib29sIHBjaV9yZXNvdXJjZXNfc2hhcmVf cGFnZShzdHJ1Y3QgcGNpX2RldiAqZGV2LCBpbnQgcmVzbm8pCj4+Pj4gK3sKPj4+PiArCXN0cnVj dCByZXNvdXJjZSAqcmVzID0gZGV2LT5yZXNvdXJjZSArIHJlc25vOwo+Pj4+ICsKPj4+PiArCWlm IChyZXNvdXJjZV9zaXplKHJlcykgPj0gUEFHRV9TSVpFKQo+Pj4+ICsJCXJldHVybiBmYWxzZTsK Pj4+PiArCWlmIChwY2lfcmVzb3VyY2VzX3BhZ2VfYWxpZ25lZCAmJiAhKHJlcy0+c3RhcnQgJiB+ UEFHRV9NQVNLKSAmJgo+Pj4+ICsJICAgIHJlcy0+ZmxhZ3MgJiBJT1JFU09VUkNFX01FTSkgewo+ Pj4+ICsJCWlmIChyZXMtPnNpYmxpbmcpCj4+Pj4gKwkJCXJldHVybiAocmVzLT5zaWJsaW5nLT5z dGFydCAmIH5QQUdFX01BU0spOwo+Pj4+ICsJCWVsc2UKPj4+PiArCQkJcmV0dXJuIGZhbHNlOwo+ Pj4+ICsJfQo+Pj4+ICsJcmV0dXJuIHRydWU7Cj4+Pj4gK30KPj4+PiArRVhQT1JUX1NZTUJPTF9H UEwocGNpX3Jlc291cmNlc19zaGFyZV9wYWdlKTsKPj4+PiArCj4+Pj4gICAgc3RhdGljIGludCBf X2luaXQgcGNpX3Jlc291cmNlX2FsaWdubWVudF9zeXNmc19pbml0KHZvaWQpCj4+Pj4gICAgewo+ Pj4+ICAgIAlyZXR1cm4gYnVzX2NyZWF0ZV9maWxlKCZwY2lfYnVzX3R5cGUsCj4+Pj4gQEAgLTQ4 NTksNiArNDg5MSw5IEBAIHN0YXRpYyBpbnQgX19pbml0IHBjaV9zZXR1cChjaGFyICpzdHIpCj4+ Pj4gICAgCQkJfSBlbHNlIGlmICghc3RybmNtcChzdHIsICJyZXNvdXJjZV9hbGlnbm1lbnQ9Iiwg MTkpKSB7Cj4+Pj4gICAgCQkJCXBjaV9zZXRfcmVzb3VyY2VfYWxpZ25tZW50X3BhcmFtKHN0ciAr IDE5LAo+Pj4+ICAgIAkJCQkJCQlzdHJsZW4oc3RyICsgMTkpKTsKPj4+PiArCQkJfSBlbHNlIGlm ICghc3RybmNtcChzdHIsICJyZXNvdXJjZV9wYWdlX2FsaWduZWQ9IiwKPj4+PiArCQkJCSAgIDIy KSkgewo+Pj4+ICsJCQkJcGNpX3Jlc291cmNlc19nZXRfcGFnZV9hbGlnbmVkKHN0ciArIDIyKTsK Pj4+IERvZXNuJ3QgdGhpcyBzZWVtIHJhdGhlciByZWR1bmRhbnQgd2l0aCB0aGUgb3B0aW9uIHJp Z2h0IGFib3ZlIGl0LAo+Pj4gcmVzb3VyY2VfYWxpZ25tZW50PT8gIFdoeSBub3QgbW9kaWZ5IHRo YXQgdG8gc3VwcG9ydCBzeW50YXggd2hlcmUgYWxsCj4+PiBkZXZpY2VzIGdldCB0aGUgc2FtZSBh bGlnbm1lbnQ/Cj4+PiAgIAo+PiAgIAo+PiBUaGUga2VybmVsIG9wdGlvbiB3aWxsIGJlIHVzZWQg dG8gZG8gdHdvIHRoaW5ncy4KPj4gICAKPj4gRmlyc3RseSwgdGhlIG9wdGlvbiBjYW4gYmUgdXNl ZCB0byBlbmFibGUgYWxsIGRldmljZXMgdG8gYmUgcGFnZSBhbGlnbmVkLgo+PiAgIAo+PiBTZWNv bmRseSwgd2UgY2FuIHVzZSB0aGUgb3B0aW9uIHRvIGRpc2FibGUgaXQgd2hlbiB0aGUgS2NvbmZp ZyBvcHRpb24KPj4gbWVudGlvbmVkIGFib3ZlIGVuYWJsZSBhbGwgZGV2aWNlcyB0byBiZSBwYWdl IGFsaWduZWQgYnkgZGVmYXVsdC4KPj4gICAKPj4gV2UgY2FuIGVhc2lseSBtb2RpZnkgdGhpcyBv cHRpb24gInJlc291cmNlX2FsaWdubWVudD0iIHRvIGRvIHRoZSBmaXJzdAo+PiB0aGluZy4gQnV0 IEkgZGlkbid0IGZpbmQgYSBwcm9wZXIgd2F5IHRvIG1vZGlmeSBpdCB0byBkbyB0aGUgc2Vjb25k IHRoaW5nLgo+IFlvdSBjb3VsZCBhbGxvdyBhbiBhcmNoIHNwZWNpZmllZCBkZWZhdWx0IHdoaWNo IGlzIG92ZXJyaWRkZW4gYnkKPiBzcGVjaWZ5aW5nIGEgcmVzb3VyY2VfYWxpZ25tZW50PSB2YWx1 ZS4gIFRoZW4geW91IG5lZWQgYSB3YXkgdG8gZGlzYWJsZQo+IGl0LCB3aGljaCB5b3UgY291bGQg c2ltcGx5IGRvIGJ5IG1ha2luZwo+IHBjaV9zZXRfcmVzb3VyY2VfYWxpZ25tZW50X3BhcmFtKCkg YWJsZSB0byBwYXJzZSBzb21ldGhpbmcgbGlrZQo+IHJlc291cmNlX2FsaWdubWVudD1vZmYuCgpX ZSBqdXN0IHdhbnQgdG8gZW5mb3JjZSB0aGUgYWxpZ25tZW50IG9mIGFsbCBNTUlPIEJBUnMgdG8g YmUgcGFnZQphbGlnbmVkIGluIHRoaXMgcGF0Y2guIEFuZCBib3RoIHRoZSBhcmNoIHNwZWNpZmll ZCBkZWZhdWx0IHZhbHVlIGFuZApwY2lfcmVzb3VyY2VzX3BhZ2VfYWxpZ25lZCBhcmUgc29tZXRo aW5nIGxpa2UgKm9uL29mZiogZW5mb3JjaW5nIHRoZQphbGlnbm1lbnQgb2YgcmVzb3VyY2VzIHRv IGJlIHBhZ2UgYWxpZ25lZC4KClNvIEkgdGhpbmsgaXQncyBiZXR0ZXIgdG8gYWRkIGEgcGFyYW1l dGVyIHdob3NlIGZvcm1hdCBpcyAqb24vb2ZmKi4KCklmIHdlIHJldXNlICJyZXNvdXJjZV9hbGln bm1lbnQ9Iiwgd2UgbmVlZCBhbiBhZGRpdGlvbmFsIHRyYW5zbGF0aW9uCmZyb20gInJlc291cmNl X2FsaWdubWVudD0iKGZvcm1hdDogWzxvcmRlciBvZiBhbGlnbj5AXS4uLikgdG8KcGNpX3Jlc291 cmNlc19wYWdlX2FsaWduZWQoZm9ybWF0OiB0cnVlL2ZhbHNlKS4KCkFuZCAicmVzb3VyY2VfYWxp Z25tZW50PSIgaXMgYWx3YXlzIHVzZWQgdG8gc3BlY2lmeSBhbGlnbm1lbnRzIG9mIGRldmljZXMu CldvdWxkIGl0IGJlIG1pc3VuZGVyc3RhbmRpbmcgdG8gYWRkIHNvbWUgc3ludGF4IGxpa2UKInJl c291cmNlX2FsaWdubWVudD1vZmYiPwoKPj4+PiAgICAJCQl9IGVsc2UgaWYgKCFzdHJuY21wKHN0 ciwgImVjcmM9IiwgNSkpIHsKPj4+PiAgICAJCQkJcGNpZV9lY3JjX2dldF9wb2xpY3koc3RyICsg NSk7Cj4+Pj4gICAgCQkJfSBlbHNlIGlmICghc3RybmNtcChzdHIsICJocGlvc2l6ZT0iLCA5KSkg ewo+Pj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL3BjaS9wY2kuaCBiL2RyaXZlcnMvcGNpL3BjaS5o Cj4+Pj4gaW5kZXggZDM5MGZjMS4uYjliMzMzZCAxMDA2NDQKPj4+PiAtLS0gYS9kcml2ZXJzL3Bj aS9wY2kuaAo+Pj4+ICsrKyBiL2RyaXZlcnMvcGNpL3BjaS5oCj4+Pj4gQEAgLTMxMiwxMSArMzEy LDE3IEBAIHN0YXRpYyBpbmxpbmUgcmVzb3VyY2Vfc2l6ZV90IHBjaV9yZXNvdXJjZV9hbGlnbm1l bnQoc3RydWN0IHBjaV9kZXYgKmRldiwKPj4+PiAgICAjaWZkZWYgQ09ORklHX1BDSV9JT1YKPj4+ PiAgICAJaW50IHJlc25vID0gcmVzIC0gZGV2LT5yZXNvdXJjZTsKPj4+PiAgICAKPj4+PiAtCWlm IChyZXNubyA+PSBQQ0lfSU9WX1JFU09VUkNFUyAmJiByZXNubyA8PSBQQ0lfSU9WX1JFU09VUkNF X0VORCkKPj4+PiArCWlmIChyZXNubyA+PSBQQ0lfSU9WX1JFU09VUkNFUyAmJiByZXNubyA8PSBQ Q0lfSU9WX1JFU09VUkNFX0VORCkgewo+Pj4+ICsJCWlmIChwY2lfcmVzb3VyY2VzX3BhZ2VfYWxp Z25lZCAmJiByZXMtPmZsYWdzICYgSU9SRVNPVVJDRV9NRU0pCj4+Pj4gKwkJCXJldHVybiBQQUdF X0FMSUdOKHBjaV9zcmlvdl9yZXNvdXJjZV9hbGlnbm1lbnQoZGV2LAo+Pj4+ICsJCQkJCSAgcmVz bm8pKTsKPj4+PiAgICAJCXJldHVybiBwY2lfc3Jpb3ZfcmVzb3VyY2VfYWxpZ25tZW50KGRldiwg cmVzbm8pOwo+Pj4+ICsJfQo+Pj4+ICAgICNlbmRpZgo+Pj4+ICAgIAlpZiAoZGV2LT5jbGFzcyA+ PiA4ICA9PSBQQ0lfQ0xBU1NfQlJJREdFX0NBUkRCVVMpCj4+Pj4gICAgCQlyZXR1cm4gcGNpX2Nh cmRidXNfcmVzb3VyY2VfYWxpZ25tZW50KHJlcyk7Cj4+Pj4gKwlpZiAocGNpX3Jlc291cmNlc19w YWdlX2FsaWduZWQgJiYgcmVzLT5mbGFncyAmIElPUkVTT1VSQ0VfTUVNKQo+Pj4+ICsJCXJldHVy biBQQUdFX0FMSUdOKHJlc291cmNlX2FsaWdubWVudChyZXMpKTsKPj4+PiAgICAJcmV0dXJuIHJl c291cmNlX2FsaWdubWVudChyZXMpOwo+Pj4+ICAgIH0KPj4+ICAgCj4+PiBTaW5jZSB3ZSBhbHJl YWR5IGhhdmUgcmVzb3VyY2VfYWxpZ25tZW50PSwgc2hvdWxkbid0IHdlIGFscmVhZHkgaGF2ZSB0 aGUKPj4+IGNvZGUgaW4gcGxhY2UgdG8gcmUtYWxpZ24/Cj4+ICAgCj4+IFllcywgdGhpcyBjb2Rl IGNhbiBkbyB0aGUgcmUtYWxpZ25pbmcuIEJ1dCB3ZSBjYW4ndCByZXVzZSB0aGUgY29kZSBiZWNh dXNlCj4+IGl0IHJlLWFsaWduIGRldmljZSdzIGJhcnMgYnkgY2hhbmdpbmcgdGhlaXIgc2l6ZXMs IHdoaWNoIGNhbiBwb3RlbnRpYWxseQo+PiBicmVhawo+PiBzb21lIGRyaXZlcnMuCj4+ICAgCj4+ IEknbSB0aGlua2luZyBpZiB3ZSBjYW4gdXNlIElPUkVTT1VSQ0VfU1RBUlRBTElHTiBmb3IgdGhp cy4gVGhhbmtzLgo+IFNob3VsZG4ndCB3ZSBmaXggcmVzb3VyY2VfYWxpZ25tZW50PSB0aGVuIHRv IG1ha2UgaXQgYmVoYXZlIGluIGEgbW9yZQo+IGNvbXBhdGlibGUgd2F5IHRoZW4/ICByZXNvdXJj ZV9hbGlnbm1lbnQ9NjRrLHJlc291cmNlX3Jlc2l6ZT1vZmY/Cj4gVGhhbmtzLAo+Cj4gQWxleAo+ CgpHb29kIHBvaW50ISBXZSBjYW4gYWRkIHNvbWV0aGluZyBsaWtlICJyZXNvdXJjZV9yZXNpemU9 b2ZmIiB0bwoicmVzb3VyY2VfYWxpZ25tZW50PSIuIFRoZW4gd2UgY2FuIHJldXNlIHRoZSByZS1h bGlnbmluZyBjb2RlLiBUaGFua3MuCgpSZWdhcmRzLApZb25namkgWGllCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpMaW51eHBwYy1kZXYgbWFpbGluZyBs aXN0CkxpbnV4cHBjLWRldkBsaXN0cy5vemxhYnMub3JnCmh0dHBzOi8vbGlzdHMub3psYWJzLm9y Zy9saXN0aW5mby9saW51eHBwYy1kZXY=