From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Liu, Monk" Subject: RE: [PATCH 13/18] drm/amdgpu:fix driver unloading bug Date: Tue, 19 Sep 2017 11:37:43 +0000 Message-ID: References: <1505715122-23904-1-git-send-email-Monk.Liu@amd.com> <1505715122-23904-14-git-send-email-Monk.Liu@amd.com> <1821bf91-83d8-c933-704d-fcd8db07def1@gmail.com> <69a1e774-6a9e-31c6-8b30-dfbd430062c8@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <69a1e774-6a9e-31c6-8b30-dfbd430062c8-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: "Koenig, Christian" , "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" Cc: "Chen, Horace" PiBXZWxsIHRoZSBxdWVzdGlvbiBpcyB3aHkgZG9lcyB0aGUgQ1BDIHN0aWxsIG5lZWRzIHRoZSBN UUQgY29tbWFuZHMgYW5kIGhvdyBjYW4gd2UgcHJldmVudCB0aGF0Pw0KDQpZb3UgYXJlIHJpZ2h0 LCBJJ2xsIHNlZSB3aGF0IGNhbiBkbw0KDQoNCi0tLS0tT3JpZ2luYWwgTWVzc2FnZS0tLS0tDQpG cm9tOiBDaHJpc3RpYW4gS8O2bmlnIFttYWlsdG86Y2tvZW5pZy5sZWljaHR6dW1lcmtlbkBnbWFp bC5jb21dIA0KU2VudDogMjAxN+W5tDnmnIgxOeaXpSAxNjoyNw0KVG86IExpdSwgTW9uayA8TW9u ay5MaXVAYW1kLmNvbT47IEtvZW5pZywgQ2hyaXN0aWFuIDxDaHJpc3RpYW4uS29lbmlnQGFtZC5j b20+OyBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KQ2M6IENoZW4sIEhvcmFjZSA8SG9y YWNlLkNoZW5AYW1kLmNvbT4NClN1YmplY3Q6IFJlOiBbUEFUQ0ggMTMvMThdIGRybS9hbWRncHU6 Zml4IGRyaXZlciB1bmxvYWRpbmcgYnVnDQoNCkFtIDE5LjA5LjIwMTcgdW0gMDY6MTQgc2Nocmll YiBMaXUsIE1vbms6DQo+IENocmlzdGlhbiwNCj4NCj4+IFRoYXQgc291bmRzIGF0IGxlYXN0IGEg Yml0IGJldHRlci4gQnV0IG15IHF1ZXN0aW9uIGlzIHdoeSBkb2Vzbid0IHRoaXMgd29yayBsaWtl IGl0IGRvZXMgb24gVG9uZ2EsIGUuZy4gY29ycmVjdGx5IGNsZWFuIHRoaW5ncyB1cD8NCj4gVG9u Z2EgYWxzbyBzdWZmZXIgd2l0aCB0aGlzIGlzc3VlLCBqdXN0IHRoYXQgd2UgZml4ZWQgaXQgaW4g dGhlIGJyYW5jaCBmb3IgQ1NQIGN1c3RvbWVyIGFuZCBzdGFnaW5nIGNvZGUgdXN1YWxseSBiZWhp bmQgb3VyIHByaXZhdGUgYnJhbmNoIC4uLg0KPg0KPj4gWWVhaCwgZ3V0IGtlZXBpbmcgdGhlIEdB UlQgbWFwcGluZyBhbGl2ZSBpcyBjb21wbGV0ZSBub25zZW5zZS4gV2hlbiB0aGUgZHJpdmVyIHVu bG9hZHMgYWxsIG1lbW9yeSBzaG91bGQgYmUgcmV0dXJuZWQgdG8gdGhlIE9TLg0KPj4gU28gd2Ug ZWl0aGVyIGtlZXAgYSBHQVJUIG1hcHBpbmcgdG8gcGFnZXMgd2hpY2ggYXJlIGFib3V0IHRvIGJl IHJldXNlZCBhbmQgb3ZlcndyaXR0ZW4sIG9yIHdlIGxlYWsgbWVtb3J5IG9uIGRyaXZlciBzaHV0 ZG93bi4NCj4+IE5laXRoZXIgb3B0aW9ucyBzb3VuZHMgdmVyeSBnb29kLA0KPiBVbmJpbmRpbmcg dGhlIEdBUlQgbWFwcGluZyBtYWtlcyBDUEMgaGFuZyBpZiBpdCBydW4gTVFEIGNvbW1hbmRzLCBh bmQgDQo+IENQQyBtdXN0IHJ1biBNUUQgY29tbWFuZHMgYmVjYXVzZSBSTENWIGFsd2F5cyBSZXF1 aXJlcyBDUEMgZG8gdGhhdCANCj4gd2hlbiBSTENWIGRvaW5nIFNBVkVfVkYgY29tbWFuZHMsDQo+ DQo+IERvIHlvdSBoYXZlIHdheSB0byBmaXggYWJvdmUgY2lyY2xlID8NCg0KV2VsbCB0aGUgcXVl c3Rpb24gaXMgd2h5IGRvZXMgdGhlIENQQyBzdGlsbCBuZWVkcyB0aGUgTVFEIGNvbW1hbmRzIGFu ZCBob3cgY2FuIHdlIHByZXZlbnQgdGhhdD8NCg0KVGhlIHBvaW50IGlzIHdoZW4gd2UgbmVlZCB0 byBrZWVwIHRoZSBHQVJUIGFsaXZlIHRvIGF2b2lkIGEgY3Jhc2ggYWZ0ZXIgZHJpdmVyIHVubG9h ZCB3ZSBhbHNvIG5lZWQgdG8ga2VlcCB0aGUgcGFnZXMgYWxpdmUgd2hlcmUgdGhlIEdBUlQgcG9p bnRzIHRvLg0KDQpUaGlzIG1lYW5zIHRoYXQgdGhlIHBhZ2VzIGFyZSBlaXRoZXIgb3ZlcndyaXR0 ZW4gb3Igd2UgZ2V0IG1hc3NpdmUgY29tcGxhaW5zIGZyb20gdGhlIE1NIHRoYXQgd2UgYXJlIGxl YWtpbmcgcGFnZXMgaGVyZS4NCg0KSWYgaXQncyBub3QgcG9zc2libGUgdG8gdHVybiBvZiB0aGUg Q1BDIG9uIGRyaXZlciB1bmxvYWQgdGhlIG9ubHkgYWx0ZXJuYXRpdmUgSSBjYW4gc2VlIGlzIHRv IHJlcHJvZ3JhbSBpdCBzbyB0aGF0IHRoZSBNUUQgY29tbWFuZHMgY29tZSBmcm9tIFZSQU0gaW5z dGVhZCBvZiBHQVJULg0KDQpSZWdhcmRzLA0KQ2hyaXN0aWFuLg0KDQo+DQo+DQo+IEJSIE1vbmsN Cj4NCj4NCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdlLS0tLS0NCj4gRnJvbTogQ2hyaXN0aWFuIEvD tm5pZyBbbWFpbHRvOmNrb2VuaWcubGVpY2h0enVtZXJrZW5AZ21haWwuY29tXQ0KPiBTZW50OiAy MDE35bm0OeaciDE45pelIDE5OjU0DQo+IFRvOiBMaXUsIE1vbmsgPE1vbmsuTGl1QGFtZC5jb20+ OyBLb2VuaWcsIENocmlzdGlhbiANCj4gPENocmlzdGlhbi5Lb2VuaWdAYW1kLmNvbT47IGFtZC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+IENjOiBDaGVuLCBIb3JhY2UgPEhvcmFjZS5DaGVu QGFtZC5jb20+DQo+IFN1YmplY3Q6IFJlOiBbUEFUQ0ggMTMvMThdIGRybS9hbWRncHU6Zml4IGRy aXZlciB1bmxvYWRpbmcgYnVnDQo+DQo+IEFtIDE4LjA5LjIwMTcgdW0gMTI6MTIgc2NocmllYiBM aXUsIE1vbms6DQo+PiBDaHJpc3RpYW4sDQo+Pg0KPj4gTGV0J3MgZGlzY3VzcyB0aGlzIHBhdGNo IGFuZCB0aGUgb25lIGZvbGxvd3Mgd2hpY2ggc2tpcCB0aGUgS0lRIE1RRCBmcmVlIHRvIGF2b2lk IFNBVkVfRkFJTCBpc3N1ZS4NCj4+DQo+Pg0KPj4gRm9yIHNraXBwaW5nIEtJUSBNUUQgZGVhbGxv Y2F0aW9uIHBhdGNoLCBJIHRoaW5rIEkgd2lsbCBkcm9wIGl0IGFuZCB1c2UgYSBuZXcgd2F5Og0K Pj4gV2UgYWxsb2NhdGUgS0lRIE1RRCBpbiBWUkFNIGRvbWFpbiBhbmQgdGhpcyBCTyBjYW4gYmUg c2FmZWx5IGZyZWVkIGFmdGVyIGRyaXZlciB1bmxvYWRlZCwgYmVjYXVzZSBhZnRlciBkcml2ZXIg dW5sb2FkZWQgbm8gb25lIHdpbGwgY2hhbmdlIHRoZSBkYXRhIGluIHRoaXMgQk8gKnVzdWFsbHkq Lg0KPj4gZS5nLiBzb21lIHJvb3QgIGFwcCBjYW4gbWFwIHZpc2libGUgdnJhbSBhbmQgYWx0ZXIg dGhlIHZhbHVlIGluIGl0DQo+IFRoYXQgc291bmRzIGF0IGxlYXN0IGEgYml0IGJldHRlci4gQnV0 IG15IHF1ZXN0aW9uIGlzIHdoeSBkb2Vzbid0IHRoaXMgd29yayBsaWtlIGl0IGRvZXMgb24gVG9u Z2EsIGUuZy4gY29ycmVjdGx5IGNsZWFuIHRoaW5ncyB1cD8NCj4NCj4+IGZvciB0aGlzIHBhdGNo ICJ0byBza2lwcGluZyB1bmJpbmQgdGhlIEdBUlQgbWFwcGluZyB0byBrZWVwIEtJUSBNUUQgYWx3 YXlzIHZhbGlkIjoNCj4+IFNpbmNlIGh5cGVydmlzb3Igc2lkZSBhbHdheXMgaGF2ZSBjb3VwbGUg aHcgY29tcG9uZW50IHdvcmtpbmcsIGFuZCB0aGV5IHJlbHkgb24gR01DIGtlcHQgYWxpdmUsIHNv IHRoaXMgaXMgdmVyeSBkaWZmZXJlbnQgd2l0aCBCQVJFLU1FVEFMLiBUaGF0J3MgdG8gc2F5IHdl IGNhbiBvbmx5IGRvIGxpa2UgdGhpcyB3YXkuDQo+IFllYWgsIGd1dCBrZWVwaW5nIHRoZSBHQVJU IG1hcHBpbmcgYWxpdmUgaXMgY29tcGxldGUgbm9uc2Vuc2UuIFdoZW4gdGhlIGRyaXZlciB1bmxv YWRzIGFsbCBtZW1vcnkgc2hvdWxkIGJlIHJldHVybmVkIHRvIHRoZSBPUy4NCj4NCj4gU28gd2Ug ZWl0aGVyIGtlZXAgYSBHQVJUIG1hcHBpbmcgdG8gcGFnZXMgd2hpY2ggYXJlIGFib3V0IHRvIGJl IHJldXNlZCBhbmQgb3ZlcndyaXR0ZW4sIG9yIHdlIGxlYWsgbWVtb3J5IG9uIGRyaXZlciBzaHV0 ZG93bi4NCj4NCj4gTmVpdGhlciBvcHRpb25zIHNvdW5kcyB2ZXJ5IGdvb2QsDQo+IENocmlzdGlh bi4NCj4NCj4+IEJlc2lkZXMsIHdlJ2xsIGhhdmUgbW9yZSBwYXRjaGVzIGluIGZ1dHVyZSBmb3Ig TDEgc2VjdXJlIG1vZGUsIHdoaWNoIA0KPj4gZm9yYmlkZGVuIFZGIGFjY2VzcyBHTUMgcmVnaXN0 ZXJzLCBzbyB1bmRlciBMMSBzZWN1cmUgbW9kZSBkcml2ZXIgDQo+PiB3aWxsIGFsd2F5cyBza2lw IEdNQyBwcm9ncmFtaW5nIHVuZGVyIFNSSU9WIGJvdGggaW4gaW5pdCBhbmQgZmluaSwgDQo+PiBi dXQgdGhhdCB3aWxsIGNvbWUgbGF0ZXINCj4+DQo+PiBCUiBNb25rDQo+Pg0KPj4NCj4+DQo+PiAt LS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0KPj4gRnJvbTogQ2hyaXN0aWFuIEvDtm5pZyBbbWFp bHRvOmNrb2VuaWcubGVpY2h0enVtZXJrZW5AZ21haWwuY29tXQ0KPj4gU2VudDogMjAxN+W5tDnm nIgxOOaXpSAxNzoyOA0KPj4gVG86IExpdSwgTW9uayA8TW9uay5MaXVAYW1kLmNvbT47IGFtZC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnDQo+PiBDYzogQ2hlbiwgSG9yYWNlIDxIb3JhY2UuQ2hl bkBhbWQuY29tPg0KPj4gU3ViamVjdDogUmU6IFtQQVRDSCAxMy8xOF0gZHJtL2FtZGdwdTpmaXgg ZHJpdmVyIHVubG9hZGluZyBidWcNCj4+DQo+PiBBbSAxOC4wOS4yMDE3IHVtIDA4OjExIHNjaHJp ZWIgTW9uayBMaXU6DQo+Pj4gW1NXREVWLTEyNjYzMV0gLSBmaXggaHlwZXJ2aXNvciBzYXZlX3Zm IGZhaWwgdGhhdCBvY2N1cmVkIGFmdGVyIA0KPj4+IGRyaXZlcg0KPj4+IHJlbW92ZWQ6DQo+Pj4g MS4gQmVjYXVzZSB0aGUgS0lRIGFuZCBLQ1Egd2VyZSBub3QgdW1tYXBwZWQsIHNhdmVfdmYgd2ls bCBmYWlsIGlmIGRyaXZlciBmcmVlZCBtcWQgb2YgS0lRIGFuZCBLQ1EuDQo+Pj4gMi4gS0lRIGNh bid0IGJlIHVubWFwcGVkIHNpbmNlIFJMQ1YgYWx3YXlzIG5lZWQgaXQsIHRoZSBib19mcmVlIG9u IA0KPj4+IEtJUSBzaG91bGQgYmUgc2tpcHBlZCAzLiBLQ1EgY2FuIGJlIHVubWFwcGVkLCBhbmQg c2hvdWxkIGJlIHVubWFwcGVkIA0KPj4+IGR1cmluZyBod19maW5pLCA0LiBSTENWIHN0aWxsIG5l ZWQgdG8gYWNjZXNzIG90aGVyIG1jIGFkZHJlc3MgZnJvbSBzb21lIGh3IGV2ZW4gYWZ0ZXIgZHJp dmVyIHVubG9hZGVkLA0KPj4+ICAgICAgIFNvIHdlIHNob3VsZCBub3QgdW5iaW5kIGdhcnQgZm9y IFZGLg0KPj4+DQo+Pj4gQ2hhbmdlLUlkOiBJMzIwNDg3YTlhODQ4ZjQxNDg0YzVmOGNjMTFiZTM0 YWNhODA3YjQyNA0KPj4+IFNpZ25lZC1vZmYtYnk6IEhvcmFjZSBDaGVuIDxob3JhY2UuY2hlbkBh bWQuY29tPg0KPj4+IFNpZ25lZC1vZmYtYnk6IE1vbmsgTGl1IDxNb25rLkxpdUBhbWQuY29tPg0K Pj4gSSBhYnNvbHV0ZWx5IGNhbid0IGp1ZGdlIGlmIHRoaXMgaXMgY29ycmVjdCBvciBub3QsIGJ1 dCBrZWVwaW5nIHRoZSBHQVJUIGFuZCBLSVEgYWxpdmUgYWZ0ZXIgdGhlIGRyaXZlciBpcyB1bmxv YWRlZCBzb3VuZHMgcmVhbGx5IGZpc2h5IHRvIG1lLg0KPj4NCj4+IElzbid0IHRoZXJlIGFueSBv dGhlciBjbGVhbiB3YXkgb2YgaGFuZGxpbmcgdGhpcz8NCj4+DQo+PiBDaHJpc3RpYW4uDQo+Pg0K Pj4+IC0tLQ0KPj4+ICAgICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2FydC5j IHwgIDMgKy0NCj4+PiAgICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dmeC5j ICB8ICA1ICsrKw0KPj4+ICAgICBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjlfMC5j ICAgIHwgNjAgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKy0NCj4+PiAgICAgMyBmaWxl cyBjaGFuZ2VkLCA2NiBpbnNlcnRpb25zKCspLCAyIGRlbGV0aW9ucygtKQ0KPj4+DQo+Pj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nYXJ0LmMNCj4+PiBi L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nYXJ0LmMNCj4+PiBpbmRleCBmNDM3 MDA4Li4yZmVlMDcxIDEwMDY0NA0KPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1 L2FtZGdwdV9nYXJ0LmMNCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRn cHVfZ2FydC5jDQo+Pj4gQEAgLTM5NCw3ICszOTQsOCBAQCBpbnQgYW1kZ3B1X2dhcnRfaW5pdChz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikNCj4+PiAgICAgICovDQo+Pj4gICAgIHZvaWQgYW1k Z3B1X2dhcnRfZmluaShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikNCj4+PiAgICAgew0KPj4+ IC0JaWYgKGFkZXYtPmdhcnQucmVhZHkpIHsNCj4+PiArCS8qIGdhcnQgaXMgc3RpbGwgdXNlZCBi eSBvdGhlciBodyB1bmRlciBTUklPViwgZG9uJ3QgdW5iaW5kIGl0ICovDQo+Pj4gKwlpZiAoYWRl di0+Z2FydC5yZWFkeSAmJiAhYW1kZ3B1X3NyaW92X3ZmKGFkZXYpKSB7DQo+Pj4gICAgIAkJLyog dW5iaW5kIHBhZ2VzICovDQo+Pj4gICAgIAkJYW1kZ3B1X2dhcnRfdW5iaW5kKGFkZXYsIDAsIGFk ZXYtPmdhcnQubnVtX2NwdV9wYWdlcyk7DQo+Pj4gICAgIAl9DQo+Pj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nZnguYw0KPj4+IGIvZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dmeC5jDQo+Pj4gaW5kZXggNGY2YzY4Zi4uYmY2NjU2ZiAx MDA2NDQNCj4+PiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2Z4LmMN Cj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2Z4LmMNCj4+PiBA QCAtMzA5LDYgKzMwOSwxMSBAQCB2b2lkIGFtZGdwdV9nZnhfY29tcHV0ZV9tcWRfc3dfZmluaShz dHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikNCj4+PiAgICAgCQkJCSAgICAgICZyaW5nLT5tcWRf cHRyKTsNCj4+PiAgICAgCX0NCj4+PiAgICAgDQo+Pj4gKwkvKiBkb24ndCBkZWFsbG9jYXRlIEtJ USBtcWQgYmVjYXVzZSB0aGUgYm8gaXMgc3RpbGwgdXNlZCBieSBSTENWIGV2ZW4NCj4+PiArCXRo ZSBndWVzdCBWTSBpcyBzaHV0ZG93biAqLw0KPj4+ICsJaWYgKGFtZGdwdV9zcmlvdl92ZihhZGV2 KSkNCj4+PiArCQlyZXR1cm47DQo+Pj4gKw0KPj4+ICAgICAJcmluZyA9ICZhZGV2LT5nZngua2lx LnJpbmc7DQo+Pj4gICAgIAlrZnJlZShhZGV2LT5nZngubWVjLm1xZF9iYWNrdXBbQU1ER1BVX01B WF9DT01QVVRFX1JJTkdTXSk7DQo+Pj4gICAgIAlhbWRncHVfYm9fZnJlZV9rZXJuZWwoJnJpbmct Pm1xZF9vYmosDQo+Pj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dm eF92OV8wLmMNCj4+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dmeF92OV8wLmMNCj4+ PiBpbmRleCA0NDk2MGIzLi5hNTc3YmJjIDEwMDY0NA0KPj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2dmeF92OV8wLmMNCj4+PiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9nZnhfdjlfMC5jDQo+Pj4gQEAgLTI4OTIsMTQgKzI4OTIsNzIgQEAgc3RhdGljIGludCBn ZnhfdjlfMF9od19pbml0KHZvaWQgKmhhbmRsZSkNCj4+PiAgICAgCXJldHVybiByOw0KPj4+ICAg ICB9DQo+Pj4gICAgIA0KPj4+ICtzdGF0aWMgaW50IGdmeF92OV8wX2tjcV9kaXNhYmxlKHN0cnVj dCBhbWRncHVfcmluZyAqa2lxX3Jpbmcsc3RydWN0IA0KPj4+ICthbWRncHVfcmluZyAqcmluZykg ew0KPj4+ICsJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYgPSBraXFfcmluZy0+YWRldjsNCj4+ PiArCXVpbnQzMl90IHNjcmF0Y2gsIHRtcCA9IDA7DQo+Pj4gKwlpbnQgciwgaTsNCj4+PiArDQo+ Pj4gKwlyID0gYW1kZ3B1X2dmeF9zY3JhdGNoX2dldChhZGV2LCAmc2NyYXRjaCk7DQo+Pj4gKwlp ZiAocikgew0KPj4+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGdldCBzY3JhdGNoIHJlZyAoJWQp LlxuIiwgcik7DQo+Pj4gKwkJcmV0dXJuIHI7DQo+Pj4gKwl9DQo+Pj4gKwlXUkVHMzIoc2NyYXRj aCwgMHhDQUZFREVBRCk7DQo+Pj4gKw0KPj4+ICsJciA9IGFtZGdwdV9yaW5nX2FsbG9jKGtpcV9y aW5nLCAxMCk7DQo+Pj4gKwlpZiAocikgew0KPj4+ICsJCURSTV9FUlJPUigiRmFpbGVkIHRvIGxv Y2sgS0lRICglZCkuXG4iLCByKTsNCj4+PiArCQlhbWRncHVfZ2Z4X3NjcmF0Y2hfZnJlZShhZGV2 LCBzY3JhdGNoKTsNCj4+PiArCQlyZXR1cm4gcjsNCj4+PiArCX0NCj4+PiArDQo+Pj4gKwkvKiB1 bm1hcCBxdWV1ZXMgKi8NCj4+PiArCWFtZGdwdV9yaW5nX3dyaXRlKGtpcV9yaW5nLCBQQUNLRVQz KFBBQ0tFVDNfVU5NQVBfUVVFVUVTLCA0KSk7DQo+Pj4gKwlhbWRncHVfcmluZ193cml0ZShraXFf cmluZywgLyogUV9zZWw6IDAsIHZtaWQ6IDAsIGVuZ2luZTogMCwgbnVtX1E6IDEgKi8NCj4+PiAr CQkJCQkJUEFDS0VUM19VTk1BUF9RVUVVRVNfQUNUSU9OKDEpIHwgLyogUkVTRVRfUVVFVUVTICov DQo+Pj4gKwkJCQkJCVBBQ0tFVDNfVU5NQVBfUVVFVUVTX1FVRVVFX1NFTCgwKSB8DQo+Pj4gKwkJ CQkJCVBBQ0tFVDNfVU5NQVBfUVVFVUVTX0VOR0lORV9TRUwoMCkgfA0KPj4+ICsJCQkJCQlQQUNL RVQzX1VOTUFQX1FVRVVFU19OVU1fUVVFVUVTKDEpKTsNCj4+PiArCWFtZGdwdV9yaW5nX3dyaXRl KGtpcV9yaW5nLCBQQUNLRVQzX1VOTUFQX1FVRVVFU19ET09SQkVMTF9PRkZTRVQwKHJpbmctPmRv b3JiZWxsX2luZGV4KSk7DQo+Pj4gKwlhbWRncHVfcmluZ193cml0ZShraXFfcmluZywgMCk7DQo+ Pj4gKwlhbWRncHVfcmluZ193cml0ZShraXFfcmluZywgMCk7DQo+Pj4gKwlhbWRncHVfcmluZ193 cml0ZShraXFfcmluZywgMCk7DQo+Pj4gKwkvKiB3cml0ZSB0byBzY3JhdGNoIGZvciBjb21wbGV0 aW9uICovDQo+Pj4gKwlhbWRncHVfcmluZ193cml0ZShraXFfcmluZywgUEFDS0VUMyhQQUNLRVQz X1NFVF9VQ09ORklHX1JFRywgMSkpOw0KPj4+ICsJYW1kZ3B1X3Jpbmdfd3JpdGUoa2lxX3Jpbmcs IChzY3JhdGNoIC0gUEFDS0VUM19TRVRfVUNPTkZJR19SRUdfU1RBUlQpKTsNCj4+PiArCWFtZGdw dV9yaW5nX3dyaXRlKGtpcV9yaW5nLCAweERFQURCRUVGKTsNCj4+PiArCWFtZGdwdV9yaW5nX2Nv bW1pdChraXFfcmluZyk7DQo+Pj4gKw0KPj4+ICsJZm9yIChpID0gMDsgaSA8IGFkZXYtPnVzZWNf dGltZW91dDsgaSsrKSB7DQo+Pj4gKwkJdG1wID0gUlJFRzMyKHNjcmF0Y2gpOw0KPj4+ICsJCWlm ICh0bXAgPT0gMHhERUFEQkVFRikNCj4+PiArCQkJYnJlYWs7DQo+Pj4gKwkJRFJNX1VERUxBWSgx KTsNCj4+PiArCX0NCj4+PiArCWlmIChpID49IGFkZXYtPnVzZWNfdGltZW91dCkgew0KPj4+ICsJ CURSTV9FUlJPUigiS0NRIGRpc2FibGVkIGZhaWxlZCAoc2NyYXRjaCgweCUwNFgpPTB4JTA4WClc biIsIHNjcmF0Y2gsIHRtcCk7DQo+Pj4gKwkJciA9IC1FSU5WQUw7DQo+Pj4gKwl9DQo+Pj4gKwlh bWRncHVfZ2Z4X3NjcmF0Y2hfZnJlZShhZGV2LCBzY3JhdGNoKTsNCj4+PiArCXJldHVybiByOw0K Pj4+ICt9DQo+Pj4gKw0KPj4+ICsNCj4+PiAgICAgc3RhdGljIGludCBnZnhfdjlfMF9od19maW5p KHZvaWQgKmhhbmRsZSkNCj4+PiAgICAgew0KPj4+ICAgICAJc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7DQo+Pj4gKwlpbnQgaSwgcjsN Cj4+PiAgICAgDQo+Pj4gICAgIAlhbWRncHVfaXJxX3B1dChhZGV2LCAmYWRldi0+Z2Z4LnByaXZf cmVnX2lycSwgMCk7DQo+Pj4gICAgIAlhbWRncHVfaXJxX3B1dChhZGV2LCAmYWRldi0+Z2Z4LnBy aXZfaW5zdF9pcnEsIDApOw0KPj4+ICAgICAJaWYgKGFtZGdwdV9zcmlvdl92ZihhZGV2KSkgew0K Pj4+IC0JCXByX2RlYnVnKCJGb3IgU1JJT1YgY2xpZW50LCBzaG91bGRuJ3QgZG8gYW55dGhpbmcu XG4iKTsNCj4+PiArCQkvKiBkaXNhYmxlIEtDUSB0byBhdm9pZCBDUEMgdG91Y2ggbWVtb3J5IG5v dCB2YWxpZCBhbnltb3JlICovDQo+Pj4gKwkJZm9yIChpID0gMDsgaSA8IGFkZXYtPmdmeC5udW1f Y29tcHV0ZV9yaW5nczsgaSsrKSB7DQo+Pj4gKwkJCXIgPSBnZnhfdjlfMF9rY3FfZGlzYWJsZSgm YWRldi0+Z2Z4LmtpcS5yaW5nLCAmYWRldi0+Z2Z4LmNvbXB1dGVfcmluZ1tpXSk7DQo+Pj4gKwkJ CWlmIChyKQ0KPj4+ICsJCQkJcmV0dXJuIHI7DQo+Pj4gKwkJfQ0KPj4+ICAgICAJCXJldHVybiAw Ow0KPj4+ICAgICAJfQ0KPj4+ICAgICAJZ2Z4X3Y5XzBfY3BfZW5hYmxlKGFkZXYsIGZhbHNlKTsN Cj4+IF9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fDQo+PiBh bWQtZ2Z4IG1haWxpbmcgbGlzdA0KPj4gYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCj4+ IGh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeA0K Pg0KPiBfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXw0KPiBh bWQtZ2Z4IG1haWxpbmcgbGlzdA0KPiBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZw0KPiBo dHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngNCg0K DQpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4 IG1haWxpbmcgbGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3Rz LmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK