From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH v6 05/32] drm/i915: Track GEN6 page table usage Date: Tue, 10 Mar 2015 13:19:14 +0200 Message-ID: <87bnk1hzgt.fsf@gaia.fi.intel.com> References: <1418922621-25818-1-git-send-email-michel.thierry@intel.com> <1424794985-14441-1-git-send-email-michel.thierry@intel.com> <1424794985-14441-6-git-send-email-michel.thierry@intel.com> <87bnkg8y11.fsf@gaia.fi.intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTP id 816176E11B for ; Tue, 10 Mar 2015 04:19:24 -0700 (PDT) In-Reply-To: <87bnkg8y11.fsf@gaia.fi.intel.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Michel Thierry , intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org TWlrYSBLdW9wcGFsYSA8bWlrYS5rdW9wcGFsYUBsaW51eC5pbnRlbC5jb20+IHdyaXRlczoKCj4g TWljaGVsIFRoaWVycnkgPG1pY2hlbC50aGllcnJ5QGludGVsLmNvbT4gd3JpdGVzOgo+Cj4+IEZy b206IEJlbiBXaWRhd3NreSA8YmVuamFtaW4ud2lkYXdza3lAaW50ZWwuY29tPgo+Pgo+PiBJbnN0 ZWFkIG9mIGltcGxlbWVudGluZyB0aGUgZnVsbCB0cmFja2luZyArIGR5bmFtaWMgYWxsb2NhdGlv biwgdGhpcwo+PiBwYXRjaCBkb2VzIGEgYml0IGxlc3MgdGhhbiBoYWxmIG9mIHRoZSB3b3JrLCBi eSB0cmFja2luZyBhbmQgd2FybmluZyBvbgo+PiB1bmV4cGVjdGVkIGNvbmRpdGlvbnMuIFRoZSB0 cmFja2luZyBpdHNlbGYgZm9sbG93cyB3aGljaCBQVEVzIHdpdGhpbiBhCj4+IHBhZ2UgdGFibGUg YXJlIGN1cnJlbnRseSBiZWluZyB1c2VkIGZvciBvYmplY3RzLiBUaGUgbmV4dCBwYXRjaCB3aWxs Cj4+IG1vZGlmeSB0aGlzIHRvIGFjdHVhbGx5IGFsbG9jYXRlIHRoZSBwYWdlIHRhYmxlcyBvbmx5 IHdoZW4gbmVjZXNzYXJ5Lgo+Pgo+PiBXaXRoIHRoZSBjdXJyZW50IHBhdGNoIHRoZXJlIGlzbid0 IG11Y2ggaW4gdGhlIHdheSBvZiBtYWtpbmcgYSBnZW4KPj4gYWdub3N0aWMgcmFuZ2UgYWxsb2Nh dGlvbiBmdW5jdGlvbi4gSG93ZXZlciwgaW4gdGhlIG5leHQgcGF0Y2ggd2UnbGwgYWRkCj4+IG1v cmUgc3BlY2lmaWNpdHkgd2hpY2ggbWFrZXMgaGF2aW5nIHNlcGFyYXRlIGZ1bmN0aW9ucyBhIGJp dCBlYXNpZXIgdG8KPj4gbWFuYWdlLgo+Pgo+PiBPbmUgaW1wb3J0YW50IGNoYW5nZSBpbnRyb2R1 Y2VkIGhlcmUgaXMgdGhhdCBETUEgbWFwcGluZ3MgYXJlCj4+IGNyZWF0ZWQvZGVzdHJveWVkIGF0 IHRoZSBzYW1lIHBhZ2UgZGlyZWN0b3JpZXMvdGFibGVzIGFyZQo+PiBhbGxvY2F0ZWQvZGVhbGxv Y2F0ZWQuCj4+Cj4+IE5vdGljZSB0aGF0IGFsaWFzaW5nIFBQR1RUIGlzIG5vdCBtYW5hZ2VkIGhl cmUuIFRoZSBwYXRjaCB3aGljaCBhY3R1YWxseQo+PiBiZWdpbnMgZHluYW1pYyBhbGxvY2F0aW9u L3RlYXJkb3duIGV4cGxhaW5zIHRoZSByZWFzb25pbmcgZm9yIHRoaXMuCj4+Cj4+IHYyOiBzL3Bk cC5wYWdlX2RpcmVjdG9yeS9wZHAucGFnZV9kaXJlY3RvcnlzCj4+IE1ha2UgYSBzY3JhdGNoIHBh Z2UgYWxsb2NhdGlvbiBoZWxwZXIKPj4KPj4gdjM6IFJlYmFzZSBhbmQgZXhwYW5kIGNvbW1pdCBt ZXNzYWdlLgo+Pgo+PiB2NDogQWxsb2NhdGUgcmVxdWlyZWQgcGFnZXRhYmxlcyBvbmx5IHdoZW4g aXQgaXMgbmVlZGVkLCBfYmluZF90b192bQo+PiBpbnN0ZWFkIG9mIGJpbmRfdm1hIChEYW5pZWwp Lgo+Pgo+PiB2NTogUmViYXNlZCB0byByZW1vdmUgdGhlIHVubmVjZXNzYXJ5IG5vaXNlIGluIHRo ZSBkaWZmLCBhbHNvOgo+PiAgLSBQREUgbWFzayBpcyBHRU4gYWdub3N0aWMsIHJlbmFtZWQgR0VO Nl9QREVfTUFTSyB0byBJOTE1X1BERV9NQVNLLgo+PiAgLSBSZW1vdmVkIHVubmVjZXNzYXJ5IGNo ZWNrcyBpbiBnZW42X2FsbG9jX3ZhX3JhbmdlLgo+PiAgLSBDaGFuZ2VkIG1hcC91bm1hcF9weF9z aW5nbGUgbWFjcm9zIHRvIHVzZSBkbWEgZnVuY3Rpb25zIGRpcmVjdGx5IGFuZAo+PiAgICBiZSBw YXJ0IG9mIGEgc3RhdGljIGlubGluZSBmdW5jdGlvbiBpbnN0ZWFkLgo+PiAgLSBNb3ZlZCBkcm1f ZGV2aWNlIHBsdW1iaW5nIHRocm91Z2ggcGFnZSB0YWJsZXMgb3BlcmF0aW9uIHRvIGl0cyBvd24K Pj4gICAgcGF0Y2guCj4+ICAtIE1vdmVkIGFsbG9jYXRlL3RlYXJkb3duX3ZhX3JhbmdlIGNhbGxz IHVudGlsIHRoZXkgYXJlIGZ1bGx5Cj4+ICAgIGltcGxlbWVudGVkIChpbiBzdWJzZXF1ZW50IHBh dGNoKS4KPj4gIC0gTWVyZ2VkIHB0IGFuZCBzY3JhdGNoX3B0IHVubWFwX2FuZF9mcmVlIHBhdGgu Cj4+ICAtIE1vdmVkIHNjcmF0Y2ggcGFnZSBhbGxvY2F0b3IgaGVscGVyIHRvIHRoZSBwYXRjaCB0 aGF0IHdpbGwgdXNlIGl0Lgo+Pgo+PiB2NjogUmVkdWNlIGNvbXBsZXhpdHkgYnkgbm90IHRlYXJp bmcgZG93biBwYWdldGFibGVzIGR5bmFtaWNhbGx5LCB0aGUKPj4gc2FtZSBjYW4gYmUgYWNoaWV2 ZWQgd2hpbGUgZnJlZWluZyBlbXB0eSB2bXMuIChEYW5pZWwpCj4+Cj4+IHY3OiBzL2k5MTVfZG1h X21hcF9weF9zaW5nbGUvaTkxNV9kbWFfbWFwX3NpbmdsZQo+PiBzL2dlbjZfd3JpdGVfcGRlcy9n ZW42X3dyaXRlX3BkZQo+PiBQcmV2ZW50IGEgTlVMTCBjYXNlIHdoZW4gb25seSBHR1RUIGlzIGF2 YWlsYWJsZS4gKE1pa2EpCj4+Cj4+IHY4OiBSZWJhc2VkIGFmdGVyIHMvcGFnZV90YWJsZXMvcGFn ZV90YWJsZS8uCj4+Cj4+IENjOiBEYW5pZWwgVmV0dGVyIDxkYW5pZWxAZmZ3bGwuY2g+Cj4+IENj OiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGxpbnV4LmludGVsLmNvbT4KPj4gU2lnbmVk LW9mZi1ieTogQmVuIFdpZGF3c2t5IDxiZW5AYndpZGF3c2submV0Pgo+PiBTaWduZWQtb2ZmLWJ5 OiBNaWNoZWwgVGhpZXJyeSA8bWljaGVsLnRoaWVycnlAaW50ZWwuY29tPiAodjMrKQo+PiAtLS0K Pj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5jIHwgMTk4ICsrKysrKysrKysr KysrKysrKysrKysrKystLS0tLS0tLS0tLQo+PiAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9n ZW1fZ3R0LmggfCAgNzUgKysrKysrKysrKysrKysKPj4gIDIgZmlsZXMgY2hhbmdlZCwgMjExIGlu c2VydGlvbnMoKyksIDYyIGRlbGV0aW9ucygtKQo+Pgo+PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9n cHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X2dl bV9ndHQuYwo+PiBpbmRleCBlMDU0ODhlLi5mOTM1NGM3IDEwMDY0NAo+PiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuYwo+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkx NS9pOTE1X2dlbV9ndHQuYwo+PiBAQCAtMjc4LDI5ICsyNzgsODggQEAgc3RhdGljIGdlbjZfZ3R0 X3B0ZV90IGlyaXNfcHRlX2VuY29kZShkbWFfYWRkcl90IGFkZHIsCj4+ICAJcmV0dXJuIHB0ZTsK Pj4gIH0KPj4gIAo+PiAtc3RhdGljIHZvaWQgdW5tYXBfYW5kX2ZyZWVfcHQoc3RydWN0IGk5MTVf cGFnZV90YWJsZV9lbnRyeSAqcHQsIHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4+ICsjZGVmaW5l IGk5MTVfZG1hX3VubWFwX3NpbmdsZShweCwgZGV2KSBcCj4+ICsJX19pOTE1X2RtYV91bm1hcF9z aW5nbGUoKHB4KS0+ZGFkZHIsIGRldikKPj4gKwo+PiArc3RhdGljIGlubGluZSB2b2lkIF9faTkx NV9kbWFfdW5tYXBfc2luZ2xlKGRtYV9hZGRyX3QgZGFkZHIsCj4+ICsJCQkJCXN0cnVjdCBkcm1f ZGV2aWNlICpkZXYpCj4+ICt7Cj4+ICsJc3RydWN0IGRldmljZSAqZGV2aWNlID0gJmRldi0+cGRl di0+ZGV2Owo+PiArCj4+ICsJZG1hX3VubWFwX3BhZ2UoZGV2aWNlLCBkYWRkciwgNDA5NiwgUENJ X0RNQV9CSURJUkVDVElPTkFMKTsKPj4gK30KPj4gKwo+PiArLyoqCj4+ICsgKiBpOTE1X2RtYV9t YXBfc2luZ2xlKCkgLSBDcmVhdGUgYSBkbWEgbWFwcGluZyBmb3IgYSBwYWdlIHRhYmxlL2Rpci9l dGMuCj4+ICsgKiBAcHg6CVBhZ2UgdGFibGUvZGlyL2V0YyB0byBnZXQgYSBETUEgbWFwIGZvcgo+ PiArICogQGRldjoJZHJtIGRldmljZQo+PiArICoKPj4gKyAqIFBhZ2UgdGFibGUgYWxsb2NhdGlv bnMgYXJlIHVuaWZpZWQgYWNyb3NzIGFsbCBnZW5zLiBUaGV5IGFsd2F5cyByZXF1aXJlIGEKPj4g KyAqIHNpbmdsZSA0ayBhbGxvY2F0aW9uLCBhcyB3ZWxsIGFzIGEgRE1BIG1hcHBpbmcuIElmIHdl IGtlZXAgdGhlIHN0cnVjdHMKPj4gKyAqIHN5bW1ldHJpYyBoZXJlLCB0aGUgc2ltcGxlIG1hY3Jv IGNvdmVycyB1cyBmb3IgZXZlcnkgcGFnZSB0YWJsZSB0eXBlLgo+PiArICoKPj4gKyAqIFJldHVy bjogMCBpZiBzdWNjZXNzLgo+PiArICovCj4+ICsjZGVmaW5lIGk5MTVfZG1hX21hcF9zaW5nbGUo cHgsIGRldikgXAo+PiArCWk5MTVfZG1hX21hcF9wYWdlX3NpbmdsZSgocHgpLT5wYWdlLCAoZGV2 KSwgJihweCktPmRhZGRyKQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIGludCBpOTE1X2RtYV9tYXBf cGFnZV9zaW5nbGUoc3RydWN0IHBhZ2UgKnBhZ2UsCj4+ICsJCQkJCSAgIHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYsCj4+ICsJCQkJCSAgIGRtYV9hZGRyX3QgKmRhZGRyKQo+PiArewo+PiArCXN0cnVj dCBkZXZpY2UgKmRldmljZSA9ICZkZXYtPnBkZXYtPmRldjsKPj4gKwo+PiArCSpkYWRkciA9IGRt YV9tYXBfcGFnZShkZXZpY2UsIHBhZ2UsIDAsIDQwOTYsIFBDSV9ETUFfQklESVJFQ1RJT05BTCk7 Cj4+ICsJcmV0dXJuIGRtYV9tYXBwaW5nX2Vycm9yKGRldmljZSwgKmRhZGRyKTsKPj4gK30KPj4g Kwo+PiArc3RhdGljIHZvaWQgdW5tYXBfYW5kX2ZyZWVfcHQoc3RydWN0IGk5MTVfcGFnZV90YWJs ZV9lbnRyeSAqcHQsCj4+ICsJCQkgICAgICAgc3RydWN0IGRybV9kZXZpY2UgKmRldikKPj4gIHsK Pj4gIAlpZiAoV0FSTl9PTighcHQtPnBhZ2UpKQo+PiAgCQlyZXR1cm47Cj4+ICsKPj4gKwlpOTE1 X2RtYV91bm1hcF9zaW5nbGUocHQsIGRldik7Cj4+ICAJX19mcmVlX3BhZ2UocHQtPnBhZ2UpOwo+ PiArCWtmcmVlKHB0LT51c2VkX3B0ZXMpOwo+PiAgCWtmcmVlKHB0KTsKPj4gIH0KPj4gIAo+PiAg c3RhdGljIHN0cnVjdCBpOTE1X3BhZ2VfdGFibGVfZW50cnkgKmFsbG9jX3B0X3NpbmdsZShzdHJ1 Y3QgZHJtX2RldmljZSAqZGV2KQo+PiAgewo+PiAgCXN0cnVjdCBpOTE1X3BhZ2VfdGFibGVfZW50 cnkgKnB0Owo+PiArCWNvbnN0IHNpemVfdCBjb3VudCA9IElOVEVMX0lORk8oZGV2KS0+Z2VuID49 IDggPwo+PiArCQlHRU44X1BURVNfUEVSX1BBR0UgOiBJOTE1X1BQR1RUX1BUX0VOVFJJRVM7Cj4+ ICsJaW50IHJldCA9IC1FTk9NRU07Cj4+ICAKPj4gIAlwdCA9IGt6YWxsb2Moc2l6ZW9mKCpwdCks IEdGUF9LRVJORUwpOwo+PiAgCWlmICghcHQpCj4+ICAJCXJldHVybiBFUlJfUFRSKC1FTk9NRU0p Owo+PiAgCj4+ICsJcHQtPnVzZWRfcHRlcyA9IGtjYWxsb2MoQklUU19UT19MT05HUyhjb3VudCks IHNpemVvZigqcHQtPnVzZWRfcHRlcyksCj4+ICsJCQkJR0ZQX0tFUk5FTCk7Cj4+ICsKPj4gKwlp ZiAoIXB0LT51c2VkX3B0ZXMpCj4+ICsJCWdvdG8gZmFpbF9iaXRtYXA7Cj4+ICsKPj4gIAlwdC0+ cGFnZSA9IGFsbG9jX3BhZ2UoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8pOwo+PiAtCWlmICghcHQt PnBhZ2UpIHsKPj4gLQkJa2ZyZWUocHQpOwo+PiAtCQlyZXR1cm4gRVJSX1BUUigtRU5PTUVNKTsK Pj4gLQl9Cj4+ICsJaWYgKCFwdC0+cGFnZSkKPj4gKwkJZ290byBmYWlsX3BhZ2U7Cj4+ICsKPj4g KwlyZXQgPSBpOTE1X2RtYV9tYXBfc2luZ2xlKHB0LCBkZXYpOwo+PiArCWlmIChyZXQpCj4+ICsJ CWdvdG8gZmFpbF9kbWE7Cj4+ICAKPj4gIAlyZXR1cm4gcHQ7Cj4+ICsKPj4gK2ZhaWxfZG1hOgo+ PiArCV9fZnJlZV9wYWdlKHB0LT5wYWdlKTsKPj4gK2ZhaWxfcGFnZToKPj4gKwlrZnJlZShwdC0+ dXNlZF9wdGVzKTsKPj4gK2ZhaWxfYml0bWFwOgo+PiArCWtmcmVlKHB0KTsKPj4gKwo+PiArCXJl dHVybiBFUlJfUFRSKHJldCk7Cj4+ICB9Cj4+ICAKPj4gIC8qKgo+PiBAQCAtODM4LDI2ICs4OTcs MzUgQEAgc3RhdGljIHZvaWQgZ2VuNl9kdW1wX3BwZ3R0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpw cGd0dCwgc3RydWN0IHNlcV9maWxlICptKQo+PiAgCX0KPj4gIH0KPj4gIAo+PiAtc3RhdGljIHZv aWQgZ2VuNl93cml0ZV9wZGVzKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPj4gKy8qIFdy aXRlIHBkZSAoaW5kZXgpIGZyb20gdGhlIHBhZ2UgZGlyZWN0b3J5IEBwZCB0byB0aGUgcGFnZSB0 YWJsZSBAcHQgKi8KPj4gK3N0YXRpYyB2b2lkIGdlbjZfd3JpdGVfcGRlKHN0cnVjdCBpOTE1X3Bh Z2VfZGlyZWN0b3J5X2VudHJ5ICpwZCwKPj4gKwkJCSAgICBjb25zdCBpbnQgcGRlLCBzdHJ1Y3Qg aTkxNV9wYWdlX3RhYmxlX2VudHJ5ICpwdCkKPj4gIHsKPj4gLQlzdHJ1Y3QgZHJtX2k5MTVfcHJp dmF0ZSAqZGV2X3ByaXYgPSBwcGd0dC0+YmFzZS5kZXYtPmRldl9wcml2YXRlOwo+PiAtCWdlbjZf Z3R0X3B0ZV90IF9faW9tZW0gKnBkX2FkZHI7Cj4+IC0JdWludDMyX3QgcGRfZW50cnk7Cj4+IC0J aW50IGk7Cj4+ICsJLyogQ2FsbGVyIG5lZWRzIHRvIG1ha2Ugc3VyZSB0aGUgd3JpdGUgY29tcGxl dGVzIGlmIG5lY2Vzc2FyeSAqLwo+PiArCXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCA9Cj4+ ICsJCWNvbnRhaW5lcl9vZihwZCwgc3RydWN0IGk5MTVfaHdfcHBndHQsIHBkKTsKPj4gKwl1MzIg cGRfZW50cnk7Cj4+ICAKPj4gLQlXQVJOX09OKHBwZ3R0LT5wZC5wZF9vZmZzZXQgJiAweDNmKTsK Pj4gLQlwZF9hZGRyID0gKGdlbjZfZ3R0X3B0ZV90IF9faW9tZW0qKWRldl9wcml2LT5ndHQuZ3Nt ICsKPj4gLQkJcHBndHQtPnBkLnBkX29mZnNldCAvIHNpemVvZihnZW42X2d0dF9wdGVfdCk7Cj4+ IC0JZm9yIChpID0gMDsgaSA8IHBwZ3R0LT5udW1fcGRfZW50cmllczsgaSsrKSB7Cj4+IC0JCWRt YV9hZGRyX3QgcHRfYWRkcjsKPj4gKwlwZF9lbnRyeSA9IEdFTjZfUERFX0FERFJfRU5DT0RFKHB0 LT5kYWRkcik7Cj4+ICsJcGRfZW50cnkgfD0gR0VONl9QREVfVkFMSUQ7Cj4+ICAKPj4gLQkJcHRf YWRkciA9IHBwZ3R0LT5wZC5wYWdlX3RhYmxlW2ldLT5kYWRkcjsKPj4gLQkJcGRfZW50cnkgPSBH RU42X1BERV9BRERSX0VOQ09ERShwdF9hZGRyKTsKPj4gLQkJcGRfZW50cnkgfD0gR0VONl9QREVf VkFMSUQ7Cj4+ICsJd3JpdGVsKHBkX2VudHJ5LCBwcGd0dC0+cGRfYWRkciArIHBkZSk7Cj4+ICt9 Cj4+ICAKPj4gLQkJd3JpdGVsKHBkX2VudHJ5LCBwZF9hZGRyICsgaSk7Cj4+IC0JfQo+PiAtCXJl YWRsKHBkX2FkZHIpOwo+PiArLyogV3JpdGUgYWxsIHRoZSBwYWdlIHRhYmxlcyBmb3VuZCBpbiB0 aGUgcHBndHQgc3RydWN0dXJlIHRvIGluY3JlbWVudGluZyBwYWdlCj4+ICsgKiBkaXJlY3Rvcmll cy4gKi8KPj4gK3N0YXRpYyB2b2lkIGdlbjZfd3JpdGVfcGFnZV9yYW5nZShzdHJ1Y3QgZHJtX2k5 MTVfcHJpdmF0ZSAqZGV2X3ByaXYsCj4+ICsJCQkJc3RydWN0IGk5MTVfcGFnZV9kaXJlY3Rvcnlf ZW50cnkgKnBkLCB1aW50MzJfdCBzdGFydCwgdWludDMyX3QgbGVuZ3RoKQo+PiArewo+PiArCXN0 cnVjdCBpOTE1X3BhZ2VfdGFibGVfZW50cnkgKnB0Owo+PiArCXVpbnQzMl90IHBkZSwgdGVtcDsK Pj4gKwo+PiArCWdlbjZfZm9yX2VhY2hfcGRlKHB0LCBwZCwgc3RhcnQsIGxlbmd0aCwgdGVtcCwg cGRlKQo+PiArCQlnZW42X3dyaXRlX3BkZShwZCwgcGRlLCBwdCk7Cj4+ICsKPj4gKwkvKiBNYWtl IHN1cmUgd3JpdGUgaXMgY29tcGxldGUgYmVmb3JlIG90aGVyIGNvZGUgY2FuIHVzZSB0aGlzIHBh Z2UKPj4gKwkgKiB0YWJsZS4gQWxzbyByZXF1aXJlIGZvciBXQyBtYXBwZWQgUFRFcyAqLwo+PiAr CXJlYWRsKGRldl9wcml2LT5ndHQuZ3NtKTsKPj4gIH0KPj4gIAo+PiAgc3RhdGljIHVpbnQzMl90 IGdldF9wZF9vZmZzZXQoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+PiBAQCAtMTA4Myw2 ICsxMTUxLDI4IEBAIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfdW5tYXBfcGFnZXMoc3RydWN0IGk5 MTVfaHdfcHBndHQgKnBwZ3R0KQo+PiAgCQkJICAgICAgIDQwOTYsIFBDSV9ETUFfQklESVJFQ1RJ T05BTCk7Cj4+ICB9Cj4+ICAKPj4gK3N0YXRpYyBpbnQgZ2VuNl9hbGxvY192YV9yYW5nZShzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPj4gKwkJCSAgICAgICB1aW50NjRfdCBzdGFydCwg dWludDY0X3QgbGVuZ3RoKQo+PiArewo+PiArCXN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCA9 Cj4+ICsJCQkJY29udGFpbmVyX29mKHZtLCBzdHJ1Y3QgaTkxNV9od19wcGd0dCwgYmFzZSk7Cj4+ ICsJc3RydWN0IGk5MTVfcGFnZV90YWJsZV9lbnRyeSAqcHQ7Cj4+ICsJdWludDMyX3QgcGRlLCB0 ZW1wOwo+PiArCj4+ICsJZ2VuNl9mb3JfZWFjaF9wZGUocHQsICZwcGd0dC0+cGQsIHN0YXJ0LCBs ZW5ndGgsIHRlbXAsIHBkZSkgewo+PiArCQlERUNMQVJFX0JJVE1BUCh0bXBfYml0bWFwLCBJOTE1 X1BQR1RUX1BUX0VOVFJJRVMpOwo+PiArCj4+ICsJCWJpdG1hcF96ZXJvKHRtcF9iaXRtYXAsIEk5 MTVfUFBHVFRfUFRfRU5UUklFUyk7Cj4+ICsJCWJpdG1hcF9zZXQodG1wX2JpdG1hcCwgZ2VuNl9w dGVfaW5kZXgoc3RhcnQpLAo+PiArCQkJICAgZ2VuNl9wdGVfY291bnQoc3RhcnQsIGxlbmd0aCkp Owo+PiArCj4+ICsJCWJpdG1hcF9vcihwdC0+dXNlZF9wdGVzLCBwdC0+dXNlZF9wdGVzLCB0bXBf Yml0bWFwLAo+PiArCQkJCUk5MTVfUFBHVFRfUFRfRU5UUklFUyk7Cj4+ICsJfQo+PiArCj4+ICsJ cmV0dXJuIDA7Cj4+ICt9Cj4+ICsKPj4gIHN0YXRpYyB2b2lkIGdlbjZfcHBndHRfZnJlZShzdHJ1 Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpCj4+ICB7Cj4+ICAJaW50IGk7Cj4+IEBAIC0xMTI5LDIw ICsxMjE5LDI0IEBAIGFsbG9jOgo+PiAgCQkJCQkgICAgICAgMCwgZGV2X3ByaXYtPmd0dC5iYXNl LnRvdGFsLAo+PiAgCQkJCQkgICAgICAgMCk7Cj4+ICAJCWlmIChyZXQpCj4+IC0JCQlyZXR1cm4g cmV0Owo+PiArCQkJZ290byBlcnJfb3V0Owo+PiAgCj4+ICAJCXJldHJpZWQgPSB0cnVlOwo+PiAg CQlnb3RvIGFsbG9jOwo+PiAgCX0KPj4gIAo+PiAgCWlmIChyZXQpCj4+IC0JCXJldHVybiByZXQ7 Cj4+ICsJCWdvdG8gZXJyX291dDsKPj4gKwo+PiAgCj4+ICAJaWYgKHBwZ3R0LT5ub2RlLnN0YXJ0 IDwgZGV2X3ByaXYtPmd0dC5tYXBwYWJsZV9lbmQpCj4+ICAJCURSTV9ERUJVRygiRm9yY2VkIHRv IHVzZSBhcGVydHVyZSBmb3IgUERFc1xuIik7Cj4+ICAKPj4gIAlwcGd0dC0+bnVtX3BkX2VudHJp ZXMgPSBHRU42X1BQR1RUX1BEX0VOVFJJRVM7Cj4+ICAJcmV0dXJuIDA7Cj4+ICsKPj4gK2Vycl9v dXQ6Cj4+ICsJcmV0dXJuIHJldDsKPj4gIH0KPj4gIAo+PiAgc3RhdGljIGludCBnZW42X3BwZ3R0 X2FsbG9jKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPj4gQEAgLTExNjQsMzAgKzEyNTgs NiBAQCBzdGF0aWMgaW50IGdlbjZfcHBndHRfYWxsb2Moc3RydWN0IGk5MTVfaHdfcHBndHQgKnBw Z3R0KQo+PiAgCXJldHVybiAwOwo+PiAgfQo+PiAgCj4+IC1zdGF0aWMgaW50IGdlbjZfcHBndHRf c2V0dXBfcGFnZV90YWJsZXMoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0KQo+PiAtewo+PiAt CXN0cnVjdCBkcm1fZGV2aWNlICpkZXYgPSBwcGd0dC0+YmFzZS5kZXY7Cj4+IC0JaW50IGk7Cj4+ IC0KPj4gLQlmb3IgKGkgPSAwOyBpIDwgcHBndHQtPm51bV9wZF9lbnRyaWVzOyBpKyspIHsKPj4g LQkJc3RydWN0IHBhZ2UgKnBhZ2U7Cj4+IC0JCWRtYV9hZGRyX3QgcHRfYWRkcjsKPj4gLQo+PiAt CQlwYWdlID0gcHBndHQtPnBkLnBhZ2VfdGFibGVbaV0tPnBhZ2U7Cj4+IC0JCXB0X2FkZHIgPSBw Y2lfbWFwX3BhZ2UoZGV2LT5wZGV2LCBwYWdlLCAwLCA0MDk2LAo+PiAtCQkJCSAgICAgICBQQ0lf RE1BX0JJRElSRUNUSU9OQUwpOwo+PiAtCj4+IC0JCWlmIChwY2lfZG1hX21hcHBpbmdfZXJyb3Io ZGV2LT5wZGV2LCBwdF9hZGRyKSkgewo+PiAtCQkJZ2VuNl9wcGd0dF91bm1hcF9wYWdlcyhwcGd0 dCk7Cj4+IC0JCQlyZXR1cm4gLUVJTzsKPj4gLQkJfQo+PiAtCj4+IC0JCXBwZ3R0LT5wZC5wYWdl X3RhYmxlW2ldLT5kYWRkciA9IHB0X2FkZHI7Cj4+IC0JfQo+PiAtCj4+IC0JcmV0dXJuIDA7Cj4+ IC19Cj4+IC0KPj4gIHN0YXRpYyBpbnQgZ2VuNl9wcGd0dF9pbml0KHN0cnVjdCBpOTE1X2h3X3Bw Z3R0ICpwcGd0dCkKPj4gIHsKPj4gIAlzdHJ1Y3QgZHJtX2RldmljZSAqZGV2ID0gcHBndHQtPmJh c2UuZGV2Owo+PiBAQCAtMTIxMSwxMiArMTI4MSw3IEBAIHN0YXRpYyBpbnQgZ2VuNl9wcGd0dF9p bml0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPj4gIAlpZiAocmV0KQo+PiAgCQlyZXR1 cm4gcmV0Owo+PiAgCj4+IC0JcmV0ID0gZ2VuNl9wcGd0dF9zZXR1cF9wYWdlX3RhYmxlcyhwcGd0 dCk7Cj4+IC0JaWYgKHJldCkgewo+PiAtCQlnZW42X3BwZ3R0X2ZyZWUocHBndHQpOwo+PiAtCQly ZXR1cm4gcmV0Owo+PiAtCX0KPj4gLQo+PiArCXBwZ3R0LT5iYXNlLmFsbG9jYXRlX3ZhX3Jhbmdl ID0gZ2VuNl9hbGxvY192YV9yYW5nZTsKPj4gIAlwcGd0dC0+YmFzZS5jbGVhcl9yYW5nZSA9IGdl bjZfcHBndHRfY2xlYXJfcmFuZ2U7Cj4+ICAJcHBndHQtPmJhc2UuaW5zZXJ0X2VudHJpZXMgPSBn ZW42X3BwZ3R0X2luc2VydF9lbnRyaWVzOwo+PiAgCXBwZ3R0LT5iYXNlLmNsZWFudXAgPSBnZW42 X3BwZ3R0X2NsZWFudXA7Cj4+IEBAIC0xMjI3LDEzICsxMjkyLDE3IEBAIHN0YXRpYyBpbnQgZ2Vu Nl9wcGd0dF9pbml0KHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCkKPj4gIAlwcGd0dC0+cGQu cGRfb2Zmc2V0ID0KPj4gIAkJcHBndHQtPm5vZGUuc3RhcnQgLyBQQUdFX1NJWkUgKiBzaXplb2Yo Z2VuNl9ndHRfcHRlX3QpOwo+PiAgCj4+ICsJcHBndHQtPnBkX2FkZHIgPSAoZ2VuNl9ndHRfcHRl X3QgX19pb21lbSAqKWRldl9wcml2LT5ndHQuZ3NtICsKPj4gKwkJcHBndHQtPnBkLnBkX29mZnNl dCAvIHNpemVvZihnZW42X2d0dF9wdGVfdCk7Cj4+ICsKPj4gIAlwcGd0dC0+YmFzZS5jbGVhcl9y YW5nZSgmcHBndHQtPmJhc2UsIDAsIHBwZ3R0LT5iYXNlLnRvdGFsLCB0cnVlKTsKPj4gIAo+PiAr CWdlbjZfd3JpdGVfcGFnZV9yYW5nZShkZXZfcHJpdiwgJnBwZ3R0LT5wZCwgMCwgcHBndHQtPmJh c2UudG90YWwpOwo+PiArCj4+ICAJRFJNX0RFQlVHX0RSSVZFUigiQWxsb2NhdGVkIHBkZSBzcGFj ZSAoJWxkTSkgYXQgR1RUIGVudHJ5OiAlbHhcbiIsCj4+ICAJCQkgcHBndHQtPm5vZGUuc2l6ZSA+ PiAyMCwKPj4gIAkJCSBwcGd0dC0+bm9kZS5zdGFydCAvIFBBR0VfU0laRSk7Cj4+ICAKPj4gLQln ZW42X3dyaXRlX3BkZXMocHBndHQpOwo+PiAgCURSTV9ERUJVRygiQWRkaW5nIFBQR1RUIGF0IG9m ZnNldCAleFxuIiwKPj4gIAkJICBwcGd0dC0+cGQucGRfb2Zmc2V0IDw8IDEwKTsKPj4gIAo+PiBA QCAtMTUwNCwxNSArMTU3MywyMCBAQCB2b2lkIGk5MTVfZ2VtX3Jlc3RvcmVfZ3R0X21hcHBpbmdz KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYpCj4+ICAJCXJldHVybjsKPj4gIAl9Cj4+ICAKPj4gLQls aXN0X2Zvcl9lYWNoX2VudHJ5KHZtLCAmZGV2X3ByaXYtPnZtX2xpc3QsIGdsb2JhbF9saW5rKSB7 Cj4+IC0JCS8qIFRPRE86IFBlcmhhcHMgaXQgc2hvdWxkbid0IGJlIGdlbjYgc3BlY2lmaWMgKi8K Pj4gLQkJaWYgKGk5MTVfaXNfZ2d0dCh2bSkpIHsKPj4gLQkJCWlmIChkZXZfcHJpdi0+bW0uYWxp YXNpbmdfcHBndHQpCj4+IC0JCQkJZ2VuNl93cml0ZV9wZGVzKGRldl9wcml2LT5tbS5hbGlhc2lu Z19wcGd0dCk7Cj4+IC0JCQljb250aW51ZTsKPj4gLQkJfQo+PiArCWlmIChVU0VTX1BQR1RUKGRl dikpIHsKPj4gKwkJbGlzdF9mb3JfZWFjaF9lbnRyeSh2bSwgJmRldl9wcml2LT52bV9saXN0LCBn bG9iYWxfbGluaykgewo+PiArCQkJLyogVE9ETzogUGVyaGFwcyBpdCBzaG91bGRuJ3QgYmUgZ2Vu NiBzcGVjaWZpYyAqLwo+PiArCj4+ICsJCQlzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQgPQo+ PiArCQkJCQljb250YWluZXJfb2Yodm0sIHN0cnVjdCBpOTE1X2h3X3BwZ3R0LAo+PiArCQkJCQkJ ICAgICBiYXNlKTsKPj4gIAo+PiAtCQlnZW42X3dyaXRlX3BkZXMoY29udGFpbmVyX29mKHZtLCBz dHJ1Y3QgaTkxNV9od19wcGd0dCwgYmFzZSkpOwo+PiArCQkJaWYgKGk5MTVfaXNfZ2d0dCh2bSkp Cj4+ICsJCQkJcHBndHQgPSBkZXZfcHJpdi0+bW0uYWxpYXNpbmdfcHBndHQ7Cj4+ICsKPj4gKwkJ CWdlbjZfd3JpdGVfcGFnZV9yYW5nZShkZXZfcHJpdiwgJnBwZ3R0LT5wZCwgMCwKPj4gKwkJCQkJ ICAgICAgcHBndHQtPm51bV9wZF9lbnRyaWVzKTsKPj4gKwkJfQo+PiAgCX0KPj4gIAo+PiAgCWk5 MTVfZ2d0dF9mbHVzaChkZXZfcHJpdik7Cj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9ndHQuaCBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVfZ2VtX2d0dC5o Cj4+IGluZGV4IGM5ZTkzZjUuLmJmMGUzODAgMTAwNjQ0Cj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9pOTE1L2k5MTVfZ2VtX2d0dC5oCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2k5MTVf Z2VtX2d0dC5oCj4+IEBAIC01NCw3ICs1NCwxMCBAQCB0eXBlZGVmIGdlbjhfZ3R0X3B0ZV90IGdl bjhfcHBndHRfcGRlX3Q7Cj4+ICAjZGVmaW5lIEdFTjZfUFBHVFRfUERfRU5UUklFUwkJNTEyCj4+ ICAjZGVmaW5lIEdFTjZfUERfU0laRQkJCShHRU42X1BQR1RUX1BEX0VOVFJJRVMgKiBQQUdFX1NJ WkUpCj4+ICAjZGVmaW5lIEdFTjZfUERfQUxJR04JCQkoUEFHRV9TSVpFICogMTYpCj4+ICsjZGVm aW5lIEdFTjZfUERFX1NISUZUCQkJMjIKPj4gICNkZWZpbmUgR0VONl9QREVfVkFMSUQJCQkoMSA8 PCAwKQo+PiArI2RlZmluZSBJOTE1X1BERV9NQVNLCQkJKEdFTjZfUFBHVFRfUERfRU5UUklFUy0x KQo+PiArI2RlZmluZSBOVU1fUFRFKHBkZV9zaGlmdCkJCSgxIDw8IChwZGVfc2hpZnQgLSBQQUdF X1NISUZUKSkKPj4gIAo+PiAgI2RlZmluZSBHRU43X1BURV9DQUNIRV9MM19MTEMJCSgzIDw8IDEp Cj4+ICAKPj4gQEAgLTE5MCw2ICsxOTMsOCBAQCBzdHJ1Y3QgaTkxNV92bWEgewo+PiAgc3RydWN0 IGk5MTVfcGFnZV90YWJsZV9lbnRyeSB7Cj4+ICAJc3RydWN0IHBhZ2UgKnBhZ2U7Cj4+ICAJZG1h X2FkZHJfdCBkYWRkcjsKPj4gKwo+PiArCXVuc2lnbmVkIGxvbmcgKnVzZWRfcHRlczsKPj4gIH07 Cj4+ICAKPj4gIHN0cnVjdCBpOTE1X3BhZ2VfZGlyZWN0b3J5X2VudHJ5IHsKPj4gQEAgLTI0Niw2 ICsyNTEsOSBAQCBzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlIHsKPj4gIAlnZW42X2d0dF9wdGVf dCAoKnB0ZV9lbmNvZGUpKGRtYV9hZGRyX3QgYWRkciwKPj4gIAkJCQkgICAgIGVudW0gaTkxNV9j YWNoZV9sZXZlbCBsZXZlbCwKPj4gIAkJCQkgICAgIGJvb2wgdmFsaWQsIHUzMiBmbGFncyk7IC8q IENyZWF0ZSBhIHZhbGlkIFBURSAqLwo+PiArCWludCAoKmFsbG9jYXRlX3ZhX3JhbmdlKShzdHJ1 Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bSwKPj4gKwkJCQkgdWludDY0X3Qgc3RhcnQsCj4+ICsJ CQkJIHVpbnQ2NF90IGxlbmd0aCk7Cj4+ICAJdm9pZCAoKmNsZWFyX3JhbmdlKShzdHJ1Y3QgaTkx NV9hZGRyZXNzX3NwYWNlICp2bSwKPj4gIAkJCSAgICB1aW50NjRfdCBzdGFydCwKPj4gIAkJCSAg ICB1aW50NjRfdCBsZW5ndGgsCj4+IEBAIC0yOTgsMTIgKzMwNiw3OSBAQCBzdHJ1Y3QgaTkxNV9o d19wcGd0dCB7Cj4+ICAKPj4gIAlzdHJ1Y3QgZHJtX2k5MTVfZmlsZV9wcml2YXRlICpmaWxlX3By aXY7Cj4+ICAKPj4gKwlnZW42X2d0dF9wdGVfdCBfX2lvbWVtICpwZF9hZGRyOwo+PiArCj4+ICAJ aW50ICgqZW5hYmxlKShzdHJ1Y3QgaTkxNV9od19wcGd0dCAqcHBndHQpOwo+PiAgCWludCAoKnN3 aXRjaF9tbSkoc3RydWN0IGk5MTVfaHdfcHBndHQgKnBwZ3R0LAo+PiAgCQkJIHN0cnVjdCBpbnRl bF9lbmdpbmVfY3MgKnJpbmcpOwo+PiAgCXZvaWQgKCpkZWJ1Z19kdW1wKShzdHJ1Y3QgaTkxNV9o d19wcGd0dCAqcHBndHQsIHN0cnVjdCBzZXFfZmlsZSAqbSk7Cj4+ICB9Owo+PiAgCj4+ICsvKiBG b3IgZWFjaCBwZGUgaXRlcmF0ZXMgb3ZlciBldmVyeSBwZGUgYmV0d2VlbiBmcm9tIHN0YXJ0IHVu dGlsIHN0YXJ0ICsgbGVuZ3RoLgo+PiArICogSWYgc3RhcnQsIGFuZCBzdGFydCtsZW5ndGggYXJl IG5vdCBwZXJmZWN0bHkgZGl2aXNpYmxlLCB0aGUgbWFjcm8gd2lsbCByb3VuZAo+PiArICogZG93 biwgYW5kIHVwIGFzIG5lZWRlZC4gVGhlIG1hY3JvIG1vZGlmaWVzIHBkZSwgc3RhcnQsIGFuZCBs ZW5ndGguIERldiBpcwo+PiArICogb25seSB1c2VkIHRvIGRpZmZlcmVudGlhdGUgc2hpZnQgdmFs dWVzLiBUZW1wIGlzIHRlbXAuICBPbiBnZW42LzcsIHN0YXJ0ID0gMCwKPj4gKyAqIGFuZCBsZW5n dGggPSAyRyBlZmZlY3RpdmVseSBpdGVyYXRlcyBvdmVyIGV2ZXJ5IFBERSBpbiB0aGUgc3lzdGVt LiBPbiBnZW44Kwo+PiArICogaXQgc2ltcGx5IGl0ZXJhdGVzIG92ZXIgZXZlcnkgcGFnZSBkaXJl Y3RvcnkgZW50cnkgaW4gYSBwYWdlIGRpcmVjdG9yeS4KPj4gKyAqCj4KPiBUaGVyZSBpcyBub3Ro aW5nIGZvciBnZW44IGluIHRoZSBtYWNybyB5ZXQsIHNvIGNvbW1lbnQgaXMgYSBiaXQgbWlzbGVh ZGluZy4KPgo+PiArICogWFhYOiB0ZW1wIGlzIG5vdCBhY3R1YWxseSBuZWVkZWQsIGJ1dCBpdCBz YXZlcyBkb2luZyB0aGUgQUxJR04gb3BlcmF0aW9uLgo+PiArICovCj4+ICsjZGVmaW5lIGdlbjZf Zm9yX2VhY2hfcGRlKHB0LCBwZCwgc3RhcnQsIGxlbmd0aCwgdGVtcCwgaXRlcikgXAo+PiArCWZv ciAoaXRlciA9IGdlbjZfcGRlX2luZGV4KHN0YXJ0KSwgcHQgPSAocGQpLT5wYWdlX3RhYmxlW2l0 ZXJdOyBcCj4+ICsJICAgICBsZW5ndGggPiAwICYmIGl0ZXIgPCBHRU42X1BQR1RUX1BEX0VOVFJJ RVM7IFwKPj4gKwkgICAgIHB0ID0gKHBkKS0+cGFnZV90YWJsZVsrK2l0ZXJdLCBcCj4+ICsJICAg ICB0ZW1wID0gQUxJR04oc3RhcnQrMSwgMSA8PCBHRU42X1BERV9TSElGVCkgLSBzdGFydCwgXAo+ PiArCSAgICAgdGVtcCA9IG1pbl90KHVuc2lnbmVkLCB0ZW1wLCBsZW5ndGgpLCBcCj4+ICsJICAg ICBzdGFydCArPSB0ZW1wLCBsZW5ndGggLT0gdGVtcCkKPj4gKwo+PiArc3RhdGljIGlubGluZSB1 aW50MzJfdCBpOTE1X3B0ZV9pbmRleCh1aW50NjRfdCBhZGRyZXNzLCB1aW50MzJfdCBwZGVfc2hp ZnQpCj4+ICt7Cj4+ICsJY29uc3QgdWludDMyX3QgbWFzayA9IE5VTV9QVEUocGRlX3NoaWZ0KSAt IDE7Cj4+ICsKPj4gKwlyZXR1cm4gKGFkZHJlc3MgPj4gUEFHRV9TSElGVCkgJiBtYXNrOwo+PiAr fQo+PiArCj4+ICsvKiBIZWxwZXIgdG8gY291bnRzIHRoZSBudW1iZXIgb2YgUFRFcyB3aXRoaW4g dGhlIGdpdmVuIGxlbmd0aC4gVGhpcyBjb3VudCBkb2VzCj4+ICsqIG5vdCBjcm9zcyBhIHBhZ2Ug dGFibGUgYm91bmRhcnksIHNvIHRoZSBtYXggdmFsdWUgd291bGQgYmUKPj4gKyogSTkxNV9QUEdU VF9QVF9FTlRSSUVTIGZvciBHRU42LCBhbmQgR0VOOF9QVEVTX1BFUl9QQUdFIGZvciBHRU44Lgo+ PiArKi8KPj4gK3N0YXRpYyBpbmxpbmUgc2l6ZV90IGk5MTVfcHRlX2NvdW50KHVpbnQ2NF90IGFk ZHIsIHNpemVfdCBsZW5ndGgsCj4+ICsJCQkJCXVpbnQzMl90IHBkZV9zaGlmdCkKPj4gK3sKPj4g Kwljb25zdCB1aW50NjRfdCBtYXNrID0gfigoMSA8PCBwZGVfc2hpZnQpIC0gMSk7Cj4+ICsJdWlu dDY0X3QgZW5kOwo+PiArCj4+ICsJQlVHX09OKGxlbmd0aCA9PSAwKTsKPj4gKwlCVUdfT04ob2Zm c2V0X2luX3BhZ2UoYWRkcnxsZW5ndGgpKTsKPj4gKwo+PiArCWVuZCA9IGFkZHIgKyBsZW5ndGg7 Cj4+ICsKPj4gKwlpZiAoKGFkZHIgJiBtYXNrKSAhPSAoZW5kICYgbWFzaykpCj4+ICsJCXJldHVy biBOVU1fUFRFKHBkZV9zaGlmdCkgLSBpOTE1X3B0ZV9pbmRleChhZGRyLCBwZGVfc2hpZnQpOwo+ PiArCj4+ICsJcmV0dXJuIGk5MTVfcHRlX2luZGV4KGVuZCwgcGRlX3NoaWZ0KSAtIGk5MTVfcHRl X2luZGV4KGFkZHIsIHBkZV9zaGlmdCk7Cj4+ICt9Cj4KPiBBZnRlciB0cnlpbmcgdG8gZmlndXJl IG91dCB0aGUgcmVhc29uaW5nIGZvciB0aGlzIGk5MTVfcHRlX2NvdW50Cj4gYW5kIGl0J3Mgcm9s ZSBpbiB0aGUgdXNlZCBiaXRtYXAgc2V0dXAsIEkgc3RhcnRlZCB0byB3b25kZXIgd2h5IGFsbAo+ IHRoZSBjb21wbGV4aXR5IGhlcmUuCj4KPiBCVUdfT04ob2Zmc2V0X2luX3BhZ2UoYWRkcnxsZW5n dGgpKSByZXZlYWxzIHRoYXQgd2UgY2FuJ3QgYmUgY2FsbGVkCj4gd2l0aCBhbnl0aGluZyBidXQg YSBwYWdlIGJvdW5kYXJ5IHNvIHRoZSBhZGRyZXNzIHBhcmFtZXRlciBpcwo+IGlycmVsZXZhbnQg aW4gaGVyZT8KPgo+IFRoZW4gdGhlcmUgaXMgdHJpY2tlcnkgd2l0aCB0aGUgcGRlX3NoaWZ0aW5n LiBJIHRyaWVkIHRvIGZpbmQgc29tZQo+IGdlbmVyYWxpemF0aW9uIGRvd24gdGhlIHNlcmllcyB0 byB0YWtlIGFkdmFudGFnZSBvZiB0aGlzLiBQZXJoYXBzCj4gSSBtaXNzZWQgaXQ/Cj4KPiBGb3Ig bWUgaXQgc2VlbXMgdGhhdCB3ZSBjYW4gcmVwbGFjZSB0aGlzIHdpdGggc2ltcGxlOgo+Cj4gc3Rh dGljIGlubGluZSB1aW50MzJfdCBpOTE1X3B0ZV9jb3VudCh1aW50NjRfdCBsZW5ndGgsIHVpbnQz Ml90Cj4gcHRlX2xlbikKPiB7Cj4gICAgICAgIHJldHVybiBtaW5fdCh1aW50MzJfdCwgbGVuZ3Ro IC8gUEFHRV9TSVpFLCBQQUdFX1NJWkUgLyBwdGVfbGVuKTsKPiB9Cj4KPiAuLi5hbmQgbm90IGxv c2UgYW55dGhpbmcuCgpPaCB3ZSBsb3NlIGFsb3QuIFRoZSBzaW1wbGlmaWVkIHZlcnNpb24gbWln aHQgd29yayBpbiB0aGUgY29udGV4dCBvZgp0aGlzIHBhdGNoIGJ1dCB0aGUgbWFjcm8gd2lsbCBi ZSBicm9rZW4uIE1pY2hlbCBleHBsYWluZWQgaXQgYWxsIHRvCm1lIGluIGlyYy4KCkkgYXBvbG9n aXplIGZvciB0aGlzLiBQbGVhc2UgaWdub3JlIGFuZCBrZWVwIHRoZSBvcmlnaW5hbCBpOTE1X3B0 ZV9jb3VudC4KCi1NaWthCgo+IE9uIHRvcCBvZiB0aGF0IHdoZW4gdHJ5aW5nIHRvIHdyYXAgbXkg YnJhaW4gYXJvdW5kIHRoZSBkaWZmZXJlbmNlcwo+IGJldHdlZW4gR0VONi83IGFuZCBHRU44KyB0 aGUgZm9sbG93aW5nIHBhdGNoIGJlZm9yZSB0aGlzIHBhdGNoIHdvdWxkCj4gbWFrZSB0aGluZ3Mg bXVjaCBlYXNpZXIgdG8gdW5kZXJzdGFuZCwgYXRsZWFzdCBmb3IgbWU6Cj4KPiBkaWZmIC0tZ2l0 IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmggYi9kcml2ZXJzL2dwdS9kcm0v aTkxNS9pOTE1X2dlbV9ndHQuaAo+IGluZGV4IGM5ZTkzZjUuLmMxM2YzMmYgMTAwNjQ0Cj4gLS0t IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9nZW1fZ3R0LmgKPiArKysgYi9kcml2ZXJzL2dw dS9kcm0vaTkxNS9pOTE1X2dlbV9ndHQuaAo+IEBAIC0zNiwxMyArMzYsMTMgQEAKPiAgCj4gIHN0 cnVjdCBkcm1faTkxNV9maWxlX3ByaXZhdGU7Cj4gIAo+IC10eXBlZGVmIHVpbnQzMl90IGdlbjZf Z3R0X3B0ZV90Owo+IC10eXBlZGVmIHVpbnQ2NF90IGdlbjhfZ3R0X3B0ZV90Owo+IC10eXBlZGVm IGdlbjhfZ3R0X3B0ZV90IGdlbjhfcHBndHRfcGRlX3Q7Cj4gK3R5cGVkZWYgdWludDMyX3QgZ2Vu Nl9wdGVfdDsKPiArdHlwZWRlZiB1aW50NjRfdCBnZW44X3B0ZV90Owo+ICt0eXBlZGVmIHVpbnQ2 NF90IGdlbjhfcGRlX3Q7Cj4gIAo+ICAjZGVmaW5lIGd0dF90b3RhbF9lbnRyaWVzKGd0dCkgKChn dHQpLmJhc2UudG90YWwgPj4gUEFHRV9TSElGVCkKPiAgCj4gLSNkZWZpbmUgSTkxNV9QUEdUVF9Q VF9FTlRSSUVTCQkoUEFHRV9TSVpFIC8gc2l6ZW9mKGdlbjZfZ3R0X3B0ZV90KSkKPiArCj4gIC8q IGdlbjYtaHN3IGhhcyBiaXQgMTEtNCBmb3IgcGh5c2ljYWwgYWRkciBiaXQgMzktMzIgKi8KPiAg I2RlZmluZSBHRU42X0dUVF9BRERSX0VOQ09ERShhZGRyKQkoKGFkZHIpIHwgKCgoYWRkcikgPj4g MjgpICYgMHhmZjApKQo+ICAjZGVmaW5lIEdFTjZfUFRFX0FERFJfRU5DT0RFKGFkZHIpCUdFTjZf R1RUX0FERFJfRU5DT0RFKGFkZHIpCj4gQEAgLTUxLDggKzUxLDEzIEBAIHR5cGVkZWYgZ2VuOF9n dHRfcHRlX3QgZ2VuOF9wcGd0dF9wZGVfdDsKPiAgI2RlZmluZSBHRU42X1BURV9VTkNBQ0hFRAkJ KDEgPDwgMSkKPiAgI2RlZmluZSBHRU42X1BURV9WQUxJRAkJCSgxIDw8IDApCj4gIAo+IC0jZGVm aW5lIEdFTjZfUFBHVFRfUERfRU5UUklFUwkJNTEyCj4gLSNkZWZpbmUgR0VONl9QRF9TSVpFCQkJ KEdFTjZfUFBHVFRfUERfRU5UUklFUyAqIFBBR0VfU0laRSkKPiArI2RlZmluZSBJOTE1X1BURVMo cHRlX2xlbikJCShQQUdFX1NJWkUgLyAocHRlX2xlbikpCj4gKyNkZWZpbmUgSTkxNV9QVEVfTUFT SyhwdGVfbGVuKQkJKEk5MTVfUFRFUyhwdGVfbGVuKSAtIDEpCj4gKyNkZWZpbmUgSTkxNV9QREVT CQkJNTEyCj4gKyNkZWZpbmUgSTkxNV9QREVfTUFTSwkJCShJOTE1X1BERVMgLSAxKQo+ICsKPiAr I2RlZmluZSBHRU42X1BURVMJCQlJOTE1X1BURVMoc2l6ZW9mKGdlbjZfcHRlX3QpKQo+ICsjZGVm aW5lIEdFTjZfUERfU0laRQkJICAgICAgICAoSTkxNV9QREVTICogUEFHRV9TSVpFKQo+ICAjZGVm aW5lIEdFTjZfUERfQUxJR04JCQkoUEFHRV9TSVpFICogMTYpCj4gICNkZWZpbmUgR0VONl9QREVf VkFMSUQJCQkoMSA8PCAwKQo+ICAKPiBAQCAtODksOCArOTQsNyBAQCB0eXBlZGVmIGdlbjhfZ3R0 X3B0ZV90IGdlbjhfcHBndHRfcGRlX3Q7Cj4gICNkZWZpbmUgR0VOOF9QVEVfU0hJRlQJCQkxMgo+ ICAjZGVmaW5lIEdFTjhfUFRFX01BU0sJCQkweDFmZgo+ICAjZGVmaW5lIEdFTjhfTEVHQUNZX1BE UEVTCQk0Cj4gLSNkZWZpbmUgR0VOOF9QVEVTX1BFUl9QQUdFCQkoUEFHRV9TSVpFIC8gc2l6ZW9m KGdlbjhfZ3R0X3B0ZV90KSkKPiAtI2RlZmluZSBHRU44X1BERVNfUEVSX1BBR0UJCShQQUdFX1NJ WkUgLyBzaXplb2YoZ2VuOF9wcGd0dF9wZGVfdCkpCj4gKyNkZWZpbmUgR0VOOF9QVEVTCQkJSTkx NV9QVEVTKHNpemVvZihnZW44X3B0ZV90KSkKPiAgCj4gICNkZWZpbmUgUFBBVF9VTkNBQ0hFRF9J TkRFWAkJKF9QQUdFX1BXVCB8IF9QQUdFX1BDRCkKPiAgI2RlZmluZSBQUEFUX0NBQ0hFRF9QREVf SU5ERVgJCTAgLyogV0IgTExDICovCj4gQEAgLTE5OSw3ICsyMDMsNyBAQCBzdHJ1Y3QgaTkxNV9w YWdlX2RpcmVjdG9yeV9lbnRyeSB7Cj4gIAkJZG1hX2FkZHJfdCBkYWRkcjsKPiAgCX07Cj4gIAo+ IC0Jc3RydWN0IGk5MTVfcGFnZV90YWJsZV9lbnRyeSAqcGFnZV90YWJsZVtHRU42X1BQR1RUX1BE X0VOVFJJRVNdOyAvKiBQREVzICovCj4gKwlzdHJ1Y3QgaTkxNV9wYWdlX3RhYmxlX2VudHJ5ICpw YWdlX3RhYmxlW0k5MTVfUERFU107IC8qIFBERXMgKi8KPiAgfTsKPiAgCj4gIHN0cnVjdCBpOTE1 X3BhZ2VfZGlyZWN0b3J5X3BvaW50ZXJfZW50cnkgewo+IEBAIC0yNDMsOSArMjQ3LDkgQEAgc3Ry dWN0IGk5MTVfYWRkcmVzc19zcGFjZSB7Cj4gIAlzdHJ1Y3QgbGlzdF9oZWFkIGluYWN0aXZlX2xp c3Q7Cj4gIAo+ICAJLyogRklYTUU6IE5lZWQgYSBtb3JlIGdlbmVyaWMgcmV0dXJuIHR5cGUgKi8K PiAtCWdlbjZfZ3R0X3B0ZV90ICgqcHRlX2VuY29kZSkoZG1hX2FkZHJfdCBhZGRyLAo+IC0JCQkJ ICAgICBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwgbGV2ZWwsCj4gLQkJCQkgICAgIGJvb2wgdmFsaWQs IHUzMiBmbGFncyk7IC8qIENyZWF0ZSBhIHZhbGlkIFBURSAqLwo+ICsJZ2VuNl9wdGVfdCAoKnB0 ZV9lbmNvZGUpKGRtYV9hZGRyX3QgYWRkciwKPiArCQkJCSBlbnVtIGk5MTVfY2FjaGVfbGV2ZWwg bGV2ZWwsCj4gKwkJCQkgYm9vbCB2YWxpZCwgdTMyIGZsYWdzKTsgLyogQ3JlYXRlIGEgdmFsaWQg UFRFICovCj4gIAl2b2lkICgqY2xlYXJfcmFuZ2UpKHN0cnVjdCBpOTE1X2FkZHJlc3Nfc3BhY2Ug KnZtLAo+ICAJCQkgICAgdWludDY0X3Qgc3RhcnQsCj4gIAkJCSAgICB1aW50NjRfdCBsZW5ndGgs Cj4gQEAgLTMwNCw2ICszMDgsMjEgQEAgc3RydWN0IGk5MTVfaHdfcHBndHQgewo+ICAJdm9pZCAo KmRlYnVnX2R1bXApKHN0cnVjdCBpOTE1X2h3X3BwZ3R0ICpwcGd0dCwgc3RydWN0IHNlcV9maWxl ICptKTsKPiAgfTsKPiAgCj4gK3N0YXRpYyBpbmxpbmUgdWludDMyX3QgaTkxNV9wdGVfaW5kZXgo dWludDY0X3QgYWRkcmVzcywgdWludDMyX3QgcHRlX2xlbikKPiArewo+ICsJcmV0dXJuIChhZGRy ZXNzID4+IFBBR0VfU0hJRlQpICYgSTkxNV9QVEVfTUFTSyhwdGVfbGVuKTsKPiArfQo+ICsKPiAr c3RhdGljIGlubGluZSB1aW50MzJfdCBpOTE1X3B0ZV9jb3VudCh1aW50NjRfdCBsZW5ndGgsIHVp bnQzMl90IHB0ZV9sZW4pCj4gK3sKPiArCXJldHVybiBtaW5fdCh1aW50MzJfdCwgbGVuZ3RoIC8g UEFHRV9TSVpFLCBJOTE1X1BURVMocHRlX2xlbikpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW5saW5l IHVpbnQzMl90IGk5MTVfcGRlX2luZGV4KHVpbnQ2NF90IGFkZHIsIHVpbnQzMl90IHBkZV9zaGlm dCkKPiArewo+ICsJcmV0dXJuIChhZGRyID4+IHBkZV9zaGlmdCkgJiBJOTE1X1BERV9NQVNLOwo+ ICt9Cj4gKwo+ICBpbnQgaTkxNV9nZW1fZ3R0X2luaXQoc3RydWN0IGRybV9kZXZpY2UgKmRldik7 Cj4gIHZvaWQgaTkxNV9nZW1faW5pdF9nbG9iYWxfZ3R0KHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Owo+ICB2b2lkIGk5MTVfZ2xvYmFsX2d0dF9jbGVhbnVwKHN0cnVjdCBkcm1fZGV2aWNlICpkZXYp Owo+Cj4gV2l0aCB0aGF0LCBJIHRoaW5rIHlvdSBjb3VsZCB3cml0ZSBnZW5lcmljIGdlbl9mb3Jf ZWFjaF9wZGUKPiBtb3JlIGVhc2lseSBhbmQganVzdCBwYXJhbWV0cml6ZSB0aGUgZ2VuNiB2YXJp YW50IGFuZCBnZW44IG9uZQo+IGZ1cnRoZXIgaW4gdGhlIHNlcmllcy4KPgo+IC0tTWlrYQo+Cj4+ ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90IGk5MTVfcGRlX2luZGV4KHVpbnQ2NF90IGFkZHIsIHVp bnQzMl90IHNoaWZ0KQo+PiArewo+PiArCXJldHVybiAoYWRkciA+PiBzaGlmdCkgJiBJOTE1X1BE RV9NQVNLOwo+PiArfQo+PiArCj4+ICtzdGF0aWMgaW5saW5lIHVpbnQzMl90IGdlbjZfcHRlX2lu ZGV4KHVpbnQzMl90IGFkZHIpCj4+ICt7Cj4+ICsJcmV0dXJuIGk5MTVfcHRlX2luZGV4KGFkZHIs IEdFTjZfUERFX1NISUZUKTsKPj4gK30KPj4gKwo+PiArc3RhdGljIGlubGluZSBzaXplX3QgZ2Vu Nl9wdGVfY291bnQodWludDMyX3QgYWRkciwgdWludDMyX3QgbGVuZ3RoKQo+PiArewo+PiArCXJl dHVybiBpOTE1X3B0ZV9jb3VudChhZGRyLCBsZW5ndGgsIEdFTjZfUERFX1NISUZUKTsKPj4gK30K Pj4gKwo+PiArc3RhdGljIGlubGluZSB1aW50MzJfdCBnZW42X3BkZV9pbmRleCh1aW50MzJfdCBh ZGRyKQo+PiArewo+PiArCXJldHVybiBpOTE1X3BkZV9pbmRleChhZGRyLCBHRU42X1BERV9TSElG VCk7Cj4+ICt9Cj4+ICsKPj4gIGludCBpOTE1X2dlbV9ndHRfaW5pdChzdHJ1Y3QgZHJtX2Rldmlj ZSAqZGV2KTsKPj4gIHZvaWQgaTkxNV9nZW1faW5pdF9nbG9iYWxfZ3R0KHN0cnVjdCBkcm1fZGV2 aWNlICpkZXYpOwo+PiAgdm9pZCBpOTE1X2dsb2JhbF9ndHRfY2xlYW51cChzdHJ1Y3QgZHJtX2Rl dmljZSAqZGV2KTsKPj4gLS0gCj4+IDIuMS4xCj4+Cj4+IF9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCj4+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QKPj4gSW50 ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+PiBodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Au b3JnL21haWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cj4gX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KPiBJbnRlbC1nZnggbWFpbGluZyBsaXN0Cj4gSW50ZWwt Z2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwo+IGh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcv bWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9pbnRlbC1nZngK