From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 3/3] drm/amdgpu: Avoid HW reset if guilty job already signaled. Date: Wed, 10 Apr 2019 16:06:04 +0200 Message-ID: <2e4a76c7-dcba-4c8f-359b-bd30c4cf048f@gmail.com> References: <1554739692-6999-1-git-send-email-andrey.grodzovsky@amd.com> <1554739692-6999-3-git-send-email-andrey.grodzovsky@amd.com> <6ec23212-740d-7931-40e3-3d60ab591679@gmail.com> <209e53f7-5842-1f34-f9bb-a800670b31fe@amd.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: <209e53f7-5842-1f34-f9bb-a800670b31fe-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: "Grodzovsky, Andrey" , "Koenig, Christian" , "dri-devel-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "etnaviv-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" , "eric-WhKQ6XTQaPysTnJN9+BGXg@public.gmane.org" QW0gMDkuMDQuMTkgdW0gMTg6NDIgc2NocmllYiBHcm9kem92c2t5LCBBbmRyZXk6Cj4gT24gNC85 LzE5IDEwOjUwIEFNLCBDaHJpc3RpYW4gS8O2bmlnIHdyb3RlOgo+PiBBbSAwOC4wNC4xOSB1bSAx ODowOCBzY2hyaWViIEFuZHJleSBHcm9kem92c2t5Ogo+Pj4gQWxzbyByZWplY3QgVERScyBpZiBh bm90aGVyIG9uZSBhbHJlYWR5IHJ1bm5pbmcuCj4+Pgo+Pj4gU2lnbmVkLW9mZi1ieTogQW5kcmV5 IEdyb2R6b3Zza3kgPGFuZHJleS5ncm9kem92c2t5QGFtZC5jb20+Cj4+PiAtLS0KPj4+ICDCoCBk cml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMgfCA5NAo+Pj4gKysrKysr KysrKysrKysrKysrKysrLS0tLS0tLS0tCj4+PiAgwqAgMSBmaWxlIGNoYW5nZWQsIDY3IGluc2Vy dGlvbnMoKyksIDI3IGRlbGV0aW9ucygtKQo+Pj4KPj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMKPj4+IGIvZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jCj4+PiBpbmRleCBhYWJkMDQzLi40NDQ2ODkyIDEwMDY0 NAo+Pj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jCj4+ PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZGV2aWNlLmMKPj4+IEBA IC0zMzI3LDEwICszMzI3LDEyIEBAIGJvb2wgYW1kZ3B1X2RldmljZV9zaG91bGRfcmVjb3Zlcl9n cHUoc3RydWN0Cj4+PiBhbWRncHVfZGV2aWNlICphZGV2KQo+Pj4gIMKgIMKgIHN0YXRpYyBpbnQg YW1kZ3B1X2RldmljZV9wcmVfYXNpY19yZXNldChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwK Pj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgc3RydWN0IGFt ZGdwdV9qb2IgKmpvYiwKPj4+IC3CoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oCBib29sICpuZWVkX2Z1bGxfcmVzZXRfYXJnKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgIGJvb2wgKm5lZWRfZnVsbF9yZXNldF9hcmcsCj4+PiArwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYm9vbCAqam9iX3NpZ25hbGVkKQo+Pj4gIMKg IHsKPj4+ICDCoMKgwqDCoMKgIGludCBpLCByID0gMDsKPj4+ICDCoMKgwqDCoMKgIGJvb2wgbmVl ZF9mdWxsX3Jlc2V0wqAgPSAqbmVlZF9mdWxsX3Jlc2V0X2FyZzsKPj4+ICvCoMKgwqAgc3RydWN0 IGFtZGdwdV9yaW5nICpqb2JfcmluZyA9IGpvYiA/Cj4+PiB0b19hbWRncHVfcmluZyhqb2ItPmJh c2Uuc2NoZWQpIDogTlVMTDsKPj4+ICDCoCDCoMKgwqDCoMKgIC8qIGJsb2NrIGFsbCBzY2hlZHVs ZXJzIGFuZCByZXNldCBnaXZlbiBqb2IncyByaW5nICovCj4+PiAgwqDCoMKgwqDCoCBmb3IgKGkg PSAwOyBpIDwgQU1ER1BVX01BWF9SSU5HUzsgKytpKSB7Cj4+PiBAQCAtMzM0MSw2ICszMzQzLDE3 IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2RldmljZV9wcmVfYXNpY19yZXNldChzdHJ1Y3QKPj4+IGFt ZGdwdV9kZXZpY2UgKmFkZXYsCj4+PiAgwqAgwqDCoMKgwqDCoMKgwqDCoMKgIGRybV9zY2hlZF9z dG9wKCZyaW5nLT5zY2hlZCwgJmpvYi0+YmFzZSk7Cj4+PiAgwqAgK8KgwqDCoMKgwqDCoMKgIC8q Cj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqIE11c3QgY2hlY2sgZ3VpbHR5IHNpZ25hbCBoZXJlIHNp bmNlIGFmdGVyIHRoaXMgcG9pbnQgYWxsIG9sZAo+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKiBIVyBm ZW5jZXMgYXJlIGZvcmNlIHNpZ25hbGVkLgo+Pj4gK8KgwqDCoMKgwqDCoMKgwqAgKgo+Pj4gK8Kg wqDCoMKgwqDCoMKgwqAgKiBqb2ItPmJhc2UgaG9sZHMgYSByZWZlcmVuY2UgdG8gcGFyZW50IGZl bmNlCj4+PiArwqDCoMKgwqDCoMKgwqDCoCAqLwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChqb2Jf c2lnbmFsZWQgJiYgam9iICYmIHJpbmcgPT0gam9iX3JpbmcgJiYKPj4+ICvCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIGpvYi0+YmFzZS5zX2ZlbmNlLT5wYXJlbnQgJiYKPj4+ICsgZG1hX2ZlbmNlX2lz X3NpZ25hbGVkKGpvYi0+YmFzZS5zX2ZlbmNlLT5wYXJlbnQpKQo+Pj4gK8KgwqDCoMKgwqDCoMKg wqDCoMKgwqAgKmpvYl9zaWduYWxlZCA9IHRydWU7Cj4+PiArCj4+IFRoYXQgd29uJ3Qgd29yayBj b3JyZWN0bHkuIFNlZSB3aGVuIHRoZSBndWlsdHkgam9iIGlzIG5vdCBvbiB0aGUgZmlyc3QKPj4g c2NoZWR1bGVyLCB5b3Ugd291bGQgYWxyZWFkeSBoYXZlIGZvcmNlIGNvbXBsZXRlZCBzb21lIGJl Zm9yZSBnZXR0aW5nCj4+IGhlcmUuCj4+Cj4+IEJldHRlciB0byBzdG9wIGFsbCBzY2hlZHVsZXJz IGZpcnN0IGFuZCB0aGVuIGRvIHRoZSBjaGVjay4KPj4KPj4gQ2hyaXN0aWFuLgo+Cj4gV2hhdCBk byB5b3UgbWVhbiBieSBmaXJzdCBzY2hlZHVsZXIgPyBUaGVyZSBpcyBvbmUgc2NoZWR1bGVyIG9i amVjdCBwZXIKPiByaW5nIHNvIEkgYW0gbm90IGNsZWFyIHdoYXQgJ2ZpcnN0JyBtZWFucyBoZXJl LgoKV2VsbCBmb3IgZXhhbXBsZSBpZiB0aGUgZ3VpbHR5IGpvYiBpcyBmcm9tIGEgY29tcHV0ZSBy aW5nIHRoZSB3ZSBoYXZlIAphbHJlYWR5IGZvcmNlIHNpZ25hbGVkIHRoZSBnZnggcmluZyBoZXJl LgoKU2FtZSBpcyB0cnVlIGZvciBvdGhlciBkZXZpY2VzIGluIHRoZSBzYW1lIGhpdmUsIHNvIGl0 IHdvdWxkIHByb2JhYmx5IGJlIAphIGdvb2QgaWRlYSB0byBtb3ZlIHRoZSBmb3JjZSBzaWduYWxp bmcgYW5kIHRoZSBJUCByZXNldCBzb21ld2hlcmUgZWxzZSAKYW5kIHRoaXMgY2hlY2sgdXAgYSBs YXllci4KCkNocmlzdGlhbi4KCj4KPiBBbmRyZXkKPgo+Cj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKg IC8qIGFmdGVyIGFsbCBodyBqb2JzIGFyZSByZXNldCwgaHcgZmVuY2UgaXMgbWVhbmluZ2xlc3Ms IHNvCj4+PiBmb3JjZV9jb21wbGV0aW9uICovCj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgIGFtZGdw dV9mZW5jZV9kcml2ZXJfZm9yY2VfY29tcGxldGlvbihyaW5nKTsKPj4+ICDCoMKgwqDCoMKgIH0K Pj4+IEBAIC0zMzU4LDcgKzMzNzEsOCBAQCBzdGF0aWMgaW50IGFtZGdwdV9kZXZpY2VfcHJlX2Fz aWNfcmVzZXQoc3RydWN0Cj4+PiBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4gIMKgIMKgIMKgIC3C oMKgwqAgaWYgKCFhbWRncHVfc3Jpb3ZfdmYoYWRldikpIHsKPj4+ICvCoMKgwqAgLyogRG9uJ3Qg c3VzcGVuZCBvbiBiYXJlIG1ldGFsIGlmIHdlIGFyZSBub3QgZ29pbmcgdG8gSFcgcmVzZXQKPj4+ IHRoZSBBU0lDICovCj4+PiArwqDCoMKgIGlmICghYW1kZ3B1X3NyaW92X3ZmKGFkZXYpICYmICEo KmpvYl9zaWduYWxlZCkpIHsKPj4+ICDCoCDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKCFuZWVkX2Z1 bGxfcmVzZXQpCj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgbmVlZF9mdWxsX3Jlc2V0 ID0gYW1kZ3B1X2RldmljZV9pcF9uZWVkX2Z1bGxfcmVzZXQoYWRldik7Cj4+PiBAQCAtMzQ5NSw3 ICszNTA5LDcgQEAgc3RhdGljIGludCBhbWRncHVfZG9fYXNpY19yZXNldChzdHJ1Y3QKPj4+IGFt ZGdwdV9oaXZlX2luZm8gKmhpdmUsCj4+PiAgwqDCoMKgwqDCoCByZXR1cm4gcjsKPj4+ICDCoCB9 Cj4+PiAgwqAgLXN0YXRpYyB2b2lkIGFtZGdwdV9kZXZpY2VfcG9zdF9hc2ljX3Jlc2V0KHN0cnVj dCBhbWRncHVfZGV2aWNlICphZGV2KQo+Pj4gK3N0YXRpYyB2b2lkIGFtZGdwdV9kZXZpY2VfcG9z dF9hc2ljX3Jlc2V0KHN0cnVjdCBhbWRncHVfZGV2aWNlCj4+PiAqYWRldiwgYm9vbCBqb2Jfc2ln bmFsZWQpCj4+PiAgwqAgewo+Pj4gIMKgwqDCoMKgwqAgaW50IGk7Cj4+PiAgwqAgQEAgLTM1MDUs NyArMzUxOSw4IEBAIHN0YXRpYyB2b2lkCj4+PiBhbWRncHVfZGV2aWNlX3Bvc3RfYXNpY19yZXNl dChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgaWYg KCFyaW5nIHx8ICFyaW5nLT5zY2hlZC50aHJlYWQpCj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqAgY29udGludWU7Cj4+PiAgwqAgLcKgwqDCoMKgwqDCoMKgIGlmICghYWRldi0+YXNpY19y ZXNldF9yZXMpCj4+PiArwqDCoMKgwqDCoMKgwqAgLyogTm8gcG9pbnQgdG8gcmVzdWJtaXQgam9i cyBpZiB3ZSBkaWRuJ3QgSFcgcmVzZXQqLwo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmICghYWRldi0+ YXNpY19yZXNldF9yZXMgJiYgIWpvYl9zaWduYWxlZCkKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoCBkcm1fc2NoZWRfcmVzdWJtaXRfam9icygmcmluZy0+c2NoZWQpOwo+Pj4gIMKgIMKg wqDCoMKgwqDCoMKgwqDCoCBkcm1fc2NoZWRfc3RhcnQoJnJpbmctPnNjaGVkLCAhYWRldi0+YXNp Y19yZXNldF9yZXMpOwo+Pj4gQEAgLTM1MTgsMTQgKzM1MzMsMjEgQEAgc3RhdGljIHZvaWQKPj4+ IGFtZGdwdV9kZXZpY2VfcG9zdF9hc2ljX3Jlc2V0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 KQo+Pj4gIMKgwqDCoMKgwqAgYWRldi0+YXNpY19yZXNldF9yZXMgPSAwOwo+Pj4gIMKgIH0KPj4+ ICDCoCAtc3RhdGljIHZvaWQgYW1kZ3B1X2RldmljZV9sb2NrX2FkZXYoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKmFkZXYpCj4+PiArc3RhdGljIGJvb2wgYW1kZ3B1X2RldmljZV9sb2NrX2FkZXYoc3Ry dWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJvb2wKPj4+IHRyeWxvY2spCj4+PiAgwqAgewo+Pj4g LcKgwqDCoCBtdXRleF9sb2NrKCZhZGV2LT5sb2NrX3Jlc2V0KTsKPj4+ICvCoMKgwqAgaWYgKHRy eWxvY2spIHsKPj4+ICvCoMKgwqDCoMKgwqDCoCBpZiAoIW11dGV4X3RyeWxvY2soJmFkZXYtPmxv Y2tfcmVzZXQpKQo+Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqAgcmV0dXJuIGZhbHNlOwo+Pj4g K8KgwqDCoCB9IGVsc2UKPj4+ICvCoMKgwqDCoMKgwqDCoCBtdXRleF9sb2NrKCZhZGV2LT5sb2Nr X3Jlc2V0KTsKPj4+ICsKPj4+ICDCoMKgwqDCoMKgIGF0b21pY19pbmMoJmFkZXYtPmdwdV9yZXNl dF9jb3VudGVyKTsKPj4+ICDCoMKgwqDCoMKgIGFkZXYtPmluX2dwdV9yZXNldCA9IDE7Cj4+PiAg wqDCoMKgwqDCoCAvKiBCbG9jayBrZmQ6IFNSSU9WIHdvdWxkIGRvIGl0IHNlcGFyYXRlbHkgKi8K Pj4+ICDCoMKgwqDCoMKgIGlmICghYW1kZ3B1X3NyaW92X3ZmKGFkZXYpKQo+Pj4gIMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2FtZGtmZF9wcmVfcmVzZXQoYWRldik7 Cj4+PiArCj4+PiArwqDCoMKgIHJldHVybiB0cnVlOwo+Pj4gIMKgIH0KPj4+ICDCoCDCoCBzdGF0 aWMgdm9pZCBhbWRncHVfZGV2aWNlX3VubG9ja19hZGV2KHN0cnVjdCBhbWRncHVfZGV2aWNlICph ZGV2KQo+Pj4gQEAgLTM1NTUsMjkgKzM1NzcsNDQgQEAgaW50IGFtZGdwdV9kZXZpY2VfZ3B1X3Jl Y292ZXIoc3RydWN0Cj4+PiBhbWRncHVfZGV2aWNlICphZGV2LAo+Pj4gIMKgIHsKPj4+ICDCoMKg wqDCoMKgIGludCByOwo+Pj4gIMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV9oaXZlX2luZm8gKmhp dmUgPSBOVUxMOwo+Pj4gLcKgwqDCoCBib29sIG5lZWRfZnVsbF9yZXNldCA9IGZhbHNlOwo+Pj4g IMKgwqDCoMKgwqAgc3RydWN0IGFtZGdwdV9kZXZpY2UgKnRtcF9hZGV2ID0gTlVMTDsKPj4+ICDC oMKgwqDCoMKgIHN0cnVjdCBsaXN0X2hlYWQgZGV2aWNlX2xpc3QsICpkZXZpY2VfbGlzdF9oYW5k bGUgPcKgIE5VTEw7Cj4+PiArwqDCoMKgIGJvb2wgeGdtaV90b3BvbG9neV9wcmVzZW50LCBuZWVk X2Z1bGxfcmVzZXQsIGpvYl9zaWduYWxlZDsKPj4+ICDCoCArwqDCoMKgIG5lZWRfZnVsbF9yZXNl dCA9IGpvYl9zaWduYWxlZCA9IGZhbHNlOwo+Pj4gIMKgwqDCoMKgwqAgSU5JVF9MSVNUX0hFQUQo JmRldmljZV9saXN0KTsKPj4+ICDCoCDCoMKgwqDCoMKgIGRldl9pbmZvKGFkZXYtPmRldiwgIkdQ VSByZXNldCBiZWdpbiFcbiIpOwo+Pj4gIMKgICvCoMKgwqAgaGl2ZSA9IGFtZGdwdV9nZXRfeGdt aV9oaXZlKGFkZXYsIDApOwo+Pj4gK8KgwqDCoCB4Z21pX3RvcG9sb2d5X3ByZXNlbnQgPSBoaXZl ICYmCj4+PiBhZGV2LT5nbWMueGdtaS5udW1fcGh5c2ljYWxfbm9kZXMgPiAxOwo+Pj4gKwo+Pj4g IMKgwqDCoMKgwqAgLyoKPj4+IC3CoMKgwqDCoCAqIEluIGNhc2Ugb2YgWEdNSSBoaXZlIGRpc2Fs bG93IGNvbmN1cnJlbnQgcmVzZXRzIHRvIGJlIHRyaWdnZXJlZAo+Pj4gLcKgwqDCoMKgICogYnkg ZGlmZmVyZW50IG5vZGVzLiBObyBwb2ludCBhbHNvIHNpbmNlIHRoZSBvbmUgbm9kZSBhbHJlYWR5 Cj4+PiBleGVjdXRpbmcKPj4+IC3CoMKgwqDCoCAqIHJlc2V0IHdpbGwgYWxzbyByZXNldCBhbGwg dGhlIG90aGVyIG5vZGVzIGluIHRoZSBoaXZlLgo+Pj4gK8KgwqDCoMKgICogSGVyZSB3ZSB0cnls b2NrIHRvIGF2b2lkIGNoYWluIG9mIHJlc2V0cyBleGVjdXRpbmcgZnJvbQo+Pj4gK8KgwqDCoMKg ICogZWl0aGVyIHRyaWdnZXIgYnkgam9icyBvbiBkaWZmZXJlbnQgYWRldnMgaW4gWEdNSSBoaXZl IG9yCj4+PiBqb2JzIG9uCj4+PiArwqDCoMKgwqAgKiBkaWZmZXJlbnQgc2NoZWR1bGVycyBmb3Ig c2FtZSBkZXZpY2Ugd2hpbGUgdGhpcyB0ZHIgaXMgcnVubmluZy4KPj4+ICvCoMKgwqDCoCAqIFdl IGFsd2F5cyByZXNldCBhbGwgc2NoZWR1bGVycyBmb3IgZGV2aWNlIGFuZCBhbGwgZGV2aWNlcyBm b3IKPj4+IFhHTUkKPj4+ICvCoMKgwqDCoCAqIGhpdmUgc28gdGhhdCBzaG91bGQgdGFrZSBjYXJl IG9mIHRoZW0gdG9vLgo+Pj4gIMKgwqDCoMKgwqDCoCAqLwo+Pj4gLcKgwqDCoCBoaXZlID0gYW1k Z3B1X2dldF94Z21pX2hpdmUoYWRldiwgMCk7Cj4+PiAtwqDCoMKgIGlmIChoaXZlICYmIGFkZXYt PmdtYy54Z21pLm51bV9waHlzaWNhbF9ub2RlcyA+IDEgJiYKPj4+IC3CoMKgwqDCoMKgwqDCoCAh bXV0ZXhfdHJ5bG9jaygmaGl2ZS0+cmVzZXRfbG9jaykpCj4+PiArCj4+PiArwqDCoMKgIGlmICh4 Z21pX3RvcG9sb2d5X3ByZXNlbnQgJiYgIW11dGV4X3RyeWxvY2soJmhpdmUtPnJlc2V0X2xvY2sp KSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgRFJNX0lORk8oIkJhaWxpbmcgb24gVERSIGZvciBzX2pv YjolbGx4LCBoaXZlOiAlbGx4IGFzCj4+PiBhbm90aGVyIGFscmVhZHkgaW4gcHJvZ3Jlc3MiLAo+ Pj4gK8KgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBqb2ItPmJhc2UuaWQsIGhpdmUtPmhpdmVfaWQp Owo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDCoCByZXR1cm4gMDsKPj4+ICvCoMKgwqAgfQo+Pj4gIMKg IMKgwqDCoMKgwqAgLyogU3RhcnQgd2l0aCBhZGV2IHByZSBhc2ljIHJlc2V0IGZpcnN0IGZvciBz b2Z0IHJlc2V0IGNoZWNrLiovCj4+PiAtwqDCoMKgIGFtZGdwdV9kZXZpY2VfbG9ja19hZGV2KGFk ZXYpOwo+Pj4gK8KgwqDCoCBpZiAoIWFtZGdwdV9kZXZpY2VfbG9ja19hZGV2KGFkZXYsICF4Z21p X3RvcG9sb2d5X3ByZXNlbnQpKSB7Cj4+PiArwqDCoMKgwqDCoMKgwqAgRFJNX0lORk8oIkJhaWxp bmcgb24gVERSIGZvciBzX2pvYjolbGx4LCBhcyBhbm90aGVyIGFscmVhZHkKPj4+IGluIHByb2dy ZXNzIiwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIGpvYi0+ YmFzZS5pZCk7Cj4+PiArwqDCoMKgwqDCoMKgwqAgcmV0dXJuIDA7Cj4+PiArwqDCoMKgIH0KPj4+ ICsKPj4+ICvCoMKgwqAgLyogR3VpbHR5IGpvYiB3aWxsIGJlIGZyZWVkIGFmdGVyIHRoaXMqLwo+ Pj4gIMKgwqDCoMKgwqAgciA9IGFtZGdwdV9kZXZpY2VfcHJlX2FzaWNfcmVzZXQoYWRldiwKPj4+ ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBqb2IsCj4+PiAt wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmbmVlZF9mdWxsX3Jlc2V0 KTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgICZuZWVkX2Z1 bGxfcmVzZXQsCj4+PiArwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAm am9iX3NpZ25hbGVkKTsKPj4+ICDCoMKgwqDCoMKgIGlmIChyKSB7Cj4+PiAgwqDCoMKgwqDCoMKg wqDCoMKgIC8qVE9ETyBTaG91bGQgd2Ugc3RvcCA/Ki8KPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAg RFJNX0VSUk9SKCJHUFUgcHJlIGFzaWMgcmVzZXQgZmFpbGVkIHdpdGggZXJyLCAlZCBmb3IgZHJt Cj4+PiBkZXYsICVzICIsCj4+PiBAQCAtMzYwOSwxMCArMzY0NiwxMSBAQCBpbnQgYW1kZ3B1X2Rl dmljZV9ncHVfcmVjb3ZlcihzdHJ1Y3QKPj4+IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4+PiAgwqDC oMKgwqDCoMKgwqDCoMKgIGlmICh0bXBfYWRldiA9PSBhZGV2KQo+Pj4gIMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGNvbnRpbnVlOwo+Pj4gIMKgIC3CoMKgwqDCoMKgwqDCoCBhbWRncHVfZGV2 aWNlX2xvY2tfYWRldih0bXBfYWRldik7Cj4+PiArwqDCoMKgwqDCoMKgwqAgYW1kZ3B1X2Rldmlj ZV9sb2NrX2FkZXYodG1wX2FkZXYsIGZhbHNlKTsKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgciA9 IGFtZGdwdV9kZXZpY2VfcHJlX2FzaWNfcmVzZXQodG1wX2FkZXYsCj4+PiAgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBOVUxMLAo+Pj4gLcKgwqDC oMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCAmbmVlZF9mdWxsX3Jl c2V0KTsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKg wqAgJm5lZWRfZnVsbF9yZXNldCwKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgwqDCoMKgwqAgJmpvYl9zaWduYWxlZCk7Cj4+PiAgwqDCoMKgwqDCoMKgwqDCoMKg IC8qVE9ETyBTaG91bGQgd2Ugc3RvcCA/Ki8KPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgaWYgKHIp IHsKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBEUk1fRVJST1IoIkdQVSBwcmUgYXNp YyByZXNldCBmYWlsZWQgd2l0aCBlcnIsICVkIGZvcgo+Pj4gZHJtIGRldiwgJXMgIiwKPj4+IEBA IC0zNjIzLDE5ICszNjYxLDIxIEBAIGludCBhbWRncHVfZGV2aWNlX2dwdV9yZWNvdmVyKHN0cnVj dAo+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+ICDCoCDCoMKgwqDCoMKgIC8qIEFjdHVhbCBB U0lDIHJlc2V0cyBpZiBuZWVkZWQuKi8KPj4+ICDCoMKgwqDCoMKgIC8qIFRPRE8gSW1wbGVtZW50 IFhHTUkgaGl2ZSByZXNldCBsb2dpYyBmb3IgU1JJT1YgKi8KPj4+IC3CoMKgwqAgaWYgKGFtZGdw dV9zcmlvdl92ZihhZGV2KSkgewo+Pj4gLcKgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVfZGV2aWNl X3Jlc2V0X3NyaW92KGFkZXYsIGpvYiA/IGZhbHNlIDogdHJ1ZSk7Cj4+PiAtwqDCoMKgwqDCoMKg wqAgaWYgKHIpCj4+PiAtwqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBhZGV2LT5hc2ljX3Jlc2V0X3Jl cyA9IHI7Cj4+PiAtwqDCoMKgIH0gZWxzZSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgcsKgID0gYW1k Z3B1X2RvX2FzaWNfcmVzZXQoaGl2ZSwgZGV2aWNlX2xpc3RfaGFuZGxlLAo+Pj4gJm5lZWRfZnVs bF9yZXNldCk7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgaWYgKHIgJiYgciA9PSAtRUFHQUlOKQo+Pj4g LcKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgZ290byByZXRyeTsKPj4+ICvCoMKgwqAgaWYgKCFqb2Ig fHwgIWpvYl9zaWduYWxlZCkgewo+Pj4gK8KgwqDCoMKgwqDCoMKgIGlmIChhbWRncHVfc3Jpb3Zf dmYoYWRldikpIHsKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgIHIgPSBhbWRncHVfZGV2aWNl X3Jlc2V0X3NyaW92KGFkZXYsIGpvYiA/IGZhbHNlIDogdHJ1ZSk7Cj4+PiArwqDCoMKgwqDCoMKg wqDCoMKgwqDCoCBpZiAocikKPj4+ICvCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqDCoMKgwqAgYWRl di0+YXNpY19yZXNldF9yZXMgPSByOwo+Pj4gK8KgwqDCoMKgwqDCoMKgIH0gZWxzZSB7Cj4+PiAr wqDCoMKgwqDCoMKgwqDCoMKgwqDCoCBywqAgPSBhbWRncHVfZG9fYXNpY19yZXNldChoaXZlLCBk ZXZpY2VfbGlzdF9oYW5kbGUsCj4+PiAmbmVlZF9mdWxsX3Jlc2V0KTsKPj4+ICvCoMKgwqDCoMKg wqDCoMKgwqDCoMKgIGlmIChyICYmIHIgPT0gLUVBR0FJTikKPj4+ICvCoMKgwqDCoMKgwqDCoMKg wqDCoMKgwqDCoMKgwqAgZ290byByZXRyeTsKPj4+ICvCoMKgwqDCoMKgwqDCoCB9Cj4+PiAgwqDC oMKgwqDCoCB9Cj4+PiAgwqAgwqDCoMKgwqDCoCAvKiBQb3N0IEFTSUMgcmVzZXQgZm9yIGFsbCBk ZXZzIC4qLwo+Pj4gIMKgwqDCoMKgwqAgbGlzdF9mb3JfZWFjaF9lbnRyeSh0bXBfYWRldiwgZGV2 aWNlX2xpc3RfaGFuZGxlLCBnbWMueGdtaS5oZWFkKSB7Cj4+PiAtwqDCoMKgwqDCoMKgwqAgYW1k Z3B1X2RldmljZV9wb3N0X2FzaWNfcmVzZXQodG1wX2FkZXYpOwo+Pj4gK8KgwqDCoMKgwqDCoMKg IGFtZGdwdV9kZXZpY2VfcG9zdF9hc2ljX3Jlc2V0KHRtcF9hZGV2LCBqb2Jfc2lnbmFsZWQpOwo+ Pj4gIMKgIMKgwqDCoMKgwqDCoMKgwqDCoCBpZiAocikgewo+Pj4gIMKgwqDCoMKgwqDCoMKgwqDC oMKgwqDCoMKgIC8qIGJhZCBuZXdzLCBob3cgdG8gdGVsbCBpdCB0byB1c2Vyc3BhY2UgPyAqLwo+ Pj4gQEAgLTM2NDgsNyArMzY4OCw3IEBAIGludCBhbWRncHVfZGV2aWNlX2dwdV9yZWNvdmVyKHN0 cnVjdAo+Pj4gYW1kZ3B1X2RldmljZSAqYWRldiwKPj4+ICDCoMKgwqDCoMKgwqDCoMKgwqAgYW1k Z3B1X2RldmljZV91bmxvY2tfYWRldih0bXBfYWRldik7Cj4+PiAgwqDCoMKgwqDCoCB9Cj4+PiAg wqAgLcKgwqDCoCBpZiAoaGl2ZSAmJiBhZGV2LT5nbWMueGdtaS5udW1fcGh5c2ljYWxfbm9kZXMg PiAxKQo+Pj4gK8KgwqDCoCBpZiAoeGdtaV90b3BvbG9neV9wcmVzZW50KQo+Pj4gIMKgwqDCoMKg wqDCoMKgwqDCoCBtdXRleF91bmxvY2soJmhpdmUtPnJlc2V0X2xvY2spOwo+Pj4gIMKgIMKgwqDC oMKgwqAgaWYgKHIpCj4gX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX18KPiBhbWQtZ2Z4IG1haWxpbmcgbGlzdAo+IGFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Au b3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQt Z2Z4CgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQt Z2Z4IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xp c3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZng=