From mboxrd@z Thu Jan 1 00:00:00 1970 From: Samuel Pitoiset Subject: Re: [PATCH 6/8] drm/amdgpu: meld together VM fragment and huge page handling Date: Thu, 8 Nov 2018 17:17:31 +0100 Message-ID: References: <20180912085445.3245-1-christian.koenig@amd.com> <20180912085445.3245-6-christian.koenig@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20180912085445.3245-6-christian.koenig-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US List-Id: Discussion list for AMD gfx List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: amd-gfx-bounces-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org Sender: "amd-gfx" To: =?UTF-8?Q?Christian_K=c3=b6nig?= , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org SGksCgpUaGlzIGNoYW5nZSBpbnRyb2R1Y2VzIEdQVSBoYW5ncyB3aXRoIEYxIDIwMTcgYW5kIFJp c2Ugb2YgVG9tYiBSYWlkZXIgb24gClJBRFYvR0ZYOS4gSSBiaXNlY3RlZCB0aGUgaXNzdWUuCgpD YW4geW91IGhhdmUgYSBsb29rPwoKVGhhbmtzIQoKT24gOS8xMi8xOCAxMDo1NCBBTSwgQ2hyaXN0 aWFuIEvDtm5pZyB3cm90ZToKPiBUaGlzIG9wdGltaXplcyB0aGUgZ2VuZXJhdGluZyBvZiBQVEVz IGJ5IHdhbGtpbmcgdGhlIGhpZXJhcmNoeSBvbmx5IG9uY2UKPiBmb3IgYSByYW5nZSBhbmQgbWFr aW5nIGNoYW5nZXMgYXMgbmVjZXNzYXJ5Lgo+IAo+IEl0IGFsbG93cyBmb3IgYm90aCBodWdlICgy TUIpIGFzIHdlbGwgZ2lhbnQgKDFHQikgcGFnZXMgdG8gYmUgdXNlZCBvbgo+IFZlZ2EgYW5kIFJh dmVuLgo+IAo+IFNpZ25lZC1vZmYtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2Vu aWdAYW1kLmNvbT4KPiBSZXZpZXdlZC1ieTogRmVsaXggS3VlaGxpbmcgPEZlbGl4Lkt1ZWhsaW5n QGFtZC5jb20+Cj4gQWNrZWQtYnk6IEp1bndlaSBaaGFuZyA8SmVycnkuWmhhbmdAYW1kLmNvbT4K PiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jIHwgMjY3ICsr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLQo+ICAgMSBmaWxlIGNoYW5nZWQsIDE0NyBp bnNlcnRpb25zKCspLCAxMjAgZGVsZXRpb25zKC0pCj4gCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvYW1kZ3B1X3ZtLmMKPiBpbmRleCA3NDdiNmZmNmZlYTcuLjMyODMyNTMyNGExZCAxMDA2NDQK PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfdm0uYwo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV92bS5jCj4gQEAgLTE0ODgsNDYgKzE0ODgs NzYgQEAgaW50IGFtZGdwdV92bV91cGRhdGVfZGlyZWN0b3JpZXMoc3RydWN0IGFtZGdwdV9kZXZp Y2UgKmFkZXYsCj4gICB9Cj4gICAKPiAgIC8qKgo+IC0gKiBhbWRncHVfdm1faGFuZGxlX2h1Z2Vf cGFnZXMgLSBoYW5kbGUgdXBkYXRpbmcgdGhlIFBEIHdpdGggaHVnZSBwYWdlcwo+ICsgKiBhbWRn cHVfdm1fdXBkYXRlX2h1Z2UgLSBmaWd1cmUgb3V0IHBhcmFtZXRlcnMgZm9yIFBURSB1cGRhdGVz Cj4gICAgKgo+IC0gKiBAcDogc2VlIGFtZGdwdV9wdGVfdXBkYXRlX3BhcmFtcyBkZWZpbml0aW9u Cj4gLSAqIEBlbnRyeTogdm1fcHQgZW50cnkgdG8gY2hlY2sKPiAtICogQHBhcmVudDogcGFyZW50 IGVudHJ5Cj4gLSAqIEBucHRlczogbnVtYmVyIG9mIFBURXMgdXBkYXRlZCB3aXRoIHRoaXMgb3Bl cmF0aW9uCj4gLSAqIEBkc3Q6IGRlc3RpbmF0aW9uIGFkZHJlc3Mgd2hlcmUgdGhlIFBURXMgc2hv dWxkIHBvaW50IHRvCj4gLSAqIEBmbGFnczogYWNjZXNzIGZsYWdzIGZybyB0aGUgUFRFcwo+IC0g Kgo+IC0gKiBDaGVjayBpZiB3ZSBjYW4gdXBkYXRlIHRoZSBQRCB3aXRoIGEgaHVnZSBwYWdlLgo+ ICsgKiBNYWtlIHN1cmUgdG8gc2V0IHRoZSByaWdodCBmbGFncyBmb3IgdGhlIFBURXMgYXQgdGhl IGRlc2lyZWQgbGV2ZWwuCj4gICAgKi8KPiAtc3RhdGljIHZvaWQgYW1kZ3B1X3ZtX2hhbmRsZV9o dWdlX3BhZ2VzKHN0cnVjdCBhbWRncHVfcHRlX3VwZGF0ZV9wYXJhbXMgKnAsCj4gLQkJCQkJc3Ry dWN0IGFtZGdwdV92bV9wdCAqZW50cnksCj4gLQkJCQkJc3RydWN0IGFtZGdwdV92bV9wdCAqcGFy ZW50LAo+IC0JCQkJCXVuc2lnbmVkIG5wdGVzLCB1aW50NjRfdCBkc3QsCj4gLQkJCQkJdWludDY0 X3QgZmxhZ3MpCj4gLXsKPiAtCXVpbnQ2NF90IHBkZTsKPiArc3RhdGljIHZvaWQgYW1kZ3B1X3Zt X3VwZGF0ZV9odWdlKHN0cnVjdCBhbWRncHVfcHRlX3VwZGF0ZV9wYXJhbXMgKnBhcmFtcywKPiAr CQkJCSAgc3RydWN0IGFtZGdwdV9ibyAqYm8sIHVuc2lnbmVkIGxldmVsLAo+ICsJCQkJICB1aW50 NjRfdCBwZSwgdWludDY0X3QgYWRkciwKPiArCQkJCSAgdW5zaWduZWQgY291bnQsIHVpbnQzMl90 IGluY3IsCj4gKwkJCQkgIHVpbnQ2NF90IGZsYWdzKQo+ICAgCj4gLQkvKiBJbiB0aGUgY2FzZSBv ZiBhIG1peGVkIFBUIHRoZSBQREUgbXVzdCBwb2ludCB0byBpdCovCj4gLQlpZiAocC0+YWRldi0+ YXNpY190eXBlID49IENISVBfVkVHQTEwICYmICFwLT5zcmMgJiYKPiAtCSAgICBucHRlcyA9PSBB TURHUFVfVk1fUFRFX0NPVU5UKHAtPmFkZXYpKSB7Cj4gLQkJLyogU2V0IHRoZSBodWdlIHBhZ2Ug ZmxhZyB0byBzdG9wIHNjYW5uaW5nIGF0IHRoaXMgUERFICovCj4gK3sKPiArCWlmIChsZXZlbCAh PSBBTURHUFVfVk1fUFRCKSB7Cj4gICAJCWZsYWdzIHw9IEFNREdQVV9QREVfUFRFOwo+ICsJCWFt ZGdwdV9nbWNfZ2V0X3ZtX3BkZShwYXJhbXMtPmFkZXYsIGxldmVsLCAmYWRkciwgJmZsYWdzKTsK PiAgIAl9Cj4gICAKPiAtCWlmICghKGZsYWdzICYgQU1ER1BVX1BERV9QVEUpKSB7Cj4gLQkJaWYg KGVudHJ5LT5odWdlKSB7Cj4gLQkJCS8qIEFkZCB0aGUgZW50cnkgdG8gdGhlIHJlbG9jYXRlZCBs aXN0IHRvIHVwZGF0ZSBpdC4gKi8KPiAtCQkJZW50cnktPmh1Z2UgPSBmYWxzZTsKPiAtCQkJYW1k Z3B1X3ZtX2JvX3JlbG9jYXRlZCgmZW50cnktPmJhc2UpOwo+IC0JCX0KPiArCWFtZGdwdV92bV91 cGRhdGVfZnVuYyhwYXJhbXMsIGJvLCBwZSwgYWRkciwgY291bnQsIGluY3IsIGZsYWdzKTsKPiAr fQo+ICsKPiArLyoqCj4gKyAqIGFtZGdwdV92bV9mcmFnbWVudCAtIGdldCBmcmFnbWVudCBmb3Ig UFRFcwo+ICsgKgo+ICsgKiBAcGFyYW1zOiBzZWUgYW1kZ3B1X3B0ZV91cGRhdGVfcGFyYW1zIGRl ZmluaXRpb24KPiArICogQHN0YXJ0OiBmaXJzdCBQVEUgdG8gaGFuZGxlCj4gKyAqIEBlbmQ6IGxh c3QgUFRFIHRvIGhhbmRsZQo+ICsgKiBAZmxhZ3M6IGh3IG1hcHBpbmcgZmxhZ3MKPiArICogQGZy YWc6IHJlc3VsdGluZyBmcmFnbWVudCBzaXplCj4gKyAqIEBmcmFnX2VuZDogZW5kIG9mIHRoaXMg ZnJhZ21lbnQKPiArICoKPiArICogUmV0dXJucyB0aGUgZmlyc3QgcG9zc2libGUgZnJhZ21lbnQg Zm9yIHRoZSBzdGFydCBhbmQgZW5kIGFkZHJlc3MuCj4gKyAqLwo+ICtzdGF0aWMgdm9pZCBhbWRn cHVfdm1fZnJhZ21lbnQoc3RydWN0IGFtZGdwdV9wdGVfdXBkYXRlX3BhcmFtcyAqcGFyYW1zLAo+ ICsJCQkgICAgICAgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVuZCwgdWludDY0X3QgZmxhZ3Ms Cj4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgKmZyYWcsIHVpbnQ2NF90ICpmcmFnX2VuZCkKPiAr ewo+ICsJLyoqCj4gKwkgKiBUaGUgTUMgTDEgVExCIHN1cHBvcnRzIHZhcmlhYmxlIHNpemVkIHBh Z2VzLCBiYXNlZCBvbiBhIGZyYWdtZW50Cj4gKwkgKiBmaWVsZCBpbiB0aGUgUFRFLiBXaGVuIHRo aXMgZmllbGQgaXMgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUsIHBhZ2UKPiArCSAqIGdyYW51bGFy aXR5IGlzIGluY3JlYXNlZCBmcm9tIDRLQiB0byAoMSA8PCAoMTIgKyBmcmFnKSkuIFRoZSBQVEUK PiArCSAqIGZsYWdzIGFyZSBjb25zaWRlcmVkIHZhbGlkIGZvciBhbGwgUFRFcyB3aXRoaW4gdGhl IGZyYWdtZW50IHJhbmdlCj4gKwkgKiBhbmQgY29ycmVzcG9uZGluZyBtYXBwaW5ncyBhcmUgYXNz dW1lZCB0byBiZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMuCj4gKwkgKgo+ICsJICogVGhlIEwxIFRM QiBjYW4gc3RvcmUgYSBzaW5nbGUgUFRFIGZvciB0aGUgd2hvbGUgZnJhZ21lbnQsCj4gKwkgKiBz aWduaWZpY2FudGx5IGluY3JlYXNpbmcgdGhlIHNwYWNlIGF2YWlsYWJsZSBmb3IgdHJhbnNsYXRp b24KPiArCSAqIGNhY2hpbmcuIFRoaXMgbGVhZHMgdG8gbGFyZ2UgaW1wcm92ZW1lbnRzIGluIHRo cm91Z2hwdXQgd2hlbiB0aGUKPiArCSAqIFRMQiBpcyB1bmRlciBwcmVzc3VyZS4KPiArCSAqCj4g KwkgKiBUaGUgTDIgVExCIGRpc3RyaWJ1dGVzIHNtYWxsIGFuZCBsYXJnZSBmcmFnbWVudHMgaW50 byB0d28KPiArCSAqIGFzeW1tZXRyaWMgcGFydGl0aW9ucy4gVGhlIGxhcmdlIGZyYWdtZW50IGNh Y2hlIGlzIHNpZ25pZmljYW50bHkKPiArCSAqIGxhcmdlci4gVGh1cywgd2UgdHJ5IHRvIHVzZSBs YXJnZSBmcmFnbWVudHMgd2hlcmV2ZXIgcG9zc2libGUuCj4gKwkgKiBVc2Vyc3BhY2UgY2FuIHN1 cHBvcnQgdGhpcyBieSBhbGlnbmluZyB2aXJ0dWFsIGJhc2UgYWRkcmVzcyBhbmQKPiArCSAqIGFs bG9jYXRpb24gc2l6ZSB0byB0aGUgZnJhZ21lbnQgc2l6ZS4KPiArCSAqLwo+ICsJdW5zaWduZWQg bWF4X2ZyYWcgPSBwYXJhbXMtPmFkZXYtPnZtX21hbmFnZXIuZnJhZ21lbnRfc2l6ZTsKPiArCj4g KwkvKiBzeXN0ZW0gcGFnZXMgYXJlIG5vbiBjb250aW51b3VzbHkgKi8KPiArCWlmIChwYXJhbXMt PnNyYyB8fCAhKGZsYWdzICYgQU1ER1BVX1BURV9WQUxJRCkpIHsKPiArCQkqZnJhZyA9IDA7Cj4g KwkJKmZyYWdfZW5kID0gZW5kOwo+ICAgCQlyZXR1cm47Cj4gICAJfQo+ICAgCj4gLQllbnRyeS0+ aHVnZSA9IHRydWU7Cj4gLQlhbWRncHVfZ21jX2dldF92bV9wZGUocC0+YWRldiwgQU1ER1BVX1ZN X1BEQjAsICZkc3QsICZmbGFncyk7Cj4gLQo+IC0JcGRlID0gKGVudHJ5IC0gcGFyZW50LT5lbnRy aWVzKSAqIDg7Cj4gLQlhbWRncHVfdm1fdXBkYXRlX2Z1bmMocCwgcGFyZW50LT5iYXNlLmJvLCBw ZGUsIGRzdCwgMSwgMCwgZmxhZ3MpOwo+ICsJLyogVGhpcyBpbnRlbnRpb25hbGx5IHdyYXBzIGFy b3VuZCBpZiBubyBiaXQgaXMgc2V0ICovCj4gKwkqZnJhZyA9IG1pbigodW5zaWduZWQpZmZzKHN0 YXJ0KSAtIDEsICh1bnNpZ25lZClmbHM2NChlbmQgLSBzdGFydCkgLSAxKTsKPiArCWlmICgqZnJh ZyA+PSBtYXhfZnJhZykgewo+ICsJCSpmcmFnID0gbWF4X2ZyYWc7Cj4gKwkJKmZyYWdfZW5kID0g ZW5kICYgfigoMVVMTCA8PCBtYXhfZnJhZykgLSAxKTsKPiArCX0gZWxzZSB7Cj4gKwkJKmZyYWdf ZW5kID0gc3RhcnQgKyAoMSA8PCAqZnJhZyk7Cj4gKwl9Cj4gICB9Cj4gICAKPiAgIC8qKgo+IEBA IC0xNTQ1LDEwOCArMTU3NSwxMDUgQEAgc3RhdGljIHZvaWQgYW1kZ3B1X3ZtX2hhbmRsZV9odWdl X3BhZ2VzKHN0cnVjdCBhbWRncHVfcHRlX3VwZGF0ZV9wYXJhbXMgKnAsCj4gICAgKiAwIGZvciBz dWNjZXNzLCAtRUlOVkFMIGZvciBmYWlsdXJlLgo+ICAgICovCj4gICBzdGF0aWMgaW50IGFtZGdw dV92bV91cGRhdGVfcHRlcyhzdHJ1Y3QgYW1kZ3B1X3B0ZV91cGRhdGVfcGFyYW1zICpwYXJhbXMs Cj4gLQkJCQkgIHVpbnQ2NF90IHN0YXJ0LCB1aW50NjRfdCBlbmQsCj4gLQkJCQkgIHVpbnQ2NF90 IGRzdCwgdWludDY0X3QgZmxhZ3MpCj4gKwkJCQkgdWludDY0X3Qgc3RhcnQsIHVpbnQ2NF90IGVu ZCwKPiArCQkJCSB1aW50NjRfdCBkc3QsIHVpbnQ2NF90IGZsYWdzKQo+ICAgewo+ICAgCXN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2ID0gcGFyYW1zLT5hZGV2Owo+IC0JY29uc3QgdWludDY0X3Qg bWFzayA9IEFNREdQVV9WTV9QVEVfQ09VTlQoYWRldikgLSAxOwo+ICAgCXN0cnVjdCBhbWRncHVf dm1fcHRfY3Vyc29yIGN1cnNvcjsKPiArCXVpbnQ2NF90IGZyYWdfc3RhcnQgPSBzdGFydCwgZnJh Z19lbmQ7Cj4gKwl1bnNpZ25lZCBpbnQgZnJhZzsKPiAgIAo+IC0JLyogd2FsayBvdmVyIHRoZSBh ZGRyZXNzIHNwYWNlIGFuZCB1cGRhdGUgdGhlIHBhZ2UgdGFibGVzICovCj4gLQlmb3JfZWFjaF9h bWRncHVfdm1fcHRfbGVhZihhZGV2LCBwYXJhbXMtPnZtLCBzdGFydCwgZW5kIC0gMSwgY3Vyc29y KSB7Cj4gKwkvKiBmaWd1cmUgb3V0IHRoZSBpbml0aWFsIGZyYWdtZW50ICovCj4gKwlhbWRncHVf dm1fZnJhZ21lbnQocGFyYW1zLCBmcmFnX3N0YXJ0LCBlbmQsIGZsYWdzLCAmZnJhZywgJmZyYWdf ZW5kKTsKPiArCj4gKwkvKiB3YWxrIG92ZXIgdGhlIGFkZHJlc3Mgc3BhY2UgYW5kIHVwZGF0ZSB0 aGUgUFRzICovCj4gKwlhbWRncHVfdm1fcHRfc3RhcnQoYWRldiwgcGFyYW1zLT52bSwgc3RhcnQs ICZjdXJzb3IpOwo+ICsJd2hpbGUgKGN1cnNvci5wZm4gPCBlbmQpIHsKPiAgIAkJc3RydWN0IGFt ZGdwdV9ibyAqcHQgPSBjdXJzb3IuZW50cnktPmJhc2UuYm87Cj4gLQkJdWludDY0X3QgcGVfc3Rh cnQ7Cj4gLQkJdW5zaWduZWQgbnB0ZXM7Cj4gKwkJdW5zaWduZWQgc2hpZnQsIHBhcmVudF9zaGlm dCwgbnVtX2VudHJpZXM7Cj4gKwkJdWludDY0X3QgaW5jciwgZW50cnlfZW5kLCBwZV9zdGFydDsK PiAgIAo+IC0JCWlmICghcHQgfHwgY3Vyc29yLmxldmVsICE9IEFNREdQVV9WTV9QVEIpCj4gKwkJ aWYgKCFwdCkKPiAgIAkJCXJldHVybiAtRU5PRU5UOwo+ICAgCj4gLQkJaWYgKChjdXJzb3IucGZu ICYgfm1hc2spID09IChlbmQgJiB+bWFzaykpCj4gLQkJCW5wdGVzID0gZW5kIC0gY3Vyc29yLnBm bjsKPiAtCQllbHNlCj4gLQkJCW5wdGVzID0gQU1ER1BVX1ZNX1BURV9DT1VOVChhZGV2KSAtIChj dXJzb3IucGZuICYgbWFzayk7Cj4gLQo+IC0JCWFtZGdwdV92bV9oYW5kbGVfaHVnZV9wYWdlcyhw YXJhbXMsIGN1cnNvci5lbnRyeSwgY3Vyc29yLnBhcmVudCwKPiAtCQkJCQkgICAgbnB0ZXMsIGRz dCwgZmxhZ3MpOwo+IC0JCS8qIFdlIGRvbid0IG5lZWQgdG8gdXBkYXRlIFBURXMgZm9yIGh1Z2Ug cGFnZXMgKi8KPiAtCQlpZiAoY3Vyc29yLmVudHJ5LT5odWdlKSB7Cj4gLQkJCWRzdCArPSBucHRl cyAqIEFNREdQVV9HUFVfUEFHRV9TSVpFOwo+ICsJCS8qIFRoZSByb290IGxldmVsIGNhbid0IGJl IGEgaHVnZSBwYWdlICovCj4gKwkJaWYgKGN1cnNvci5sZXZlbCA9PSBhZGV2LT52bV9tYW5hZ2Vy LnJvb3RfbGV2ZWwpIHsKPiArCQkJaWYgKCFhbWRncHVfdm1fcHRfZGVzY2VuZGFudChhZGV2LCAm Y3Vyc29yKSkKPiArCQkJCXJldHVybiAtRU5PRU5UOwo+ICAgCQkJY29udGludWU7Cj4gICAJCX0K PiAgIAo+IC0JCXBlX3N0YXJ0ID0gKGN1cnNvci5wZm4gJiBtYXNrKSAqIDg7Cj4gLQkJYW1kZ3B1 X3ZtX3VwZGF0ZV9mdW5jKHBhcmFtcywgcHQsIHBlX3N0YXJ0LCBkc3QsIG5wdGVzLAo+IC0JCQkJ ICAgICAgQU1ER1BVX0dQVV9QQUdFX1NJWkUsIGZsYWdzKTsKPiAtCQlkc3QgKz0gbnB0ZXMgKiBB TURHUFVfR1BVX1BBR0VfU0laRTsKPiAtCX0KPiAtCj4gLQlyZXR1cm4gMDsKPiAtfQo+ICsJCS8q IEZpcnN0IGNoZWNrIGlmIHRoZSBlbnRyeSBpcyBhbHJlYWR5IGhhbmRsZWQgKi8KPiArCQlpZiAo Y3Vyc29yLnBmbiA8IGZyYWdfc3RhcnQpIHsKPiArCQkJY3Vyc29yLmVudHJ5LT5odWdlID0gdHJ1 ZTsKPiArCQkJYW1kZ3B1X3ZtX3B0X25leHQoYWRldiwgJmN1cnNvcik7Cj4gKwkJCWNvbnRpbnVl Owo+ICsJCX0KPiAgIAo+IC0vKgo+IC0gKiBhbWRncHVfdm1fZnJhZ19wdGVzIC0gYWRkIGZyYWdt ZW50IGluZm9ybWF0aW9uIHRvIFBURXMKPiAtICoKPiAtICogQHBhcmFtczogc2VlIGFtZGdwdV9w dGVfdXBkYXRlX3BhcmFtcyBkZWZpbml0aW9uCj4gLSAqIEB2bTogcmVxdWVzdGVkIHZtCj4gLSAq IEBzdGFydDogZmlyc3QgUFRFIHRvIGhhbmRsZQo+IC0gKiBAZW5kOiBsYXN0IFBURSB0byBoYW5k bGUKPiAtICogQGRzdDogYWRkciB0aG9zZSBQVEVzIHNob3VsZCBwb2ludCB0bwo+IC0gKiBAZmxh Z3M6IGh3IG1hcHBpbmcgZmxhZ3MKPiAtICoKPiAtICogUmV0dXJuczoKPiAtICogMCBmb3Igc3Vj Y2VzcywgLUVJTlZBTCBmb3IgZmFpbHVyZS4KPiAtICovCj4gLXN0YXRpYyBpbnQgYW1kZ3B1X3Zt X2ZyYWdfcHRlcyhzdHJ1Y3QgYW1kZ3B1X3B0ZV91cGRhdGVfcGFyYW1zCSpwYXJhbXMsCj4gLQkJ CQl1aW50NjRfdCBzdGFydCwgdWludDY0X3QgZW5kLAo+IC0JCQkJdWludDY0X3QgZHN0LCB1aW50 NjRfdCBmbGFncykKPiAtewo+IC0JLyoqCj4gLQkgKiBUaGUgTUMgTDEgVExCIHN1cHBvcnRzIHZh cmlhYmxlIHNpemVkIHBhZ2VzLCBiYXNlZCBvbiBhIGZyYWdtZW50Cj4gLQkgKiBmaWVsZCBpbiB0 aGUgUFRFLiBXaGVuIHRoaXMgZmllbGQgaXMgc2V0IHRvIGEgbm9uLXplcm8gdmFsdWUsIHBhZ2UK PiAtCSAqIGdyYW51bGFyaXR5IGlzIGluY3JlYXNlZCBmcm9tIDRLQiB0byAoMSA8PCAoMTIgKyBm cmFnKSkuIFRoZSBQVEUKPiAtCSAqIGZsYWdzIGFyZSBjb25zaWRlcmVkIHZhbGlkIGZvciBhbGwg UFRFcyB3aXRoaW4gdGhlIGZyYWdtZW50IHJhbmdlCj4gLQkgKiBhbmQgY29ycmVzcG9uZGluZyBt YXBwaW5ncyBhcmUgYXNzdW1lZCB0byBiZSBwaHlzaWNhbGx5IGNvbnRpZ3VvdXMuCj4gLQkgKgo+ IC0JICogVGhlIEwxIFRMQiBjYW4gc3RvcmUgYSBzaW5nbGUgUFRFIGZvciB0aGUgd2hvbGUgZnJh Z21lbnQsCj4gLQkgKiBzaWduaWZpY2FudGx5IGluY3JlYXNpbmcgdGhlIHNwYWNlIGF2YWlsYWJs ZSBmb3IgdHJhbnNsYXRpb24KPiAtCSAqIGNhY2hpbmcuIFRoaXMgbGVhZHMgdG8gbGFyZ2UgaW1w cm92ZW1lbnRzIGluIHRocm91Z2hwdXQgd2hlbiB0aGUKPiAtCSAqIFRMQiBpcyB1bmRlciBwcmVz c3VyZS4KPiAtCSAqCj4gLQkgKiBUaGUgTDIgVExCIGRpc3RyaWJ1dGVzIHNtYWxsIGFuZCBsYXJn ZSBmcmFnbWVudHMgaW50byB0d28KPiAtCSAqIGFzeW1tZXRyaWMgcGFydGl0aW9ucy4gVGhlIGxh cmdlIGZyYWdtZW50IGNhY2hlIGlzIHNpZ25pZmljYW50bHkKPiAtCSAqIGxhcmdlci4gVGh1cywg d2UgdHJ5IHRvIHVzZSBsYXJnZSBmcmFnbWVudHMgd2hlcmV2ZXIgcG9zc2libGUuCj4gLQkgKiBV c2Vyc3BhY2UgY2FuIHN1cHBvcnQgdGhpcyBieSBhbGlnbmluZyB2aXJ0dWFsIGJhc2UgYWRkcmVz cyBhbmQKPiAtCSAqIGFsbG9jYXRpb24gc2l6ZSB0byB0aGUgZnJhZ21lbnQgc2l6ZS4KPiAtCSAq Lwo+IC0JdW5zaWduZWQgbWF4X2ZyYWcgPSBwYXJhbXMtPmFkZXYtPnZtX21hbmFnZXIuZnJhZ21l bnRfc2l6ZTsKPiAtCWludCByOwo+ICsJCS8qIElmIGl0IGlzbid0IGFscmVhZHkgaGFuZGxlZCBp dCBjYW4ndCBiZSBhIGh1Z2UgcGFnZSAqLwo+ICsJCWlmIChjdXJzb3IuZW50cnktPmh1Z2UpIHsK PiArCQkJLyogQWRkIHRoZSBlbnRyeSB0byB0aGUgcmVsb2NhdGVkIGxpc3QgdG8gdXBkYXRlIGl0 LiAqLwo+ICsJCQljdXJzb3IuZW50cnktPmh1Z2UgPSBmYWxzZTsKPiArCQkJYW1kZ3B1X3ZtX2Jv X3JlbG9jYXRlZCgmY3Vyc29yLmVudHJ5LT5iYXNlKTsKPiArCQl9Cj4gICAKPiAtCS8qIHN5c3Rl bSBwYWdlcyBhcmUgbm9uIGNvbnRpbnVvdXNseSAqLwo+IC0JaWYgKHBhcmFtcy0+c3JjIHx8ICEo ZmxhZ3MgJiBBTURHUFVfUFRFX1ZBTElEKSkKPiAtCQlyZXR1cm4gYW1kZ3B1X3ZtX3VwZGF0ZV9w dGVzKHBhcmFtcywgc3RhcnQsIGVuZCwgZHN0LCBmbGFncyk7Cj4gLQo+IC0Jd2hpbGUgKHN0YXJ0 ICE9IGVuZCkgewo+IC0JCXVpbnQ2NF90IGZyYWdfZmxhZ3MsIGZyYWdfZW5kOwo+IC0JCXVuc2ln bmVkIGZyYWc7Cj4gLQo+IC0JCS8qIFRoaXMgaW50ZW50aW9uYWxseSB3cmFwcyBhcm91bmQgaWYg bm8gYml0IGlzIHNldCAqLwo+IC0JCWZyYWcgPSBtaW4oKHVuc2lnbmVkKWZmcyhzdGFydCkgLSAx LAo+IC0JCQkgICAodW5zaWduZWQpZmxzNjQoZW5kIC0gc3RhcnQpIC0gMSk7Cj4gLQkJaWYgKGZy YWcgPj0gbWF4X2ZyYWcpIHsKPiAtCQkJZnJhZ19mbGFncyA9IEFNREdQVV9QVEVfRlJBRyhtYXhf ZnJhZyk7Cj4gLQkJCWZyYWdfZW5kID0gZW5kICYgfigoMVVMTCA8PCBtYXhfZnJhZykgLSAxKTsK PiAtCQl9IGVsc2Ugewo+IC0JCQlmcmFnX2ZsYWdzID0gQU1ER1BVX1BURV9GUkFHKGZyYWcpOwo+ IC0JCQlmcmFnX2VuZCA9IHN0YXJ0ICsgKDEgPDwgZnJhZyk7Cj4gKwkJc2hpZnQgPSBhbWRncHVf dm1fbGV2ZWxfc2hpZnQoYWRldiwgY3Vyc29yLmxldmVsKTsKPiArCQlwYXJlbnRfc2hpZnQgPSBh bWRncHVfdm1fbGV2ZWxfc2hpZnQoYWRldiwgY3Vyc29yLmxldmVsIC0gMSk7Cj4gKwkJaWYgKGFk ZXYtPmFzaWNfdHlwZSA8IENISVBfVkVHQTEwKSB7Cj4gKwkJCS8qIE5vIGh1Z2UgcGFnZSBzdXBw b3J0IGJlZm9yZSBHTUMgdjkgKi8KPiArCQkJaWYgKGN1cnNvci5sZXZlbCAhPSBBTURHUFVfVk1f UFRCKSB7Cj4gKwkJCQlpZiAoIWFtZGdwdV92bV9wdF9kZXNjZW5kYW50KGFkZXYsICZjdXJzb3Ip KQo+ICsJCQkJCXJldHVybiAtRU5PRU5UOwo+ICsJCQkJY29udGludWU7Cj4gKwkJCX0KPiArCQl9 IGVsc2UgaWYgKGZyYWcgPCBzaGlmdCkgewo+ICsJCQkvKiBXZSBjYW4ndCB1c2UgdGhpcyBsZXZl bCB3aGVuIHRoZSBmcmFnbWVudCBzaXplIGlzCj4gKwkJCSAqIHNtYWxsZXIgdGhhbiB0aGUgYWRk cmVzcyBzaGlmdC4gR28gdG8gdGhlIG5leHQKPiArCQkJICogY2hpbGQgZW50cnkgYW5kIHRyeSBh Z2Fpbi4KPiArCQkJICovCj4gKwkJCWlmICghYW1kZ3B1X3ZtX3B0X2Rlc2NlbmRhbnQoYWRldiwg JmN1cnNvcikpCj4gKwkJCQlyZXR1cm4gLUVOT0VOVDsKPiArCQkJY29udGludWU7Cj4gKwkJfSBl bHNlIGlmIChmcmFnID49IHBhcmVudF9zaGlmdCkgewo+ICsJCQkvKiBJZiB0aGUgZnJhZ21lbnQg c2l6ZSBpcyBldmVuIGxhcmdlciB0aGFuIHRoZSBwYXJlbnQKPiArCQkJICogc2hpZnQgd2Ugc2hv dWxkIGdvIHVwIG9uZSBsZXZlbCBhbmQgY2hlY2sgaXQgYWdhaW4uCj4gKwkJCSAqLwo+ICsJCQlp ZiAoIWFtZGdwdV92bV9wdF9hbmNlc3RvcigmY3Vyc29yKSkKPiArCQkJCXJldHVybiAtRU5PRU5U Owo+ICsJCQljb250aW51ZTsKPiAgIAkJfQo+ICAgCj4gLQkJciA9IGFtZGdwdV92bV91cGRhdGVf cHRlcyhwYXJhbXMsIHN0YXJ0LCBmcmFnX2VuZCwgZHN0LAo+IC0JCQkJCSAgZmxhZ3MgfCBmcmFn X2ZsYWdzKTsKPiAtCQlpZiAocikKPiAtCQkJcmV0dXJuIHI7Cj4gKwkJLyogTG9va3MgZ29vZCBz byBmYXIsIGNhbGN1bGF0ZSBwYXJhbWV0ZXJzIGZvciB0aGUgdXBkYXRlICovCj4gKwkJaW5jciA9 IEFNREdQVV9HUFVfUEFHRV9TSVpFIDw8IHNoaWZ0Owo+ICsJCW51bV9lbnRyaWVzID0gYW1kZ3B1 X3ZtX251bV9lbnRyaWVzKGFkZXYsIGN1cnNvci5sZXZlbCk7Cj4gKwkJcGVfc3RhcnQgPSAoKGN1 cnNvci5wZm4gPj4gc2hpZnQpICYgKG51bV9lbnRyaWVzIC0gMSkpICogODsKPiArCQllbnRyeV9l bmQgPSBudW1fZW50cmllcyA8PCBzaGlmdDsKPiArCQllbnRyeV9lbmQgKz0gY3Vyc29yLnBmbiAm IH4oZW50cnlfZW5kIC0gMSk7Cj4gKwkJZW50cnlfZW5kID0gbWluKGVudHJ5X2VuZCwgZW5kKTsK PiArCj4gKwkJZG8gewo+ICsJCQl1aW50NjRfdCB1cGRfZW5kID0gbWluKGVudHJ5X2VuZCwgZnJh Z19lbmQpOwo+ICsJCQl1bnNpZ25lZCBucHRlcyA9ICh1cGRfZW5kIC0gZnJhZ19zdGFydCkgPj4g c2hpZnQ7Cj4gKwo+ICsJCQlhbWRncHVfdm1fdXBkYXRlX2h1Z2UocGFyYW1zLCBwdCwgY3Vyc29y LmxldmVsLAo+ICsJCQkJCSAgICAgIHBlX3N0YXJ0LCBkc3QsIG5wdGVzLCBpbmNyLAo+ICsJCQkJ CSAgICAgIGZsYWdzIHwgQU1ER1BVX1BURV9GUkFHKGZyYWcpKTsKPiArCj4gKwkJCXBlX3N0YXJ0 ICs9IG5wdGVzICogODsKPiArCQkJZHN0ICs9IG5wdGVzICogQU1ER1BVX0dQVV9QQUdFX1NJWkUg PDwgc2hpZnQ7Cj4gKwo+ICsJCQlmcmFnX3N0YXJ0ID0gdXBkX2VuZDsKPiArCQkJaWYgKGZyYWdf c3RhcnQgPj0gZnJhZ19lbmQpIHsKPiArCQkJCS8qIGZpZ3VyZSBvdXQgdGhlIG5leHQgZnJhZ21l bnQgKi8KPiArCQkJCWFtZGdwdV92bV9mcmFnbWVudChwYXJhbXMsIGZyYWdfc3RhcnQsIGVuZCwK PiArCQkJCQkJICAgZmxhZ3MsICZmcmFnLCAmZnJhZ19lbmQpOwo+ICsJCQkJaWYgKGZyYWcgPCBz aGlmdCkKPiArCQkJCQlicmVhazsKPiArCQkJfQo+ICsJCX0gd2hpbGUgKGZyYWdfc3RhcnQgPCBl bnRyeV9lbmQpOwo+ICAgCj4gLQkJZHN0ICs9IChmcmFnX2VuZCAtIHN0YXJ0KSAqIEFNREdQVV9H UFVfUEFHRV9TSVpFOwo+IC0JCXN0YXJ0ID0gZnJhZ19lbmQ7Cj4gKwkJaWYgKGZyYWcgPj0gc2hp ZnQpCj4gKwkJCWFtZGdwdV92bV9wdF9uZXh0KGFkZXYsICZjdXJzb3IpOwo+ICAgCX0KPiAgIAo+ ICAgCXJldHVybiAwOwo+IEBAIC0xNzA4LDggKzE3MzUsOCBAQCBzdGF0aWMgaW50IGFtZGdwdV92 bV9ib191cGRhdGVfbWFwcGluZyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgIAo+ICAg CQlwYXJhbXMuZnVuYyA9IGFtZGdwdV92bV9jcHVfc2V0X3B0ZXM7Cj4gICAJCXBhcmFtcy5wYWdl c19hZGRyID0gcGFnZXNfYWRkcjsKPiAtCQlyZXR1cm4gYW1kZ3B1X3ZtX2ZyYWdfcHRlcygmcGFy YW1zLCBzdGFydCwgbGFzdCArIDEsCj4gLQkJCQkJICAgYWRkciwgZmxhZ3MpOwo+ICsJCXJldHVy biBhbWRncHVfdm1fdXBkYXRlX3B0ZXMoJnBhcmFtcywgc3RhcnQsIGxhc3QgKyAxLAo+ICsJCQkJ CSAgICAgYWRkciwgZmxhZ3MpOwo+ICAgCX0KPiAgIAo+ICAgCXJpbmcgPSBjb250YWluZXJfb2Yo dm0tPmVudGl0eS5ycS0+c2NoZWQsIHN0cnVjdCBhbWRncHVfcmluZywgc2NoZWQpOwo+IEBAIC0x Nzg4LDcgKzE4MTUsNyBAQCBzdGF0aWMgaW50IGFtZGdwdV92bV9ib191cGRhdGVfbWFwcGluZyhz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgIAlpZiAocikKPiAgIAkJZ290byBlcnJvcl9m cmVlOwo+ICAgCj4gLQlyID0gYW1kZ3B1X3ZtX2ZyYWdfcHRlcygmcGFyYW1zLCBzdGFydCwgbGFz dCArIDEsIGFkZHIsIGZsYWdzKTsKPiArCXIgPSBhbWRncHVfdm1fdXBkYXRlX3B0ZXMoJnBhcmFt cywgc3RhcnQsIGxhc3QgKyAxLCBhZGRyLCBmbGFncyk7Cj4gICAJaWYgKHIpCj4gICAJCWdvdG8g ZXJyb3JfZnJlZTsKPiAgIAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1n ZngK