From mboxrd@z Thu Jan 1 00:00:00 1970 From: zhoucm1 Subject: Re: [PATCH] drm/ttm: fix busy memory to fail other user v5 Date: Tue, 7 May 2019 17:38:21 +0800 Message-ID: <68a744b0-b171-0e8b-781e-d0ff8bdb1180@amd.com> References: <20190430070151.16674-1-david1.zhou@amd.com> <6f501d5f-1ac1-42e9-88af-c699d6fe44fe@gmail.com> <3ea80c26-d500-2ccf-440c-bdec05bca68b@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from NAM05-CO1-obe.outbound.protection.outlook.com (mail-eopbgr720071.outbound.protection.outlook.com [40.107.72.71]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8824B89F97 for ; Tue, 7 May 2019 09:38:32 +0000 (UTC) In-Reply-To: <3ea80c26-d500-2ccf-440c-bdec05bca68b@gmail.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: christian.koenig@amd.com, Chunming Zhou , Prike.Liang@amd.com, dri-devel@lists.freedesktop.org List-Id: dri-devel@lists.freedesktop.org CgpPbiAyMDE55bm0MDXmnIgwN+aXpSAxNzowMywgQ2hyaXN0aWFuIEvDtm5pZyB3cm90ZToKPiBb Q0FVVElPTjogRXh0ZXJuYWwgRW1haWxdCj4KPiBQaW5nIQppbiBmYWN0LCBhbHJlYWR5IGFkZHJl c3MgeW91ciBjb21tZW50cywganVzdCB3YWl0IGZvciBQcmlrZSB0ZXN0IHJlc3VsdCwgCmFueXdh eSwgc2VuZCB2NiBmaXJzdC4KCi1EYXZpZAo+Cj4gTWFyZWsgaXMgZ29pbmcgdG8gbmVlZCB0aGlz IGZvciBpdHMgR0RTIHBhdGNoZXMgYXMgd2VsbC4KPgo+IENocmlzdGluYS4KPgo+IEFtIDMwLjA0 LjE5IHVtIDExOjEwIHNjaHJpZWIgQ2hyaXN0aWFuIEvDtm5pZzoKPj4gQW0gMzAuMDQuMTkgdW0g MDk6MDEgc2NocmllYiBDaHVubWluZyBaaG91Ogo+Pj4gaGVhdnkgZ3B1IGpvYiBjb3VsZCBvY2N1 cHkgbWVtb3J5IGxvbmcgdGltZSwgd2hpY2ggbGVhZCBvdGhlciB1c2VyCj4+PiBmYWlsIHRvIGdl dCBtZW1vcnkuCj4+Pgo+Pj4gYmFzaWNhbGx5IHBpY2sgdXAgQ2hyaXN0aWFuIGlkZWE6Cj4+Pgo+ Pj4gMS4gUmVzZXJ2ZSB0aGUgQk8gaW4gREMgdXNpbmcgYSB3d19tdXRleCB0aWNrZXQgKHRyaXZp YWwpLgo+Pj4gMi4gSWYgd2UgdGhlbiBydW4gaW50byB0aGlzIEVCVVNZIGNvbmRpdGlvbiBpbiBU VE0gY2hlY2sgaWYgdGhlIEJPIHdlCj4+PiBuZWVkIG1lbW9yeSBmb3IgKG9yIHJhdGhlciB0aGUg d3dfbXV0ZXggb2YgaXRzIHJlc2VydmF0aW9uIG9iamVjdCkKPj4+IGhhcyBhIHRpY2tldCBhc3Np Z25lZC4KPj4+IDMuIElmIHdlIGhhdmUgYSB0aWNrZXQgd2UgZ3JhYiBhIHJlZmVyZW5jZSB0byB0 aGUgZmlyc3QgQk8gb24gdGhlCj4+PiBMUlUsIGRyb3AgdGhlIExSVSBsb2NrIGFuZCB0cnkgdG8g Z3JhYiB0aGUgcmVzZXJ2YXRpb24gbG9jayB3aXRoIHRoZQo+Pj4gdGlja2V0Lgo+Pj4gNC4gSWYg Z2V0dGluZyB0aGUgcmVzZXJ2YXRpb24gbG9jayB3aXRoIHRoZSB0aWNrZXQgc3VjY2VlZGVkIHdl IGNoZWNrCj4+PiBpZiB0aGUgQk8gaXMgc3RpbGwgdGhlIGZpcnN0IG9uZSBvbiB0aGUgTFJVIGlu IHF1ZXN0aW9uICh0aGUgQk8gY291bGQKPj4+IGhhdmUgbW92ZWQpLgo+Pj4gNS4gSWYgdGhlIEJP IGlzIHN0aWxsIHRoZSBmaXJzdCBvbmUgb24gdGhlIExSVSBpbiBxdWVzdGlvbiB3ZSB0cnkgdG8K Pj4+IGV2aWN0IGl0IGFzIHdlIHdvdWxkIGV2aWN0IGFueSBvdGhlciBCTy4KPj4+IDYuIElmIGFu eSBvZiB0aGUgIklmJ3MiIGFib3ZlIGZhaWwgd2UganVzdCBiYWNrIG9mZiBhbmQgcmV0dXJuIC1F QlVTWS4KPj4+Cj4+PiB2MjogZml4IHNvbWUgbWlub3IgY2hlY2sKPj4+IHYzOiBhZGRyZXNzIENo cmlzdGlhbiB2MiBjb21tZW50cy4KPj4+IHY0OiBmaXggc29tZSBtaXNzaW5nCj4+PiB2NTogaGFu ZGxlIGZpcnN0X2JvIHVubG9jayBhbmQgYm9fZ2V0L3B1dAo+Pj4KPj4+IENoYW5nZS1JZDogSTIx NDIzZmI5MjJmODg1NDY1ZjEzODMzYzQxZGYxZTEzNDM2NGE4ZTcKPj4+IFNpZ25lZC1vZmYtYnk6 IENodW5taW5nIFpob3UgPGRhdmlkMS56aG91QGFtZC5jb20+Cj4+PiAtLS0KPj4+IMKgIGRyaXZl cnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuY8KgwqDCoCB8wqAgNyArLQo+Pj4g wqAgLi4uL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2RtL2FtZGdwdV9kbS5jIHwgMjIgKysr LS0KPj4+IMKgIGRyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmPCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIHwgODEgCj4+PiArKysrKysrKysrKysrKysrKy0tCj4+PiDCoCAzIGZp bGVzIGNoYW5nZWQsIDk5IGluc2VydGlvbnMoKyksIDExIGRlbGV0aW9ucygtKQo+Pj4KPj4+IGRp ZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfb2JqZWN0LmMKPj4+ IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jCj4+PiBpbmRleCBh ZmZkZTcyYjQ0ZGIuLjUyMzc3M2U4NTI4NCAxMDA2NDQKPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9vYmplY3QuYwo+Pj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X29iamVjdC5jCj4+PiBAQCAtODExLDcgKzgxMSwxMiBAQCBpbnQgYW1k Z3B1X2JvX3Bpbl9yZXN0cmljdGVkKHN0cnVjdCBhbWRncHVfYm8KPj4+ICpibywgdTMyIGRvbWFp biwKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB1NjQgbWluX29mZnNl dCwgdTY0IG1heF9vZmZzZXQpCj4+PiDCoCB7Cj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBhbWRncHVf ZGV2aWNlICphZGV2ID0gYW1kZ3B1X3R0bV9hZGV2KGJvLT50Ym8uYmRldik7Cj4+PiAtwqDCoMKg IHN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCBjdHggPSB7IGZhbHNlLCBmYWxzZSB9Owo+Pj4gK8Kg wqDCoCBzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggY3R4ID0gewo+Pj4gK8KgwqDCoMKgwqDCoMKg IC5pbnRlcnJ1cHRpYmxlID0gZmFsc2UsCj4+PiArwqDCoMKgwqDCoMKgwqAgLm5vX3dhaXRfZ3B1 ID0gZmFsc2UsCj4+PiArwqDCoMKgwqDCoMKgwqAgLnJlc3YgPSBiby0+dGJvLnJlc3YsCj4+PiAr wqDCoMKgwqDCoMKgwqAgLmZsYWdzID0gMAo+Pj4gK8KgwqDCoCB9Owo+Pj4gwqDCoMKgwqDCoCBp bnQgciwgaTsKPj4+IMKgwqDCoMKgwqDCoMKgIGlmIChhbWRncHVfdHRtX3R0X2dldF91c2VybW0o Ym8tPnRiby50dG0pKQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvZGlzcGxh eS9hbWRncHVfZG0vYW1kZ3B1X2RtLmMKPj4+IGIvZHJpdmVycy9ncHUvZHJtL2FtZC9kaXNwbGF5 L2FtZGdwdV9kbS9hbWRncHVfZG0uYwo+Pj4gaW5kZXggYTVjYWNmODQ2ZTFiLi5jYzM2NzdjNGE0 YzIgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1X2Rt L2FtZGdwdV9kbS5jCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Rpc3BsYXkvYW1kZ3B1 X2RtL2FtZGdwdV9kbS5jCj4+PiBAQCAtNDEwMSw2ICs0MTAxLDkgQEAgc3RhdGljIGludCBkbV9w bGFuZV9oZWxwZXJfcHJlcGFyZV9mYihzdHJ1Y3QKPj4+IGRybV9wbGFuZSAqcGxhbmUsCj4+PiDC oMKgwqDCoMKgIHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2Owo+Pj4gwqDCoMKgwqDCoCBzdHJ1 Y3QgYW1kZ3B1X2JvICpyYm87Cj4+PiDCoMKgwqDCoMKgIHN0cnVjdCBkbV9wbGFuZV9zdGF0ZSAq ZG1fcGxhbmVfc3RhdGVfbmV3LCAqZG1fcGxhbmVfc3RhdGVfb2xkOwo+Pj4gK8KgwqDCoCBzdHJ1 Y3QgbGlzdF9oZWFkIGxpc3QsIGR1cGxpY2F0ZXM7Cj4+PiArwqDCoMKgIHN0cnVjdCB0dG1fdmFs aWRhdGVfYnVmZmVyIHR2Owo+Pj4gK8KgwqDCoCBzdHJ1Y3Qgd3dfYWNxdWlyZV9jdHggdGlja2V0 Owo+Pj4gwqDCoMKgwqDCoCB1aW50NjRfdCB0aWxpbmdfZmxhZ3M7Cj4+PiDCoMKgwqDCoMKgIHVp bnQzMl90IGRvbWFpbjsKPj4+IMKgwqDCoMKgwqAgaW50IHI7Cj4+PiBAQCAtNDExNyw5ICs0MTIw LDE4IEBAIHN0YXRpYyBpbnQgZG1fcGxhbmVfaGVscGVyX3ByZXBhcmVfZmIoc3RydWN0Cj4+PiBk cm1fcGxhbmUgKnBsYW5lLAo+Pj4gwqDCoMKgwqDCoCBvYmogPSBuZXdfc3RhdGUtPmZiLT5vYmpb MF07Cj4+PiDCoMKgwqDCoMKgIHJibyA9IGdlbV90b19hbWRncHVfYm8ob2JqKTsKPj4+IMKgwqDC oMKgwqAgYWRldiA9IGFtZGdwdV90dG1fYWRldihyYm8tPnRiby5iZGV2KTsKPj4+IC3CoMKgwqAg ciA9IGFtZGdwdV9ib19yZXNlcnZlKHJibywgZmFsc2UpOwo+Pj4gLcKgwqDCoCBpZiAodW5saWtl bHkociAhPSAwKSkKPj4+ICvCoMKgwqAgSU5JVF9MSVNUX0hFQUQoJmxpc3QpOwo+Pj4gK8KgwqDC oCBJTklUX0xJU1RfSEVBRCgmZHVwbGljYXRlcyk7Cj4+PiArCj4+PiArwqDCoMKgIHR2LmJvID0g JnJiby0+dGJvOwo+Pj4gK8KgwqDCoCB0di5udW1fc2hhcmVkID0gMTsKPj4+ICvCoMKgwqAgbGlz dF9hZGQoJnR2LmhlYWQsICZsaXN0KTsKPj4+ICsKPj4+ICvCoMKgwqAgciA9IHR0bV9ldV9yZXNl cnZlX2J1ZmZlcnMoJnRpY2tldCwgJmxpc3QsIGZhbHNlLCAmZHVwbGljYXRlcyk7Cj4+PiArwqDC oMKgIGlmIChyKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZGV2X2VycihhZGV2LT5kZXYsICJmYWls IHRvIHJlc2VydmUgYm8gKCVkKVxuIiwgcik7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHI7Cj4+PiArwqDCoMKgIH0KPj4+IMKgwqDCoMKgwqDCoMKgIGlmIChwbGFuZS0+dHlwZSAhPSBE Uk1fUExBTkVfVFlQRV9DVVJTT1IpCj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgZG9tYWluID0gYW1k Z3B1X2Rpc3BsYXlfc3VwcG9ydGVkX2RvbWFpbnMoYWRldik7Cj4+PiBAQCAtNDEzMCwyMSArNDE0 MiwyMSBAQCBzdGF0aWMgaW50IGRtX3BsYW5lX2hlbHBlcl9wcmVwYXJlX2ZiKHN0cnVjdAo+Pj4g ZHJtX3BsYW5lICpwbGFuZSwKPj4+IMKgwqDCoMKgwqAgaWYgKHVubGlrZWx5KHIgIT0gMCkpIHsK Pj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAociAhPSAtRVJFU1RBUlRTWVMpCj4+PiDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoIkZhaWxlZCB0byBwaW4gZnJhbWVidWZmZXIg d2l0aCBlcnJvciAlZFxuIiwgCj4+PiByKTsKPj4+IC3CoMKgwqDCoMKgwqDCoCBhbWRncHVfYm9f dW5yZXNlcnZlKHJibyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgdHRtX2V1X2JhY2tvZmZfcmVzZXJ2 YXRpb24oJnRpY2tldCwgJmxpc3QpOwo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgIHJldHVybiByOwo+ Pj4gwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgwqDCoCByID0gYW1kZ3B1X3R0bV9hbGxvY19n YXJ0KCZyYm8tPnRibyk7Cj4+PiDCoMKgwqDCoMKgIGlmICh1bmxpa2VseShyICE9IDApKSB7Cj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2JvX3VucGluKHJibyk7Cj4+PiAtwqDCoMKgwqDC oMKgwqAgYW1kZ3B1X2JvX3VucmVzZXJ2ZShyYm8pOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIHR0bV9l dV9iYWNrb2ZmX3Jlc2VydmF0aW9uKCZ0aWNrZXQsICZsaXN0KTsKPj4+IMKgwqDCoMKgwqDCoMKg wqDCoCBEUk1fRVJST1IoIiVwIGJpbmQgZmFpbGVkXG4iLCByYm8pOwo+Pj4gwqDCoMKgwqDCoMKg wqDCoMKgIHJldHVybiByOwo+Pj4gwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgwqDCoCBhbWRn cHVfYm9fZ2V0X3RpbGluZ19mbGFncyhyYm8sICZ0aWxpbmdfZmxhZ3MpOwo+Pj4gwqAgLcKgwqDC oCBhbWRncHVfYm9fdW5yZXNlcnZlKHJibyk7Cj4+PiArwqDCoMKgIHR0bV9ldV9iYWNrb2ZmX3Jl c2VydmF0aW9uKCZ0aWNrZXQsICZsaXN0KTsKPj4KPj4gV2VsbCBJIGNhbiBvbmx5IHJlcGVhdCBt eXNlbGYsIHBsZWFzZSBwdXQgdGhhdCBpbnRvIGEgc2VwYXJhdGUgcGF0Y2ghCj4+Cj4+PiDCoMKg wqDCoMKgwqDCoCBhZmItPmFkZHJlc3MgPSBhbWRncHVfYm9fZ3B1X29mZnNldChyYm8pOwo+Pj4g wqAgZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMKPj4+IGIvZHJpdmVy cy9ncHUvZHJtL3R0bS90dG1fYm8uYwo+Pj4gaW5kZXggODUwMmIzZWQyZDg4Li4yYzQ5NjNlMTA1 ZDkgMTAwNjQ0Cj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCj4+PiArKysg Yi9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jCj4+PiBAQCAtNzY2LDExICs3NjYsMTMgQEAg RVhQT1JUX1NZTUJPTCh0dG1fYm9fZXZpY3Rpb25fdmFsdWFibGUpOwo+Pj4gwqDCoCAqIGIuIE90 aGVyd2lzZSwgdHJ5bG9jayBpdC4KPj4+IMKgwqAgKi8KPj4+IMKgIHN0YXRpYyBib29sIHR0bV9i b19ldmljdF9zd2Fwb3V0X2FsbG93YWJsZShzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QKPj4+ICpi bywKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHN0cnVjdCB0dG1fb3BlcmF0aW9uX2N0eCAq Y3R4LCBib29sICpsb2NrZWQpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBzdHJ1Y3QgdHRt X29wZXJhdGlvbl9jdHggKmN0eCwgYm9vbCAqbG9ja2VkLCBib29sICpidXN5KQo+Pj4gwqAgewo+ Pj4gwqDCoMKgwqDCoCBib29sIHJldCA9IGZhbHNlOwo+Pj4gwqDCoMKgwqDCoMKgwqAgKmxvY2tl ZCA9IGZhbHNlOwo+Pj4gK8KgwqDCoCBpZiAoYnVzeSkKPj4+ICvCoMKgwqDCoMKgwqDCoCAqYnVz eSA9IGZhbHNlOwo+Pj4gwqDCoMKgwqDCoCBpZiAoYm8tPnJlc3YgPT0gY3R4LT5yZXN2KSB7Cj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqAgcmVzZXJ2YXRpb25fb2JqZWN0X2Fzc2VydF9oZWxkKGJvLT5y ZXN2KTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoY3R4LT5mbGFncyAmIFRUTV9PUFRfRkxB R19BTExPV19SRVNfRVZJQ1QKPj4+IEBAIC03NzksNiArNzgxLDggQEAgc3RhdGljIGJvb2wgdHRt X2JvX2V2aWN0X3N3YXBvdXRfYWxsb3dhYmxlKHN0cnVjdAo+Pj4gdHRtX2J1ZmZlcl9vYmplY3Qg KmJvLAo+Pj4gwqDCoMKgwqDCoCB9IGVsc2Ugewo+Pj4gwqDCoMKgwqDCoMKgwqDCoMKgICpsb2Nr ZWQgPSByZXNlcnZhdGlvbl9vYmplY3RfdHJ5bG9jayhiby0+cmVzdik7Cj4+PiDCoMKgwqDCoMKg wqDCoMKgwqAgcmV0ID0gKmxvY2tlZDsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIXJldCAmJiBi dXN5KQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgKmJ1c3kgPSB0cnVlOwo+Pj4gwqDCoMKg wqDCoCB9Cj4+PiDCoMKgwqDCoMKgwqDCoCByZXR1cm4gcmV0Owo+Pj4gQEAgLTc5MSw3ICs3OTUs NyBAQCBzdGF0aWMgaW50IHR0bV9tZW1fZXZpY3RfZmlyc3Qoc3RydWN0Cj4+PiB0dG1fYm9fZGV2 aWNlICpiZGV2LAo+Pj4gwqAgewo+Pj4gwqDCoMKgwqDCoCBzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAq Z2xvYiA9IGJkZXYtPmdsb2I7Cj4+PiDCoMKgwqDCoMKgIHN0cnVjdCB0dG1fbWVtX3R5cGVfbWFu YWdlciAqbWFuID0gJmJkZXYtPm1hblttZW1fdHlwZV07Cj4+PiAtwqDCoMKgIHN0cnVjdCB0dG1f YnVmZmVyX29iamVjdCAqYm8gPSBOVUxMOwo+Pj4gK8KgwqDCoCBzdHJ1Y3QgdHRtX2J1ZmZlcl9v YmplY3QgKmJvID0gTlVMTCwgKmZpcnN0X2JvID0gTlVMTDsKPj4+IMKgwqDCoMKgwqAgYm9vbCBs b2NrZWQgPSBmYWxzZTsKPj4+IMKgwqDCoMKgwqAgdW5zaWduZWQgaTsKPj4+IMKgwqDCoMKgwqAg aW50IHJldDsKPj4+IEBAIC03OTksOCArODAzLDE1IEBAIHN0YXRpYyBpbnQgdHRtX21lbV9ldmlj dF9maXJzdChzdHJ1Y3QKPj4+IHR0bV9ib19kZXZpY2UgKmJkZXYsCj4+PiDCoMKgwqDCoMKgIHNw aW5fbG9jaygmZ2xvYi0+bHJ1X2xvY2spOwo+Pj4gwqDCoMKgwqDCoCBmb3IgKGkgPSAwOyBpIDwg VFRNX01BWF9CT19QUklPUklUWTsgKytpKSB7Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqAgbGlzdF9m b3JfZWFjaF9lbnRyeShibywgJm1hbi0+bHJ1W2ldLCBscnUpIHsKPj4+IC3CoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGlmICghdHRtX2JvX2V2aWN0X3N3YXBvdXRfYWxsb3dhYmxlKGJvLCBjdHgsICZs b2NrZWQpKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbCBidXN5ID0gZmFsc2U7Cj4+ PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIXR0bV9ib19ldmljdF9zd2Fwb3V0X2FsbG93 YWJsZShibywgY3R4LCAmbG9ja2VkLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZidXN5KSkgewo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoIWZpcnN0X2JvICYmIGJ1c3kpIHsKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB0dG1fYm9fZ2V0KGJvKTsKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBmaXJzdF9ibyA9IGJvOwo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgfQo+ Pj4gwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChwbGFjZSAmJiAhYmRldi0+ZHJp dmVyLT5ldmljdGlvbl92YWx1YWJsZShibywKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbGFj ZSkpIHsKPj4+IEBAIC04MDgsNiArODE5LDcgQEAgc3RhdGljIGludCB0dG1fbWVtX2V2aWN0X2Zp cnN0KHN0cnVjdAo+Pj4gdHRtX2JvX2RldmljZSAqYmRldiwKPj4+IMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGJvLT5y ZXN2KTsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+ PiDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiArCj4+PiDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBicmVhazsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+PiDCoCBAQCAtODIw LDcgKzgzMiw2NSBAQCBzdGF0aWMgaW50IHR0bV9tZW1fZXZpY3RfZmlyc3Qoc3RydWN0Cj4+PiB0 dG1fYm9fZGV2aWNlICpiZGV2LAo+Pj4gwqDCoMKgwqDCoMKgwqAgaWYgKCFibykgewo+Pj4gwqDC oMKgwqDCoMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7Cj4+PiAtwqDCoMKg wqDCoMKgwqAgcmV0dXJuIC1FQlVTWTsKPj4+ICvCoMKgwqDCoMKgwqDCoCAvKiBjaGVjayBpZiBv dGhlciB1c2VyIG9jY3VweSBtZW1vcnkgdG9vIGxvbmcgdGltZSAqLwo+Pj4gK8KgwqDCoMKgwqDC oMKgIGlmICghZmlyc3RfYm8gfHwgIWN0eCB8fCAhY3R4LT5yZXN2IHx8ICFjdHgtPnJlc3YtPmxv Y2suY3R4KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAoZmlyc3RfYm8pCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHR0bV9ib19wdXQoZmlyc3RfYm8pOwo+Pj4g K8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIC1FQlVTWTsKPj4+ICvCoMKgwqDCoMKgwqDC oCB9Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGN0eC0+aW50ZXJydXB0aWJsZSkKPj4+ICvCoMKg wqDCoMKgwqDCoMKgwqDCoMKgIHJldCA9IHd3X211dGV4X2xvY2tfaW50ZXJydXB0aWJsZSgmZmly c3RfYm8tPnJlc3YtPmxvY2ssCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjdHgtPnJlc3YtPmxvY2suY3R4KTsKPj4+ICvCoMKg wqDCoMKgwqDCoCBlbHNlCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCByZXQgPSB3d19tdXRl eF9sb2NrKCZmaXJzdF9iby0+cmVzdi0+bG9jaywKPj4+IGN0eC0+cmVzdi0+bG9jay5jdHgpOwo+ Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChyZXQpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IHR0bV9ib19wdXQoZmlyc3RfYm8pOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJu IHJldDsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiArwqDCoMKgwqDCoMKgwqAgc3Bpbl9sb2Nr KCZnbG9iLT5scnVfbG9jayk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZm9yIChpID0gMDsgaSA8IFRU TV9NQVhfQk9fUFJJT1JJVFk7ICsraSkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLyog cHJldmlvdXMgYnVzeSByZXN2IGxvY2sgaXMgaGVsZCBieSBhYm92ZSwgaWRsZSBub3csCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICogc28gbGV0IHRoZW0gZXZpY3RhYmxlLgo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAqLwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3Ry dWN0IHR0bV9vcGVyYXRpb25fY3R4IGJ1c3lfY3R4ID0gewo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAuaW50ZXJydXB0aWJsZSA9IGN0eC0+aW50ZXJydXB0aWJsZSwKPj4+ICvC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgLm5vX3dhaXRfZ3B1wqDCoCA9IGN0eC0+bm9f d2FpdF9ncHUsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIC5yZXN2wqDCoMKg wqDCoMKgwqDCoMKgwqAgPSBmaXJzdF9iby0+cmVzdiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqAgLmZsYWdzwqDCoMKgwqDCoMKgwqDCoMKgwqAgPSBUVE1fT1BUX0ZMQUdfQUxM T1dfUkVTX0VWSUNUCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Owo+Pj4gK8KgwqDCoMKg wqDCoMKgwqDCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeShibywgJm1hbi0+bHJ1W2ldLCBscnUp IHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCF0dG1fYm9fZXZpY3Rf c3dhcG91dF9hbGxvd2FibGUoYm8sCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmYnVzeV9jdHgsCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoCAmbG9ja2VkLAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgTlVMTCkpCj4+PiArwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgY29udGludWU7Cj4+PiArCj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmIChwbGFjZSAmJiAhYmRldi0+ZHJpdmVy LT5ldmljdGlvbl92YWx1YWJsZShibywKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBwbGFjZSkpIHsK Pj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAobG9ja2VkKQo+ Pj4gKyByZXNlcnZhdGlvbl9vYmplY3RfdW5sb2NrKGJvLT5yZXN2KTsKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBjb250aW51ZTsKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgfQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBi cmVhazsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIH0KPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgIC8qIElmIHRoZSBpbm5lciBsb29wIHRlcm1pbmF0ZWQgZWFybHksIHdlIGhhdmUgb3Vy Cj4+PiBjYW5kaWRhdGUgKi8KPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICgmYm8tPmxy dSAhPSAmbWFuLT5scnVbaV0pCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGJy ZWFrOwo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm8gPSBOVUxMOwo+Pj4gK8KgwqDCoMKg wqDCoMKgIH0KPj4KPj4gU28gd2UgYXJlIG5vdyBzZWFyY2hpbmcgZm9yIGFueSBCTyBhZ2FpbiB3 aGljaCBtYXRjaGVzIHRoZSBjcml0ZXJpYT8KPj4gR29vZCBpZGVhLgo+Pgo+PiBDYW4gd2UgZmFj dG9yIHRob3NlIHR3byBsb29wcyBvdXQgaW50byBhIHNlcGFyYXRlIGZ1bmN0aW9uPyBJIG1lYW4K Pj4gdGhleSBhcmUgbW9zdGx5IGlkZW50aWNhbCBub3cgdG8gdGhlIG9uZSBhYm92ZSwgYXJlbid0 IHRoZXk/Cj4+Cj4+PiArwqDCoMKgwqDCoMKgwqAgaWYgKGJvICYmIChiby0+cmVzdiA9PSBmaXJz dF9iby0+cmVzdikpCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBsb2NrZWQgPSB0cnVlOwo+ Pj4gK8KgwqDCoMKgwqDCoMKgIGVsc2UgaWYgKGJvKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKg wqAgd3dfbXV0ZXhfdW5sb2NrKCZmaXJzdF9iby0+cmVzdi0+bG9jayk7Cj4+PiArwqDCoMKgwqDC oMKgwqAgdHRtX2JvX3B1dChmaXJzdF9ibyk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgZmlyc3RfYm8g PSBOVUxMOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghYm8pIHsKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIHNwaW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7Cj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCByZXR1cm4gLUVCVVNZOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0KPj4+ICvCoMKg wqAgfSBlbHNlIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoZmlyc3RfYm8pCj4+PiArwqDCoMKg wqDCoMKgwqDCoMKgwqDCoCB0dG1fYm9fcHV0KGZpcnN0X2JvKTsKPj4KPj4gVGhpcyBtdXN0IGNv bWUgYSBiaXQgbGF0ZXIsIHNpbmNlIHdlIGNhbid0IGNhbGwgdHRtX2JvX3B1dCgpIHdoaWxlCj4+ IGhvbGRpbmcgdGhlIHNwaW5sb2NrLgo+Pgo+PiBSZWdhcmRzLAo+PiBDaHJpc3RpYW4uCj4+Cj4+ PiDCoMKgwqDCoMKgIH0KPj4+IMKgwqDCoMKgwqDCoMKgIGtyZWZfZ2V0KCZiby0+bGlzdF9rcmVm KTsKPj4+IEBAIC0xNzg0LDcgKzE4NTQsOCBAQCBpbnQgdHRtX2JvX3N3YXBvdXQoc3RydWN0IHR0 bV9ib19nbG9iYWwgKmdsb2IsCj4+PiBzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggKmN0eCkKPj4+ IMKgwqDCoMKgwqAgc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7Cj4+PiDCoMKgwqDCoMKgIGZv ciAoaSA9IDA7IGkgPCBUVE1fTUFYX0JPX1BSSU9SSVRZOyArK2kpIHsKPj4+IMKgwqDCoMKgwqDC oMKgwqDCoCBsaXN0X2Zvcl9lYWNoX2VudHJ5KGJvLCAmZ2xvYi0+c3dhcF9scnVbaV0sIHN3YXAp IHsKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGlmICh0dG1fYm9fZXZpY3Rfc3dhcG91dF9h bGxvd2FibGUoYm8sIGN0eCwgJmxvY2tlZCkpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKg IGlmICh0dG1fYm9fZXZpY3Rfc3dhcG91dF9hbGxvd2FibGUoYm8sIGN0eCwgJmxvY2tlZCwKPj4+ ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgTlVMTCkpIHsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0 ID0gMDsKPj4+IMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYnJlYWs7Cj4+PiDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCB9Cj4+Cj4KCl9fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVs QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWls bWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==