From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 1/2] drm/ttm: fix busy memory to fail other user v7 Date: Tue, 7 May 2019 13:51:37 +0200 Message-ID: <0da74f88-ec79-1663-6027-d3f27e25209e@gmail.com> References: <20190507114531.26089-1-david1.zhou@amd.com> Reply-To: christian.koenig@amd.com Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wm1-x341.google.com (mail-wm1-x341.google.com [IPv6:2a00:1450:4864:20::341]) by gabe.freedesktop.org (Postfix) with ESMTPS id 9E1506E7B6 for ; Tue, 7 May 2019 11:51:45 +0000 (UTC) Received: by mail-wm1-x341.google.com with SMTP id y5so19681277wma.2 for ; Tue, 07 May 2019 04:51:45 -0700 (PDT) In-Reply-To: <20190507114531.26089-1-david1.zhou@amd.com> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: Chunming Zhou , Christian.Koenig@amd.com, Prike.Liang@amd.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org QW0gMDcuMDUuMTkgdW0gMTM6NDUgc2NocmllYiBDaHVubWluZyBaaG91Ogo+IGhlYXZ5IGdwdSBq b2IgY291bGQgb2NjdXB5IG1lbW9yeSBsb25nIHRpbWUsIHdoaWNoIGxlYWQgb3RoZXIgdXNlciBm YWlsIHRvIGdldCBtZW1vcnkuCj4KPiBiYXNpY2FsbHkgcGljayB1cCBDaHJpc3RpYW4gaWRlYToK Pgo+IDEuIFJlc2VydmUgdGhlIEJPIGluIERDIHVzaW5nIGEgd3dfbXV0ZXggdGlja2V0ICh0cml2 aWFsKS4KPiAyLiBJZiB3ZSB0aGVuIHJ1biBpbnRvIHRoaXMgRUJVU1kgY29uZGl0aW9uIGluIFRU TSBjaGVjayBpZiB0aGUgQk8gd2UgbmVlZCBtZW1vcnkgZm9yIChvciByYXRoZXIgdGhlIHd3X211 dGV4IG9mIGl0cyByZXNlcnZhdGlvbiBvYmplY3QpIGhhcyBhIHRpY2tldCBhc3NpZ25lZC4KPiAz LiBJZiB3ZSBoYXZlIGEgdGlja2V0IHdlIGdyYWIgYSByZWZlcmVuY2UgdG8gdGhlIGZpcnN0IEJP IG9uIHRoZSBMUlUsIGRyb3AgdGhlIExSVSBsb2NrIGFuZCB0cnkgdG8gZ3JhYiB0aGUgcmVzZXJ2 YXRpb24gbG9jayB3aXRoIHRoZSB0aWNrZXQuCj4gNC4gSWYgZ2V0dGluZyB0aGUgcmVzZXJ2YXRp b24gbG9jayB3aXRoIHRoZSB0aWNrZXQgc3VjY2VlZGVkIHdlIGNoZWNrIGlmIHRoZSBCTyBpcyBz dGlsbCB0aGUgZmlyc3Qgb25lIG9uIHRoZSBMUlUgaW4gcXVlc3Rpb24gKHRoZSBCTyBjb3VsZCBo YXZlIG1vdmVkKS4KPiA1LiBJZiB0aGUgQk8gaXMgc3RpbGwgdGhlIGZpcnN0IG9uZSBvbiB0aGUg TFJVIGluIHF1ZXN0aW9uIHdlIHRyeSB0byBldmljdCBpdCBhcyB3ZSB3b3VsZCBldmljdCBhbnkg b3RoZXIgQk8uCj4gNi4gSWYgYW55IG9mIHRoZSAiSWYncyIgYWJvdmUgZmFpbCB3ZSBqdXN0IGJh Y2sgb2ZmIGFuZCByZXR1cm4gLUVCVVNZLgo+Cj4gdjI6IGZpeCBzb21lIG1pbm9yIGNoZWNrCj4g djM6IGFkZHJlc3MgQ2hyaXN0aWFuIHYyIGNvbW1lbnRzLgo+IHY0OiBmaXggc29tZSBtaXNzaW5n Cj4gdjU6IGhhbmRsZSBmaXJzdF9ibyB1bmxvY2sgYW5kIGJvX2dldC9wdXQKPiB2NjogYWJzdHJh Y3QgdW5pZmllZCBpdGVyYXRlIGZ1bmN0aW9uLCBhbmQgaGFuZGxlIGFsbCBwb3NzaWJsZSB1c2Vj YXNlIG5vdCBvbmx5IHBpbm5lZCBiby4KPiB2NzogcGFzcyByZXF1ZXN0IGJvLT5yZXN2IHRvIHR0 bV9ib19ldmljdF9maXJzdAo+Cj4gQ2hhbmdlLUlkOiBJMjE0MjNmYjkyMmY4ODU0NjVmMTM4MzNj NDFkZjFlMTM0MzY0YThlNwo+IFNpZ25lZC1vZmYtYnk6IENodW5taW5nIFpob3UgPGRhdmlkMS56 aG91QGFtZC5jb20+CgpSZXZpZXdlZC1ieTogQ2hyaXN0aWFuIEvDtm5pZyA8Y2hyaXN0aWFuLmtv ZW5pZ0BhbWQuY29tPgoKUGxlYXNlIGxlYXZlIG1lIGEgbm90ZSB3aGVuIHRoaXMgaGl0cyBhbWQt c3RhZ2luZy1kcm0tbmV4dCwgY2F1c2UgSSBuZWVkIAp0byB0ZXN0IHdoeSBpdCBkaWRuJ3QgaGVs cGVkIHdpdGggTWFyZWtzIHByb2JsZW0uCgpDaHJpc3RpYW4uCgo+IC0tLQo+ICAgZHJpdmVycy9n cHUvZHJtL3R0bS90dG1fYm8uYyB8IDExMSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0t LS0tLQo+ICAgMSBmaWxlIGNoYW5nZWQsIDk0IGluc2VydGlvbnMoKyksIDE3IGRlbGV0aW9ucygt KQo+Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgYi9kcml2ZXJz L2dwdS9kcm0vdHRtL3R0bV9iby5jCj4gaW5kZXggODUwMmIzZWQyZDg4Li5mNWU2MzI4ZTRhNTcg MTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL3R0bS90dG1fYm8uYwo+ICsrKyBiL2RyaXZl cnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKPiBAQCAtNzY2LDExICs3NjYsMTMgQEAgRVhQT1JUX1NZ TUJPTCh0dG1fYm9fZXZpY3Rpb25fdmFsdWFibGUpOwo+ICAgICogYi4gT3RoZXJ3aXNlLCB0cnls b2NrIGl0Lgo+ICAgICovCj4gICBzdGF0aWMgYm9vbCB0dG1fYm9fZXZpY3Rfc3dhcG91dF9hbGxv d2FibGUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKPiAtCQkJc3RydWN0IHR0bV9vcGVy YXRpb25fY3R4ICpjdHgsIGJvb2wgKmxvY2tlZCkKPiArCQkJc3RydWN0IHR0bV9vcGVyYXRpb25f Y3R4ICpjdHgsIGJvb2wgKmxvY2tlZCwgYm9vbCAqYnVzeSkKPiAgIHsKPiAgIAlib29sIHJldCA9 IGZhbHNlOwo+ICAgCj4gICAJKmxvY2tlZCA9IGZhbHNlOwo+ICsJaWYgKGJ1c3kpCj4gKwkJKmJ1 c3kgPSBmYWxzZTsKPiAgIAlpZiAoYm8tPnJlc3YgPT0gY3R4LT5yZXN2KSB7Cj4gICAJCXJlc2Vy dmF0aW9uX29iamVjdF9hc3NlcnRfaGVsZChiby0+cmVzdik7Cj4gICAJCWlmIChjdHgtPmZsYWdz ICYgVFRNX09QVF9GTEFHX0FMTE9XX1JFU19FVklDVAo+IEBAIC03NzksMzUgKzc4MSw0NiBAQCBz dGF0aWMgYm9vbCB0dG1fYm9fZXZpY3Rfc3dhcG91dF9hbGxvd2FibGUoc3RydWN0IHR0bV9idWZm ZXJfb2JqZWN0ICpibywKPiAgIAl9IGVsc2Ugewo+ICAgCQkqbG9ja2VkID0gcmVzZXJ2YXRpb25f b2JqZWN0X3RyeWxvY2soYm8tPnJlc3YpOwo+ICAgCQlyZXQgPSAqbG9ja2VkOwo+ICsJCWlmICgh cmV0ICYmIGJ1c3kpCj4gKwkJCSpidXN5ID0gdHJ1ZTsKPiAgIAl9Cj4gICAKPiAgIAlyZXR1cm4g cmV0Owo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgdHRtX21lbV9ldmljdF9maXJzdChzdHJ1Y3Qg dHRtX2JvX2RldmljZSAqYmRldiwKPiAtCQkJICAgICAgIHVpbnQzMl90IG1lbV90eXBlLAo+IC0J CQkgICAgICAgY29uc3Qgc3RydWN0IHR0bV9wbGFjZSAqcGxhY2UsCj4gLQkJCSAgICAgICBzdHJ1 Y3QgdHRtX29wZXJhdGlvbl9jdHggKmN0eCkKPiArc3RhdGljIHN0cnVjdCB0dG1fYnVmZmVyX29i amVjdCoKPiArdHRtX21lbV9maW5kX2V2aXRhYmxlX2JvKHN0cnVjdCB0dG1fYm9fZGV2aWNlICpi ZGV2LAo+ICsJCQkgc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCj4gKwkJCSBjb25z dCBzdHJ1Y3QgdHRtX3BsYWNlICpwbGFjZSwKPiArCQkJIHN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0 eCAqY3R4LAo+ICsJCQkgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICoqZmlyc3RfYm8sCj4gKwkJ CSBib29sICpsb2NrZWQpCj4gICB7Cj4gLQlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGJk ZXYtPmdsb2I7Cj4gLQlzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiA9ICZiZGV2LT5t YW5bbWVtX3R5cGVdOwo+ICAgCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8gPSBOVUxMOwo+ IC0JYm9vbCBsb2NrZWQgPSBmYWxzZTsKPiAtCXVuc2lnbmVkIGk7Cj4gLQlpbnQgcmV0Owo+ICsJ aW50IGk7Cj4gICAKPiAtCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwo+ICsJaWYgKGZpcnN0 X2JvKQo+ICsJCSpmaXJzdF9ibyA9IE5VTEw7Cj4gICAJZm9yIChpID0gMDsgaSA8IFRUTV9NQVhf Qk9fUFJJT1JJVFk7ICsraSkgewo+ICAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJvLCAmbWFuLT5s cnVbaV0sIGxydSkgewo+IC0JCQlpZiAoIXR0bV9ib19ldmljdF9zd2Fwb3V0X2FsbG93YWJsZShi bywgY3R4LCAmbG9ja2VkKSkKPiArCQkJYm9vbCBidXN5ID0gZmFsc2U7Cj4gKwo+ICsJCQlpZiAo IXR0bV9ib19ldmljdF9zd2Fwb3V0X2FsbG93YWJsZShibywgY3R4LCBsb2NrZWQsCj4gKwkJCQkJ CQkgICAgJmJ1c3kpKSB7Cj4gKwkJCQlpZiAoZmlyc3RfYm8gJiYgISgqZmlyc3RfYm8pICYmIGJ1 c3kpIHsKPiArCQkJCQl0dG1fYm9fZ2V0KGJvKTsKPiArCQkJCQkqZmlyc3RfYm8gPSBibzsKPiAr CQkJCX0KPiAgIAkJCQljb250aW51ZTsKPiArCQkJfQo+ICAgCj4gICAJCQlpZiAocGxhY2UgJiYg IWJkZXYtPmRyaXZlci0+ZXZpY3Rpb25fdmFsdWFibGUoYm8sCj4gICAJCQkJCQkJCSAgICAgIHBs YWNlKSkgewo+IC0JCQkJaWYgKGxvY2tlZCkKPiArCQkJCWlmICgqbG9ja2VkKQo+ICAgCQkJCQly ZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGJvLT5yZXN2KTsKPiAgIAkJCQljb250aW51ZTsKPiAg IAkJCX0KPiArCj4gICAJCQlicmVhazsKPiAgIAkJfQo+ICAgCj4gQEAgLTgxOCw5ICs4MzEsNjcg QEAgc3RhdGljIGludCB0dG1fbWVtX2V2aWN0X2ZpcnN0KHN0cnVjdCB0dG1fYm9fZGV2aWNlICpi ZGV2LAo+ICAgCQlibyA9IE5VTEw7Cj4gICAJfQo+ICAgCj4gKwlyZXR1cm4gYm87Cj4gK30KPiAr Cj4gK3N0YXRpYyBpbnQgdHRtX21lbV9ldmljdF9maXJzdChzdHJ1Y3QgdHRtX2JvX2RldmljZSAq YmRldiwKPiArCQkJICAgICAgIHVpbnQzMl90IG1lbV90eXBlLAo+ICsJCQkgICAgICAgY29uc3Qg c3RydWN0IHR0bV9wbGFjZSAqcGxhY2UsCj4gKwkJCSAgICAgICBzdHJ1Y3QgdHRtX29wZXJhdGlv bl9jdHggKmN0eCwKPiArCQkJICAgICAgIHN0cnVjdCByZXNlcnZhdGlvbl9vYmplY3QgKnJlcXVl c3RfcmVzdikKPiArewo+ICsJc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiZGV2LT5nbG9i Owo+ICsJc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4gPSAmYmRldi0+bWFuW21lbV90 eXBlXTsKPiArCXN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8gPSBOVUxMLCAqZmlyc3RfYm8g PSBOVUxMOwo+ICsJYm9vbCBsb2NrZWQgPSBmYWxzZTsKPiArCWludCByZXQ7Cj4gKwo+ICsJc3Bp bl9sb2NrKCZnbG9iLT5scnVfbG9jayk7Cj4gKwlibyA9IHR0bV9tZW1fZmluZF9ldml0YWJsZV9i byhiZGV2LCBtYW4sIHBsYWNlLCBjdHgsICZmaXJzdF9ibywKPiArCQkJCSAgICAgICZsb2NrZWQp Owo+ICAgCWlmICghYm8pIHsKPiArCQlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggYnVzeV9jdHg7 Cj4gKwo+ICAgCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwo+IC0JCXJldHVybiAtRUJV U1k7Cj4gKwkJLyogY2hlY2sgaWYgb3RoZXIgdXNlciBvY2N1cHkgbWVtb3J5IHRvbyBsb25nIHRp bWUgKi8KPiArCQlpZiAoIWZpcnN0X2JvIHx8ICFyZXF1ZXN0X3Jlc3YgfHwgIXJlcXVlc3RfcmVz di0+bG9jay5jdHgpIHsKPiArCQkJaWYgKGZpcnN0X2JvKQo+ICsJCQkJdHRtX2JvX3B1dChmaXJz dF9ibyk7Cj4gKwkJCXJldHVybiAtRUJVU1k7Cj4gKwkJfQo+ICsJCWlmIChmaXJzdF9iby0+cmVz diA9PSByZXF1ZXN0X3Jlc3YpIHsKPiArCQkJdHRtX2JvX3B1dChmaXJzdF9ibyk7Cj4gKwkJCXJl dHVybiAtRUJVU1k7Cj4gKwkJfQo+ICsJCWlmIChjdHgtPmludGVycnVwdGlibGUpCj4gKwkJCXJl dCA9IHd3X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZmlyc3RfYm8tPnJlc3YtPmxvY2ssCj4g KwkJCQkJCQkgIHJlcXVlc3RfcmVzdi0+bG9jay5jdHgpOwo+ICsJCWVsc2UKPiArCQkJcmV0ID0g d3dfbXV0ZXhfbG9jaygmZmlyc3RfYm8tPnJlc3YtPmxvY2ssIHJlcXVlc3RfcmVzdi0+bG9jay5j dHgpOwo+ICsJCWlmIChyZXQpIHsKPiArCQkJdHRtX2JvX3B1dChmaXJzdF9ibyk7Cj4gKwkJCXJl dHVybiByZXQ7Cj4gKwkJfQo+ICsJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwo+ICsJCS8q IHByZXZpb3VzIGJ1c3kgcmVzdiBsb2NrIGlzIGhlbGQgYnkgYWJvdmUsIGlkbGUgbm93LAo+ICsJ CSAqIHNvIGxldCB0aGVtIGV2aWN0YWJsZS4KPiArCQkgKi8KPiArCQlidXN5X2N0eC5pbnRlcnJ1 cHRpYmxlID0gY3R4LT5pbnRlcnJ1cHRpYmxlOwo+ICsJCWJ1c3lfY3R4Lm5vX3dhaXRfZ3B1ICAg PSBjdHgtPm5vX3dhaXRfZ3B1Owo+ICsJCWJ1c3lfY3R4LnJlc3YJICAgICAgID0gZmlyc3RfYm8t PnJlc3Y7Cj4gKwkJYnVzeV9jdHguZmxhZ3MJICAgICAgID0gVFRNX09QVF9GTEFHX0FMTE9XX1JF U19FVklDVDsKPiArCj4gKwkJYm8gPSB0dG1fbWVtX2ZpbmRfZXZpdGFibGVfYm8oYmRldiwgbWFu LCBwbGFjZSwgJmJ1c3lfY3R4LCBOVUxMLAo+ICsJCQkJCSAgICAgICZsb2NrZWQpOwo+ICsJCWlm IChibyAmJiAoYm8tPnJlc3YgPT0gZmlyc3RfYm8tPnJlc3YpKQo+ICsJCQlsb2NrZWQgPSB0cnVl Owo+ICsJCWVsc2UgaWYgKGJvKQo+ICsJCQl3d19tdXRleF91bmxvY2soJmZpcnN0X2JvLT5yZXN2 LT5sb2NrKTsKPiArCQlpZiAoIWJvKSB7Cj4gKwkJCXNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9j ayk7Cj4gKwkJCXR0bV9ib19wdXQoZmlyc3RfYm8pOwo+ICsJCQlyZXR1cm4gLUVCVVNZOwo+ICsJ CX0KPiAgIAl9Cj4gICAKPiAgIAlrcmVmX2dldCgmYm8tPmxpc3Rfa3JlZik7Cj4gQEAgLTgyOSwx MSArOTAwLDE1IEBAIHN0YXRpYyBpbnQgdHRtX21lbV9ldmljdF9maXJzdChzdHJ1Y3QgdHRtX2Jv X2RldmljZSAqYmRldiwKPiAgIAkJcmV0ID0gdHRtX2JvX2NsZWFudXBfcmVmcyhibywgY3R4LT5p bnRlcnJ1cHRpYmxlLAo+ICAgCQkJCQkgIGN0eC0+bm9fd2FpdF9ncHUsIGxvY2tlZCk7Cj4gICAJ CWtyZWZfcHV0KCZiby0+bGlzdF9rcmVmLCB0dG1fYm9fcmVsZWFzZV9saXN0KTsKPiArCQlpZiAo Zmlyc3RfYm8pCj4gKwkJCXR0bV9ib19wdXQoZmlyc3RfYm8pOwo+ICAgCQlyZXR1cm4gcmV0Owo+ ICAgCX0KPiAgIAo+ICAgCXR0bV9ib19kZWxfZnJvbV9scnUoYm8pOwo+ICAgCXNwaW5fdW5sb2Nr KCZnbG9iLT5scnVfbG9jayk7Cj4gKwlpZiAoZmlyc3RfYm8pCj4gKwkJdHRtX2JvX3B1dChmaXJz dF9ibyk7Cj4gICAKPiAgIAlyZXQgPSB0dG1fYm9fZXZpY3QoYm8sIGN0eCk7Cj4gICAJaWYgKGxv Y2tlZCkgewo+IEBAIC05MDcsNyArOTgyLDcgQEAgc3RhdGljIGludCB0dG1fYm9fbWVtX2ZvcmNl X3NwYWNlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sCj4gICAJCQlyZXR1cm4gcmV0Owo+ ICAgCQlpZiAobWVtLT5tbV9ub2RlKQo+ICAgCQkJYnJlYWs7Cj4gLQkJcmV0ID0gdHRtX21lbV9l dmljdF9maXJzdChiZGV2LCBtZW1fdHlwZSwgcGxhY2UsIGN0eCk7Cj4gKwkJcmV0ID0gdHRtX21l bV9ldmljdF9maXJzdChiZGV2LCBtZW1fdHlwZSwgcGxhY2UsIGN0eCwgYm8tPnJlc3YpOwo+ICAg CQlpZiAodW5saWtlbHkocmV0ICE9IDApKQo+ICAgCQkJcmV0dXJuIHJldDsKPiAgIAl9IHdoaWxl ICgxKTsKPiBAQCAtMTQxMyw3ICsxNDg4LDggQEAgc3RhdGljIGludCB0dG1fYm9fZm9yY2VfbGlz dF9jbGVhbihzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwKPiAgIAlmb3IgKGkgPSAwOyBpIDwg VFRNX01BWF9CT19QUklPUklUWTsgKytpKSB7Cj4gICAJCXdoaWxlICghbGlzdF9lbXB0eSgmbWFu LT5scnVbaV0pKSB7Cj4gICAJCQlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwo+IC0JCQly ZXQgPSB0dG1fbWVtX2V2aWN0X2ZpcnN0KGJkZXYsIG1lbV90eXBlLCBOVUxMLCAmY3R4KTsKPiAr CQkJcmV0ID0gdHRtX21lbV9ldmljdF9maXJzdChiZGV2LCBtZW1fdHlwZSwgTlVMTCwgJmN0eCwK PiArCQkJCQkJICBOVUxMKTsKPiAgIAkJCWlmIChyZXQpCj4gICAJCQkJcmV0dXJuIHJldDsKPiAg IAkJCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwo+IEBAIC0xNzg0LDcgKzE4NjAsOCBAQCBp bnQgdHRtX2JvX3N3YXBvdXQoc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IsIHN0cnVjdCB0dG1f b3BlcmF0aW9uX2N0eCAqY3R4KQo+ICAgCXNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwo+ICAg CWZvciAoaSA9IDA7IGkgPCBUVE1fTUFYX0JPX1BSSU9SSVRZOyArK2kpIHsKPiAgIAkJbGlzdF9m b3JfZWFjaF9lbnRyeShibywgJmdsb2ItPnN3YXBfbHJ1W2ldLCBzd2FwKSB7Cj4gLQkJCWlmICh0 dG1fYm9fZXZpY3Rfc3dhcG91dF9hbGxvd2FibGUoYm8sIGN0eCwgJmxvY2tlZCkpIHsKPiArCQkJ aWYgKHR0bV9ib19ldmljdF9zd2Fwb3V0X2FsbG93YWJsZShibywgY3R4LCAmbG9ja2VkLAo+ICsJ CQkJCQkJICAgTlVMTCkpIHsKPiAgIAkJCQlyZXQgPSAwOwo+ICAgCQkJCWJyZWFrOwo+ICAgCQkJ fQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KZHJpLWRl dmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vZHJpLWRldmVs