From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 02/11] drm/ttm: fix busy memory to fail other user v8 Date: Wed, 15 May 2019 11:28:23 +0200 Message-ID: <03b76cd0-8711-c556-2732-ae21ad1589aa@gmail.com> References: <20190514123127.1650-1-christian.koenig@amd.com> <20190514123127.1650-2-christian.koenig@amd.com> <20190515083828.GB17751@phenom.ffwll.local> <20190515084551.GD17751@phenom.ffwll.local> <6f862969-3937-df25-949f-9740a90dd457@gmail.com> Reply-To: christian.koenig-5C7GfCeVMHo@public.gmane.org Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <6f862969-3937-df25-949f-9740a90dd457-Re5JQEeQqe8AvxtiuMwx3w@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: Daniel Vetter Cc: David1.Zhou-5C7GfCeVMHo@public.gmane.org, Marek.Olsak-5C7GfCeVMHo@public.gmane.org, amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org, Prike.Liang-5C7GfCeVMHo@public.gmane.org, dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org QW0gMTUuMDUuMTkgdW0gMTE6Mjcgc2NocmllYiBDaHJpc3RpYW4gS8O2bmlnOgo+IEFtIDE1LjA1 LjE5IHVtIDEwOjQ1IHNjaHJpZWIgRGFuaWVsIFZldHRlcjoKPj4gT24gV2VkLCBNYXkgMTUsIDIw MTkgYXQgMTA6Mzg6MjhBTSArMDIwMCwgRGFuaWVsIFZldHRlciB3cm90ZToKPj4+IE9uIFR1ZSwg TWF5IDE0LCAyMDE5IGF0IDAyOjMxOjE4UE0gKzAyMDAsIENocmlzdGlhbiBLw7ZuaWcgd3JvdGU6 Cj4+Pj4gRnJvbTogQ2h1bm1pbmcgWmhvdSA8ZGF2aWQxLnpob3VAYW1kLmNvbT4KPj4+Pgo+Pj4+ IGhlYXZ5IGdwdSBqb2IgY291bGQgb2NjdXB5IG1lbW9yeSBsb25nIHRpbWUsIHdoaWNoIGxlYWQg b3RoZXIgdXNlciAKPj4+PiBmYWlsIHRvIGdldCBtZW1vcnkuCj4+Pj4KPj4+PiBiYXNpY2FsbHkg cGljayB1cCBDaHJpc3RpYW4gaWRlYToKPj4+Pgo+Pj4+IDEuIFJlc2VydmUgdGhlIEJPIGluIERD IHVzaW5nIGEgd3dfbXV0ZXggdGlja2V0ICh0cml2aWFsKS4KPj4+PiAyLiBJZiB3ZSB0aGVuIHJ1 biBpbnRvIHRoaXMgRUJVU1kgY29uZGl0aW9uIGluIFRUTSBjaGVjayBpZiB0aGUgQk8gCj4+Pj4g d2UgbmVlZCBtZW1vcnkgZm9yIChvciByYXRoZXIgdGhlIHd3X211dGV4IG9mIGl0cyByZXNlcnZh dGlvbiAKPj4+PiBvYmplY3QpIGhhcyBhIHRpY2tldCBhc3NpZ25lZC4KPj4+PiAzLiBJZiB3ZSBo YXZlIGEgdGlja2V0IHdlIGdyYWIgYSByZWZlcmVuY2UgdG8gdGhlIGZpcnN0IEJPIG9uIHRoZSAK Pj4+PiBMUlUsIGRyb3AgdGhlIExSVSBsb2NrIGFuZCB0cnkgdG8gZ3JhYiB0aGUgcmVzZXJ2YXRp b24gbG9jayB3aXRoIAo+Pj4+IHRoZSB0aWNrZXQuCj4+Pj4gNC4gSWYgZ2V0dGluZyB0aGUgcmVz ZXJ2YXRpb24gbG9jayB3aXRoIHRoZSB0aWNrZXQgc3VjY2VlZGVkIHdlIAo+Pj4+IGNoZWNrIGlm IHRoZSBCTyBpcyBzdGlsbCB0aGUgZmlyc3Qgb25lIG9uIHRoZSBMUlUgaW4gcXVlc3Rpb24gKHRo ZSAKPj4+PiBCTyBjb3VsZCBoYXZlIG1vdmVkKS4KPj4+PiA1LiBJZiB0aGUgQk8gaXMgc3RpbGwg dGhlIGZpcnN0IG9uZSBvbiB0aGUgTFJVIGluIHF1ZXN0aW9uIHdlIHRyeSAKPj4+PiB0byBldmlj dCBpdCBhcyB3ZSB3b3VsZCBldmljdCBhbnkgb3RoZXIgQk8uCj4+Pj4gNi4gSWYgYW55IG9mIHRo ZSAiSWYncyIgYWJvdmUgZmFpbCB3ZSBqdXN0IGJhY2sgb2ZmIGFuZCByZXR1cm4gLUVCVVNZLgo+ Pj4+Cj4+Pj4gdjI6IGZpeCBzb21lIG1pbm9yIGNoZWNrCj4+Pj4gdjM6IGFkZHJlc3MgQ2hyaXN0 aWFuIHYyIGNvbW1lbnRzLgo+Pj4+IHY0OiBmaXggc29tZSBtaXNzaW5nCj4+Pj4gdjU6IGhhbmRs ZSBmaXJzdF9ibyB1bmxvY2sgYW5kIGJvX2dldC9wdXQKPj4+PiB2NjogYWJzdHJhY3QgdW5pZmll ZCBpdGVyYXRlIGZ1bmN0aW9uLCBhbmQgaGFuZGxlIGFsbCBwb3NzaWJsZSAKPj4+PiB1c2VjYXNl IG5vdCBvbmx5IHBpbm5lZCBiby4KPj4+PiB2NzogcGFzcyByZXF1ZXN0IGJvLT5yZXN2IHRvIHR0 bV9ib19ldmljdF9maXJzdAo+Pj4+IHY4IChjaGspOiBtaW5pbWFsIGNvZGluZyBzdHlsZSBmaXgK Pj4+Pgo+Pj4+IENoYW5nZS1JZDogSTIxNDIzZmI5MjJmODg1NDY1ZjEzODMzYzQxZGYxZTEzNDM2 NGE4ZTcKPj4+PiBTaWduZWQtb2ZmLWJ5OiBDaHVubWluZyBaaG91IDxkYXZpZDEuemhvdUBhbWQu Y29tPgo+Pj4+IFJldmlld2VkLWJ5OiBDaHJpc3RpYW4gS8O2bmlnIDxjaHJpc3RpYW4ua29lbmln QGFtZC5jb20+Cj4+PiBJIHRoaW5rIHRoaXMgY2xvc2VzIGEgYmlnIGdhcCBiZXR3ZWVuIHR0bSBh bmQgdGhlIGJrbC9zdHJ1Y3RfbXV0ZXgKPj4+IGRyaXZlcnMgLSBpdCdzIG11Y2ggZWFzaWVyIHRv IGd1YXJhbnRlZSB5b3UgY2FuIGV2aWN0IGV2ZXJ5dGhpbmcgaWYKPj4+IHRoZXJlJ3Mgb25seSBh IHNpbmdsZSBsb2NrIDotKQo+Pj4KPj4+IFdvdWxkIGJlIGFic29sdXRlbHkgYXdlc29tZSBpZiB3 ZSBjb3VsZCBleHRyYWN0IHRoaXMgYXMgc29tZSBraW5kIG9mCj4+PiBidWlsZGluZyBibG9jaywg bGlrZSB3ZSd2ZSBkb25lIHdpdGggbG90cyBvZiBvdGhlciB0dG0gY29uY2VwdHMgYWxyZWFkeQo+ Pj4gKHJlc2VydmF0aW9uX29iaiwgZmVuY2VzLCAuLi4pLgo+Pj4KPj4+IEp1c3QgYW4gYXNpZGUg cmVhbGx5Lgo+PiBPZmMgdGhpcyBpcyBtZWFudCBhcyBhIGNvbW1lbnQgb24gdGhlIGVudGlyZSBw YXRjaCBzZXJpZXMsIHdpdGhvdXQgCj4+IGFsbCB0aGUKPj4gb3RoZXIgcGF0Y2hlcyB0byBtYWtl IHN1cmUgQk8gYWx3YXlzIHN0YXkgb24gYSByZWxldmFudCBMUlUgdGhlcmUncyAKPj4gc3RpbGwK Pj4gZ2FwcyBpbiB0aGUgZ3VhcmFudGVlZCBmb3J3YXJkIHByb2dyZXNzIGV2aWN0aW9uIGFsZ29y aXRobS4KPgo+IFllYWgsIHRoZSBwcm9ibGVtIHN1cmZhY2VkIGJlY2F1c2Ugb2YgcGF0Y2ggIzQu IFByZXZpb3VzbHkgVFRNIHdvdWxkIAo+IGhhdmUganVzdCBpZ25vcmVkIGFsbCBlcnJvcnMgYW5k IGNvbnRpbnVlZCB0byB0cnkgZGlmZmVyZW50IHBsYWNlbWVudHMgCj4gYW5kIG9ubHkgcmV0dXJu IC1FTk9NRU0gd2hlbiB3ZSByYW4gb3V0IG9mIGEgcG9zc2libGUgcGxhY2VtZW50cy4KPgo+IEkg cHJvYmFibHkgbmVlZCB0byBlaXRoZXIgZml4IHBhdGNoICM0IG9yIHJlb3JkZXIgdGhlIHBhdGNo ZXMuCgpVcHMsIHBsZWFzZSBpZ25vcmUuIEkgYWNjaWRlbnRhbGx5IHJlcGxpZWQgdG8gdGhlIHdy b25nIG1haWwuCgpDaHJpc3RpYW4uCgo+Cj4gVGhhbmtzIGZvciB0aGUgbm90ZSwKPiBDaHJpc3Rp YW4uCj4KPj4gLURhbmllbAo+Pgo+Pj4gLURhbmllbAo+Pj4KPj4+PiAtLS0KPj4+PiDCoCBkcml2 ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jIHwgMTEzIAo+Pj4+ICsrKysrKysrKysrKysrKysrKysr KysrKysrKysrLS0tLS0tCj4+Pj4gwqAgMSBmaWxlIGNoYW5nZWQsIDk2IGluc2VydGlvbnMoKyks IDE3IGRlbGV0aW9ucygtKQo+Pj4+Cj4+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90 dG0vdHRtX2JvLmMgCj4+Pj4gYi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCj4+Pj4gaW5k ZXggMjg0NWZjZWIyZmJkLi5lNjM0ZDNhMzY5MjMgMTAwNjQ0Cj4+Pj4gLS0tIGEvZHJpdmVycy9n cHUvZHJtL3R0bS90dG1fYm8uYwo+Pj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2Jv LmMKPj4+PiBAQCAtNzY2LDExICs3NjYsMTMgQEAgRVhQT1JUX1NZTUJPTCh0dG1fYm9fZXZpY3Rp b25fdmFsdWFibGUpOwo+Pj4+IMKgwqAgKiBiLiBPdGhlcndpc2UsIHRyeWxvY2sgaXQuCj4+Pj4g wqDCoCAqLwo+Pj4+IMKgIHN0YXRpYyBib29sIHR0bV9ib19ldmljdF9zd2Fwb3V0X2FsbG93YWJs ZShzdHJ1Y3QgCj4+Pj4gdHRtX2J1ZmZlcl9vYmplY3QgKmJvLAo+Pj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCAqY3R4LCBib29sICpsb2NrZWQpCj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IHR0bV9vcGVyYXRpb25fY3R4ICpjdHgs IGJvb2wgKmxvY2tlZCwgYm9vbCAqYnVzeSkKPj4+PiDCoCB7Cj4+Pj4gwqDCoMKgwqDCoCBib29s IHJldCA9IGZhbHNlOwo+Pj4+IMKgIMKgwqDCoMKgwqAgKmxvY2tlZCA9IGZhbHNlOwo+Pj4+ICvC oMKgwqAgaWYgKGJ1c3kpCj4+Pj4gK8KgwqDCoMKgwqDCoMKgICpidXN5ID0gZmFsc2U7Cj4+Pj4g wqDCoMKgwqDCoCBpZiAoYm8tPnJlc3YgPT0gY3R4LT5yZXN2KSB7Cj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIHJlc2VydmF0aW9uX29iamVjdF9hc3NlcnRfaGVsZChiby0+cmVzdik7Cj4+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIGlmIChjdHgtPmZsYWdzICYgVFRNX09QVF9GTEFHX0FMTE9XX1JFU19F VklDVAo+Pj4+IEBAIC03NzksMzUgKzc4MSw0NiBAQCBzdGF0aWMgYm9vbCAKPj4+PiB0dG1fYm9f ZXZpY3Rfc3dhcG91dF9hbGxvd2FibGUoc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywKPj4+ PiDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICpsb2NrZWQgPSBy ZXNlcnZhdGlvbl9vYmplY3RfdHJ5bG9jayhiby0+cmVzdik7Cj4+Pj4gwqDCoMKgwqDCoMKgwqDC oMKgIHJldCA9ICpsb2NrZWQ7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghcmV0ICYmIGJ1c3kp Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmJ1c3kgPSB0cnVlOwo+Pj4+IMKgwqDCoMKg wqAgfQo+Pj4+IMKgIMKgwqDCoMKgwqAgcmV0dXJuIHJldDsKPj4+PiDCoCB9Cj4+Pj4gwqAgLXN0 YXRpYyBpbnQgdHRtX21lbV9ldmljdF9maXJzdChzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwK Pj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHVpbnQzMl90IG1lbV90 eXBlLAo+Pj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29uc3Qgc3Ry dWN0IHR0bV9wbGFjZSAqcGxhY2UsCj4+Pj4gLcKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggKmN0eCkKPj4+PiArc3RhdGljIHN0cnVj dCB0dG1fYnVmZmVyX29iamVjdCoKPj4+PiArdHRtX21lbV9maW5kX2V2aXRhYmxlX2JvKHN0cnVj dCB0dG1fYm9fZGV2aWNlICpiZGV2LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjb25zdCBzdHJ1Y3QgdHRtX3BsYWNlICpwbGFjZSwKPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCAqY3R4LAo+Pj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICoqZmlyc3RfYm8sCj4+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29sICpsb2NrZWQpCj4+Pj4gwqAgewo+Pj4+IC3C oMKgwqAgc3RydWN0IHR0bV9ib19nbG9iYWwgKmdsb2IgPSBiZGV2LT5nbG9iOwo+Pj4+IC3CoMKg wqAgc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4gPSAmYmRldi0+bWFuW21lbV90eXBl XTsKPj4+PiDCoMKgwqDCoMKgIHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8gPSBOVUxMOwo+ Pj4+IC3CoMKgwqAgYm9vbCBsb2NrZWQgPSBmYWxzZTsKPj4+PiAtwqDCoMKgIHVuc2lnbmVkIGk7 Cj4+Pj4gLcKgwqDCoCBpbnQgcmV0Owo+Pj4+ICvCoMKgwqAgaW50IGk7Cj4+Pj4gwqAgLcKgwqDC oCBzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsKPj4+PiArwqDCoMKgIGlmIChmaXJzdF9ibykK Pj4+PiArwqDCoMKgwqDCoMKgwqAgKmZpcnN0X2JvID0gTlVMTDsKPj4+PiDCoMKgwqDCoMKgIGZv ciAoaSA9IDA7IGkgPCBUVE1fTUFYX0JPX1BSSU9SSVRZOyArK2kpIHsKPj4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeShibywgJm1hbi0+bHJ1W2ldLCBscnUpIHsKPj4+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIXR0bV9ib19ldmljdF9zd2Fwb3V0X2FsbG93 YWJsZShibywgY3R4LCAmbG9ja2VkKSkKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBib29s IGJ1c3kgPSBmYWxzZTsKPj4+PiArCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCF0 dG1fYm9fZXZpY3Rfc3dhcG91dF9hbGxvd2FibGUoYm8sIGN0eCwgbG9ja2VkLAo+Pj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCAmYnVzeSkpIHsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChmaXJz dF9ibyAmJiAhKCpmaXJzdF9ibykgJiYgYnVzeSkgewo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB0dG1fYm9fZ2V0KGJvKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmZpcnN0X2JvID0gYm87Cj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoCBjb250aW51ZTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gwqAgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHBsYWNlICYmICFiZGV2LT5kcml2ZXItPmV2aWN0 aW9uX3ZhbHVhYmxlKGJvLAo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbGFjZSkpIHsKPj4+ PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChsb2NrZWQpCj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoKmxvY2tlZCkKPj4+PiByZXNlcnZhdGlvbl9v YmplY3RfdW5sb2NrKGJvLT5yZXN2KTsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIGNvbnRpbnVlOwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+PiAr Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIH0KPj4+PiDCoCBAQCAtODE4LDkgKzgzMSw2OSBAQCBzdGF0aWMgaW50IHR0bV9tZW1f ZXZpY3RfZmlyc3Qoc3RydWN0IAo+Pj4+IHR0bV9ib19kZXZpY2UgKmJkZXYsCj4+Pj4gwqDCoMKg wqDCoMKgwqDCoMKgIGJvID0gTlVMTDsKPj4+PiDCoMKgwqDCoMKgIH0KPj4+PiDCoCArwqDCoMKg IHJldHVybiBibzsKPj4+PiArfQo+Pj4+ICsKPj4+PiArc3RhdGljIGludCB0dG1fbWVtX2V2aWN0 X2ZpcnN0KHN0cnVjdCB0dG1fYm9fZGV2aWNlICpiZGV2LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqAgdWludDMyX3QgbWVtX3R5cGUsCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb25zdCBzdHJ1Y3QgdHRtX3BsYWNlICpwbGFjZSwK Pj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB0dG1fb3Bl cmF0aW9uX2N0eCAqY3R4LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgc3RydWN0IHJlc2VydmF0aW9uX29iamVjdCAqcmVxdWVzdF9yZXN2KQo+Pj4+ICt7Cj4+Pj4g K8KgwqDCoCBzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGJkZXYtPmdsb2I7Cj4+Pj4gK8Kg wqDCoCBzdHJ1Y3QgdHRtX21lbV90eXBlX21hbmFnZXIgKm1hbiA9ICZiZGV2LT5tYW5bbWVtX3R5 cGVdOwo+Pj4+ICvCoMKgwqAgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyA9IE5VTEwsICpm aXJzdF9ibyA9IE5VTEw7Cj4+Pj4gK8KgwqDCoCBib29sIGxvY2tlZCA9IGZhbHNlOwo+Pj4+ICvC oMKgwqAgaW50IHJldDsKPj4+PiArCj4+Pj4gK8KgwqDCoCBzcGluX2xvY2soJmdsb2ItPmxydV9s b2NrKTsKPj4+PiArwqDCoMKgIGJvID0gdHRtX21lbV9maW5kX2V2aXRhYmxlX2JvKGJkZXYsIG1h biwgcGxhY2UsIGN0eCwgJmZpcnN0X2JvLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgJmxvY2tlZCk7Cj4+Pj4gwqDCoMKgwqDCoCBpZiAoIWJvKSB7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgIHN0cnVjdCB3d19hY3F1aXJlX2N0eCAqYWNxdWlyZV9jdHggPSBy ZXF1ZXN0X3Jlc3YtPmxvY2suY3R4Owo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgdHRtX29w ZXJhdGlvbl9jdHggYnVzeV9jdHg7Cj4+Pj4gKwo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBzcGlu X3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOwo+Pj4+IC3CoMKgwqDCoMKgwqDCoCByZXR1cm4gLUVC VVNZOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBjaGVjayBpZiBvdGhlciB1c2VyIG9jY3VweSBt ZW1vcnkgdG9vIGxvbmcgdGltZSAqLwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIWZpcnN0X2Jv IHx8ICFyZXF1ZXN0X3Jlc3YgfHwgIXJlcXVlc3RfcmVzdi0+bG9jay5jdHgpIHsKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZmlyc3RfYm8pCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCB0dG1fYm9fcHV0KGZpcnN0X2JvKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXR1cm4gLUVCVVNZOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gK8KgwqDC oMKgwqDCoMKgIGlmIChmaXJzdF9iby0+cmVzdiA9PSByZXF1ZXN0X3Jlc3YpIHsKPj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCB0dG1fYm9fcHV0KGZpcnN0X2JvKTsKPj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCByZXR1cm4gLUVCVVNZOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4g K8KgwqDCoMKgwqDCoMKgIGlmIChjdHgtPmludGVycnVwdGlibGUpCj4+Pj4gK8KgwqDCoMKgwqDC oMKgwqDCoMKgwqAgcmV0ID0gd3dfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmaXJzdF9iby0+ cmVzdi0+bG9jaywKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBhY3F1aXJlX2N0eCk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGVs c2UKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSB3d19tdXRleF9sb2NrKCZmaXJz dF9iby0+cmVzdi0+bG9jaywKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBhY3F1aXJlX2N0eCk7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQp IHsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0dG1fYm9fcHV0KGZpcnN0X2JvKTsKPj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4+ICvCoMKgwqDCoMKgwqDC oCB9Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwo+Pj4+ ICvCoMKgwqDCoMKgwqDCoCAvKiBwcmV2aW91cyBidXN5IHJlc3YgbG9jayBpcyBoZWxkIGJ5IGFi b3ZlLCBpZGxlIG5vdywKPj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqIHNvIGxldCB0aGVtIGV2aWN0 YWJsZS4KPj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBidXN5 X2N0eC5pbnRlcnJ1cHRpYmxlID0gY3R4LT5pbnRlcnJ1cHRpYmxlOwo+Pj4+ICvCoMKgwqDCoMKg wqDCoCBidXN5X2N0eC5ub193YWl0X2dwdcKgwqAgPSBjdHgtPm5vX3dhaXRfZ3B1Owo+Pj4+ICvC oMKgwqDCoMKgwqDCoCBidXN5X2N0eC5yZXN2wqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBmaXJzdF9i by0+cmVzdjsKPj4+PiArwqDCoMKgwqDCoMKgwqAgYnVzeV9jdHguZmxhZ3PCoMKgwqDCoMKgwqDC oMKgwqDCoCA9IFRUTV9PUFRfRkxBR19BTExPV19SRVNfRVZJQ1Q7Cj4+Pj4gKwo+Pj4+ICvCoMKg wqDCoMKgwqDCoCBibyA9IHR0bV9tZW1fZmluZF9ldml0YWJsZV9ibyhiZGV2LCBtYW4sIHBsYWNl LCAmYnVzeV9jdHgsIAo+Pj4+IE5VTEwsCj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZsb2NrZWQpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBp ZiAoYm8gJiYgKGJvLT5yZXN2ID09IGZpcnN0X2JvLT5yZXN2KSkKPj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBsb2NrZWQgPSB0cnVlOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBlbHNlIGlmIChi bykKPj4+PiArIHd3X211dGV4X3VubG9jaygmZmlyc3RfYm8tPnJlc3YtPmxvY2spOwo+Pj4+ICvC oMKgwqDCoMKgwqDCoCBpZiAoIWJvKSB7Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Bp bl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0 dG1fYm9fcHV0KGZpcnN0X2JvKTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4g LUVCVVNZOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+Pj4gwqDCoMKgwqDCoCB9Cj4+Pj4gwqAg wqDCoMKgwqDCoCBrcmVmX2dldCgmYm8tPmxpc3Rfa3JlZik7Cj4+Pj4gQEAgLTgyOSwxMSArOTAy LDE1IEBAIHN0YXRpYyBpbnQgdHRtX21lbV9ldmljdF9maXJzdChzdHJ1Y3QgCj4+Pj4gdHRtX2Jv X2RldmljZSAqYmRldiwKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0ID0gdHRtX2JvX2NsZWFu dXBfcmVmcyhibywgY3R4LT5pbnRlcnJ1cHRpYmxlLAo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY3R4LT5ub193YWl0X2dwdSwgbG9ja2VkKTsKPj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAga3JlZl9wdXQoJmJvLT5saXN0X2tyZWYsIHR0bV9ib19yZWxl YXNlX2xpc3QpOwo+Pj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZmlyc3RfYm8pCj4+Pj4gK8KgwqDC oMKgwqDCoMKgwqDCoMKgwqAgdHRtX2JvX3B1dChmaXJzdF9ibyk7Cj4+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiByZXQ7Cj4+Pj4gwqDCoMKgwqDCoCB9Cj4+Pj4gwqAgwqDCoMKgwqDCoCB0 dG1fYm9fZGVsX2Zyb21fbHJ1KGJvKTsKPj4+PiDCoMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZnbG9i LT5scnVfbG9jayk7Cj4+Pj4gK8KgwqDCoCBpZiAoZmlyc3RfYm8pCj4+Pj4gK8KgwqDCoMKgwqDC oMKgIHR0bV9ib19wdXQoZmlyc3RfYm8pOwo+Pj4+IMKgIMKgwqDCoMKgwqAgcmV0ID0gdHRtX2Jv X2V2aWN0KGJvLCBjdHgpOwo+Pj4+IMKgwqDCoMKgwqAgaWYgKGxvY2tlZCkgewo+Pj4+IEBAIC05 MDcsNyArOTg0LDcgQEAgc3RhdGljIGludCB0dG1fYm9fbWVtX2ZvcmNlX3NwYWNlKHN0cnVjdCAK Pj4+PiB0dG1fYnVmZmVyX29iamVjdCAqYm8sCj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgcmV0dXJuIHJldDsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKG1lbS0+bW1fbm9kZSkK Pj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+PiAtwqDCoMKgwqDCoMKg wqAgcmV0ID0gdHRtX21lbV9ldmljdF9maXJzdChiZGV2LCBtZW1fdHlwZSwgcGxhY2UsIGN0eCk7 Cj4+Pj4gK8KgwqDCoMKgwqDCoMKgIHJldCA9IHR0bV9tZW1fZXZpY3RfZmlyc3QoYmRldiwgbWVt X3R5cGUsIHBsYWNlLCBjdHgsIAo+Pj4+IGJvLT5yZXN2KTsKPj4+PiDCoMKgwqDCoMKgwqDCoMKg wqAgaWYgKHVubGlrZWx5KHJldCAhPSAwKSkKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCByZXR1cm4gcmV0Owo+Pj4+IMKgwqDCoMKgwqAgfSB3aGlsZSAoMSk7Cj4+Pj4gQEAgLTE0MDEs NyArMTQ3OCw4IEBAIHN0YXRpYyBpbnQgdHRtX2JvX2ZvcmNlX2xpc3RfY2xlYW4oc3RydWN0IAo+ Pj4+IHR0bV9ib19kZXZpY2UgKmJkZXYsCj4+Pj4gwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwg VFRNX01BWF9CT19QUklPUklUWTsgKytpKSB7Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHdoaWxl ICghbGlzdF9lbXB0eSgmbWFuLT5scnVbaV0pKSB7Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgc3Bpbl91bmxvY2soJmdsb2ItPmxydV9sb2NrKTsKPj4+PiAtwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCByZXQgPSB0dG1fbWVtX2V2aWN0X2ZpcnN0KGJkZXYsIG1lbV90eXBlLCBOVUxMLCAm Y3R4KTsKPj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSB0dG1fbWVtX2V2aWN0X2Zp cnN0KGJkZXYsIG1lbV90eXBlLCBOVUxMLCAmY3R4LAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBOVUxMKTsKPj4+PiDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCBpZiAocmV0KQo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgcmV0dXJuIHJldDsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzcGluX2xv Y2soJmdsb2ItPmxydV9sb2NrKTsKPj4+PiBAQCAtMTc3Miw3ICsxODUwLDggQEAgaW50IHR0bV9i b19zd2Fwb3V0KHN0cnVjdCB0dG1fYm9fZ2xvYmFsIAo+Pj4+ICpnbG9iLCBzdHJ1Y3QgdHRtX29w ZXJhdGlvbl9jdHggKmN0eCkKPj4+PiDCoMKgwqDCoMKgIHNwaW5fbG9jaygmZ2xvYi0+bHJ1X2xv Y2spOwo+Pj4+IMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IFRUTV9NQVhfQk9fUFJJT1JJVFk7 ICsraSkgewo+Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5KGJvLCAm Z2xvYi0+c3dhcF9scnVbaV0sIHN3YXApIHsKPj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBp ZiAodHRtX2JvX2V2aWN0X3N3YXBvdXRfYWxsb3dhYmxlKGJvLCBjdHgsICZsb2NrZWQpKSB7Cj4+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHR0bV9ib19ldmljdF9zd2Fwb3V0X2FsbG93 YWJsZShibywgY3R4LCAmbG9ja2VkLAo+Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTlVMTCkpIHsKPj4+PiDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IDA7Cj4+Pj4gwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCBicmVhazsKPj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9 Cj4+Pj4gLS0gCj4+Pj4gMi4xNy4xCj4+Pj4KPj4+PiBfX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fXwo+Pj4+IGRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKPj4+PiBk cmktZGV2ZWxAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4+Pj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9kcmktZGV2ZWwKPj4+IC0tIAo+Pj4gRGFuaWVsIFZl dHRlcgo+Pj4gU29mdHdhcmUgRW5naW5lZXIsIEludGVsIENvcnBvcmF0aW9uCj4+PiBodHRwOi8v YmxvZy5mZndsbC5jaAo+CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fXwphbWQtZ2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y ZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZng=