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 04:14:27 +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> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: 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" Q2hyaXN0aWFuLCANCg0KPiBUaGF0IHNvdW5kcyBhdCBsZWFzdCBhIGJpdCBiZXR0ZXIuIEJ1dCBt eSBxdWVzdGlvbiBpcyB3aHkgZG9lc24ndCB0aGlzIHdvcmsgbGlrZSBpdCBkb2VzIG9uIFRvbmdh LCBlLmcuIGNvcnJlY3RseSBjbGVhbiB0aGluZ3MgdXA/DQpUb25nYSBhbHNvIHN1ZmZlciB3aXRo IHRoaXMgaXNzdWUsIGp1c3QgdGhhdCB3ZSBmaXhlZCBpdCBpbiB0aGUgYnJhbmNoIGZvciBDU1Ag Y3VzdG9tZXIgYW5kIHN0YWdpbmcgY29kZSB1c3VhbGx5IGJlaGluZCBvdXIgcHJpdmF0ZSBicmFu Y2ggLi4uDQoNCj4gWWVhaCwgZ3V0IGtlZXBpbmcgdGhlIEdBUlQgbWFwcGluZyBhbGl2ZSBpcyBj b21wbGV0ZSBub25zZW5zZS4gV2hlbiB0aGUgZHJpdmVyIHVubG9hZHMgYWxsIG1lbW9yeSBzaG91 bGQgYmUgcmV0dXJuZWQgdG8gdGhlIE9TLg0KDQo+U28gd2UgZWl0aGVyIGtlZXAgYSBHQVJUIG1h cHBpbmcgdG8gcGFnZXMgd2hpY2ggYXJlIGFib3V0IHRvIGJlIHJldXNlZCBhbmQgb3ZlcndyaXR0 ZW4sIG9yIHdlIGxlYWsgbWVtb3J5IG9uIGRyaXZlciBzaHV0ZG93bi4NCg0KPk5laXRoZXIgb3B0 aW9ucyBzb3VuZHMgdmVyeSBnb29kLA0KDQpVbmJpbmRpbmcgdGhlIEdBUlQgbWFwcGluZyBtYWtl cyBDUEMgaGFuZyBpZiBpdCBydW4gTVFEIGNvbW1hbmRzLCBhbmQgQ1BDIG11c3QgcnVuIE1RRCBj b21tYW5kcyBiZWNhdXNlIFJMQ1YgYWx3YXlzDQpSZXF1aXJlcyBDUEMgZG8gdGhhdCB3aGVuIFJM Q1YgZG9pbmcgU0FWRV9WRiBjb21tYW5kcywNCg0KRG8geW91IGhhdmUgd2F5IHRvIGZpeCBhYm92 ZSBjaXJjbGUgPw0KDQoNCkJSIE1vbmsNCg0KDQotLS0tLU9yaWdpbmFsIE1lc3NhZ2UtLS0tLQ0K RnJvbTogQ2hyaXN0aWFuIEvDtm5pZyBbbWFpbHRvOmNrb2VuaWcubGVpY2h0enVtZXJrZW5AZ21h aWwuY29tXSANClNlbnQ6IDIwMTflubQ55pyIMTjml6UgMTk6NTQNClRvOiBMaXUsIE1vbmsgPE1v bmsuTGl1QGFtZC5jb20+OyBLb2VuaWcsIENocmlzdGlhbiA8Q2hyaXN0aWFuLktvZW5pZ0BhbWQu Y29tPjsgYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCkNjOiBDaGVuLCBIb3JhY2UgPEhv cmFjZS5DaGVuQGFtZC5jb20+DQpTdWJqZWN0OiBSZTogW1BBVENIIDEzLzE4XSBkcm0vYW1kZ3B1 OmZpeCBkcml2ZXIgdW5sb2FkaW5nIGJ1Zw0KDQpBbSAxOC4wOS4yMDE3IHVtIDEyOjEyIHNjaHJp ZWIgTGl1LCBNb25rOg0KPiBDaHJpc3RpYW4sDQo+DQo+IExldCdzIGRpc2N1c3MgdGhpcyBwYXRj aCBhbmQgdGhlIG9uZSBmb2xsb3dzIHdoaWNoIHNraXAgdGhlIEtJUSBNUUQgZnJlZSB0byBhdm9p ZCBTQVZFX0ZBSUwgaXNzdWUuDQo+DQo+DQo+IEZvciBza2lwcGluZyBLSVEgTVFEIGRlYWxsb2Nh dGlvbiBwYXRjaCwgSSB0aGluayBJIHdpbGwgZHJvcCBpdCBhbmQgdXNlIGEgbmV3IHdheToNCj4g V2UgYWxsb2NhdGUgS0lRIE1RRCBpbiBWUkFNIGRvbWFpbiBhbmQgdGhpcyBCTyBjYW4gYmUgc2Fm ZWx5IGZyZWVkIGFmdGVyIGRyaXZlciB1bmxvYWRlZCwgYmVjYXVzZSBhZnRlciBkcml2ZXIgdW5s b2FkZWQgbm8gb25lIHdpbGwgY2hhbmdlIHRoZSBkYXRhIGluIHRoaXMgQk8gKnVzdWFsbHkqLg0K PiBlLmcuIHNvbWUgcm9vdCAgYXBwIGNhbiBtYXAgdmlzaWJsZSB2cmFtIGFuZCBhbHRlciB0aGUg dmFsdWUgaW4gaXQNCg0KVGhhdCBzb3VuZHMgYXQgbGVhc3QgYSBiaXQgYmV0dGVyLiBCdXQgbXkg cXVlc3Rpb24gaXMgd2h5IGRvZXNuJ3QgdGhpcyB3b3JrIGxpa2UgaXQgZG9lcyBvbiBUb25nYSwg ZS5nLiBjb3JyZWN0bHkgY2xlYW4gdGhpbmdzIHVwPw0KDQo+DQo+IGZvciB0aGlzIHBhdGNoICJ0 byBza2lwcGluZyB1bmJpbmQgdGhlIEdBUlQgbWFwcGluZyB0byBrZWVwIEtJUSBNUUQgYWx3YXlz IHZhbGlkIjoNCj4gU2luY2UgaHlwZXJ2aXNvciBzaWRlIGFsd2F5cyBoYXZlIGNvdXBsZSBodyBj b21wb25lbnQgd29ya2luZywgYW5kIHRoZXkgcmVseSBvbiBHTUMga2VwdCBhbGl2ZSwgc28gdGhp cyBpcyB2ZXJ5IGRpZmZlcmVudCB3aXRoIEJBUkUtTUVUQUwuIFRoYXQncyB0byBzYXkgd2UgY2Fu IG9ubHkgZG8gbGlrZSB0aGlzIHdheS4NCg0KWWVhaCwgZ3V0IGtlZXBpbmcgdGhlIEdBUlQgbWFw cGluZyBhbGl2ZSBpcyBjb21wbGV0ZSBub25zZW5zZS4gV2hlbiB0aGUgZHJpdmVyIHVubG9hZHMg YWxsIG1lbW9yeSBzaG91bGQgYmUgcmV0dXJuZWQgdG8gdGhlIE9TLg0KDQpTbyB3ZSBlaXRoZXIg a2VlcCBhIEdBUlQgbWFwcGluZyB0byBwYWdlcyB3aGljaCBhcmUgYWJvdXQgdG8gYmUgcmV1c2Vk IGFuZCBvdmVyd3JpdHRlbiwgb3Igd2UgbGVhayBtZW1vcnkgb24gZHJpdmVyIHNodXRkb3duLg0K DQpOZWl0aGVyIG9wdGlvbnMgc291bmRzIHZlcnkgZ29vZCwNCkNocmlzdGlhbi4NCg0KPg0KPiBC ZXNpZGVzLCB3ZSdsbCBoYXZlIG1vcmUgcGF0Y2hlcyBpbiBmdXR1cmUgZm9yIEwxIHNlY3VyZSBt b2RlLCB3aGljaCANCj4gZm9yYmlkZGVuIFZGIGFjY2VzcyBHTUMgcmVnaXN0ZXJzLCBzbyB1bmRl ciBMMSBzZWN1cmUgbW9kZSBkcml2ZXIgd2lsbCANCj4gYWx3YXlzIHNraXAgR01DIHByb2dyYW1p bmcgdW5kZXIgU1JJT1YgYm90aCBpbiBpbml0IGFuZCBmaW5pLCBidXQgdGhhdCANCj4gd2lsbCBj b21lIGxhdGVyDQo+DQo+IEJSIE1vbmsNCj4NCj4NCj4NCj4gLS0tLS1PcmlnaW5hbCBNZXNzYWdl LS0tLS0NCj4gRnJvbTogQ2hyaXN0aWFuIEvDtm5pZyBbbWFpbHRvOmNrb2VuaWcubGVpY2h0enVt ZXJrZW5AZ21haWwuY29tXQ0KPiBTZW50OiAyMDE35bm0OeaciDE45pelIDE3OjI4DQo+IFRvOiBM aXUsIE1vbmsgPE1vbmsuTGl1QGFtZC5jb20+OyBhbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9y Zw0KPiBDYzogQ2hlbiwgSG9yYWNlIDxIb3JhY2UuQ2hlbkBhbWQuY29tPg0KPiBTdWJqZWN0OiBS ZTogW1BBVENIIDEzLzE4XSBkcm0vYW1kZ3B1OmZpeCBkcml2ZXIgdW5sb2FkaW5nIGJ1Zw0KPg0K PiBBbSAxOC4wOS4yMDE3IHVtIDA4OjExIHNjaHJpZWIgTW9uayBMaXU6DQo+PiBbU1dERVYtMTI2 NjMxXSAtIGZpeCBoeXBlcnZpc29yIHNhdmVfdmYgZmFpbCB0aGF0IG9jY3VyZWQgYWZ0ZXIgDQo+ PiBkcml2ZXINCj4+IHJlbW92ZWQ6DQo+PiAxLiBCZWNhdXNlIHRoZSBLSVEgYW5kIEtDUSB3ZXJl IG5vdCB1bW1hcHBlZCwgc2F2ZV92ZiB3aWxsIGZhaWwgaWYgZHJpdmVyIGZyZWVkIG1xZCBvZiBL SVEgYW5kIEtDUS4NCj4+IDIuIEtJUSBjYW4ndCBiZSB1bm1hcHBlZCBzaW5jZSBSTENWIGFsd2F5 cyBuZWVkIGl0LCB0aGUgYm9fZnJlZSBvbiANCj4+IEtJUSBzaG91bGQgYmUgc2tpcHBlZCAzLiBL Q1EgY2FuIGJlIHVubWFwcGVkLCBhbmQgc2hvdWxkIGJlIHVubWFwcGVkIA0KPj4gZHVyaW5nIGh3 X2ZpbmksIDQuIFJMQ1Ygc3RpbGwgbmVlZCB0byBhY2Nlc3Mgb3RoZXIgbWMgYWRkcmVzcyBmcm9t IHNvbWUgaHcgZXZlbiBhZnRlciBkcml2ZXIgdW5sb2FkZWQsDQo+PiAgICAgIFNvIHdlIHNob3Vs ZCBub3QgdW5iaW5kIGdhcnQgZm9yIFZGLg0KPj4NCj4+IENoYW5nZS1JZDogSTMyMDQ4N2E5YTg0 OGY0MTQ4NGM1ZjhjYzExYmUzNGFjYTgwN2I0MjQNCj4+IFNpZ25lZC1vZmYtYnk6IEhvcmFjZSBD aGVuIDxob3JhY2UuY2hlbkBhbWQuY29tPg0KPj4gU2lnbmVkLW9mZi1ieTogTW9uayBMaXUgPE1v bmsuTGl1QGFtZC5jb20+DQo+IEkgYWJzb2x1dGVseSBjYW4ndCBqdWRnZSBpZiB0aGlzIGlzIGNv cnJlY3Qgb3Igbm90LCBidXQga2VlcGluZyB0aGUgR0FSVCBhbmQgS0lRIGFsaXZlIGFmdGVyIHRo ZSBkcml2ZXIgaXMgdW5sb2FkZWQgc291bmRzIHJlYWxseSBmaXNoeSB0byBtZS4NCj4NCj4gSXNu J3QgdGhlcmUgYW55IG90aGVyIGNsZWFuIHdheSBvZiBoYW5kbGluZyB0aGlzPw0KPg0KPiBDaHJp c3RpYW4uDQo+DQo+PiAtLS0NCj4+ICAgIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdw dV9nYXJ0LmMgfCAgMyArLQ0KPj4gICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1 X2dmeC5jICB8ICA1ICsrKw0KPj4gICAgZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvZ2Z4X3Y5 XzAuYyAgICB8IDYwICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKystDQo+PiAgICAzIGZp bGVzIGNoYW5nZWQsIDY2IGluc2VydGlvbnMoKyksIDIgZGVsZXRpb25zKC0pDQo+Pg0KPj4gZGlm ZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9nYXJ0LmMNCj4+IGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2dhcnQuYw0KPj4gaW5kZXggZjQzNzAw OC4uMmZlZTA3MSAxMDA2NDQNCj4+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9nYXJ0LmMNCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9n YXJ0LmMNCj4+IEBAIC0zOTQsNyArMzk0LDggQEAgaW50IGFtZGdwdV9nYXJ0X2luaXQoc3RydWN0 IGFtZGdwdV9kZXZpY2UgKmFkZXYpDQo+PiAgICAgKi8NCj4+ICAgIHZvaWQgYW1kZ3B1X2dhcnRf ZmluaShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldikNCj4+ICAgIHsNCj4+IC0JaWYgKGFkZXYt PmdhcnQucmVhZHkpIHsNCj4+ICsJLyogZ2FydCBpcyBzdGlsbCB1c2VkIGJ5IG90aGVyIGh3IHVu ZGVyIFNSSU9WLCBkb24ndCB1bmJpbmQgaXQgKi8NCj4+ICsJaWYgKGFkZXYtPmdhcnQucmVhZHkg JiYgIWFtZGdwdV9zcmlvdl92ZihhZGV2KSkgew0KPj4gICAgCQkvKiB1bmJpbmQgcGFnZXMgKi8N Cj4+ICAgIAkJYW1kZ3B1X2dhcnRfdW5iaW5kKGFkZXYsIDAsIGFkZXYtPmdhcnQubnVtX2NwdV9w YWdlcyk7DQo+PiAgICAJfQ0KPj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1k Z3B1L2FtZGdwdV9nZnguYw0KPj4gYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf Z2Z4LmMNCj4+IGluZGV4IDRmNmM2OGYuLmJmNjY1NmYgMTAwNjQ0DQo+PiAtLS0gYS9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZ2Z4LmMNCj4+ICsrKyBiL2RyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9nZnguYw0KPj4gQEAgLTMwOSw2ICszMDksMTEgQEAgdm9pZCBh bWRncHVfZ2Z4X2NvbXB1dGVfbXFkX3N3X2Zpbmkoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYp DQo+PiAgICAJCQkJICAgICAgJnJpbmctPm1xZF9wdHIpOw0KPj4gICAgCX0NCj4+ICAgIA0KPj4g KwkvKiBkb24ndCBkZWFsbG9jYXRlIEtJUSBtcWQgYmVjYXVzZSB0aGUgYm8gaXMgc3RpbGwgdXNl ZCBieSBSTENWIGV2ZW4NCj4+ICsJdGhlIGd1ZXN0IFZNIGlzIHNodXRkb3duICovDQo+PiArCWlm IChhbWRncHVfc3Jpb3ZfdmYoYWRldikpDQo+PiArCQlyZXR1cm47DQo+PiArDQo+PiAgICAJcmlu ZyA9ICZhZGV2LT5nZngua2lxLnJpbmc7DQo+PiAgICAJa2ZyZWUoYWRldi0+Z2Z4Lm1lYy5tcWRf YmFja3VwW0FNREdQVV9NQVhfQ09NUFVURV9SSU5HU10pOw0KPj4gICAgCWFtZGdwdV9ib19mcmVl X2tlcm5lbCgmcmluZy0+bXFkX29iaiwNCj4+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9nZnhfdjlfMC5jDQo+PiBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2dm eF92OV8wLmMNCj4+IGluZGV4IDQ0OTYwYjMuLmE1NzdiYmMgMTAwNjQ0DQo+PiAtLS0gYS9kcml2 ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9nZnhfdjlfMC5jDQo+PiArKysgYi9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9nZnhfdjlfMC5jDQo+PiBAQCAtMjg5MiwxNCArMjg5Miw3MiBAQCBzdGF0 aWMgaW50IGdmeF92OV8wX2h3X2luaXQodm9pZCAqaGFuZGxlKQ0KPj4gICAgCXJldHVybiByOw0K Pj4gICAgfQ0KPj4gICAgDQo+PiArc3RhdGljIGludCBnZnhfdjlfMF9rY3FfZGlzYWJsZShzdHJ1 Y3QgYW1kZ3B1X3JpbmcgKmtpcV9yaW5nLHN0cnVjdCANCj4+ICthbWRncHVfcmluZyAqcmluZykg ew0KPj4gKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IGtpcV9yaW5nLT5hZGV2Ow0KPj4g Kwl1aW50MzJfdCBzY3JhdGNoLCB0bXAgPSAwOw0KPj4gKwlpbnQgciwgaTsNCj4+ICsNCj4+ICsJ ciA9IGFtZGdwdV9nZnhfc2NyYXRjaF9nZXQoYWRldiwgJnNjcmF0Y2gpOw0KPj4gKwlpZiAocikg ew0KPj4gKwkJRFJNX0VSUk9SKCJGYWlsZWQgdG8gZ2V0IHNjcmF0Y2ggcmVnICglZCkuXG4iLCBy KTsNCj4+ICsJCXJldHVybiByOw0KPj4gKwl9DQo+PiArCVdSRUczMihzY3JhdGNoLCAweENBRkVE RUFEKTsNCj4+ICsNCj4+ICsJciA9IGFtZGdwdV9yaW5nX2FsbG9jKGtpcV9yaW5nLCAxMCk7DQo+ PiArCWlmIChyKSB7DQo+PiArCQlEUk1fRVJST1IoIkZhaWxlZCB0byBsb2NrIEtJUSAoJWQpLlxu Iiwgcik7DQo+PiArCQlhbWRncHVfZ2Z4X3NjcmF0Y2hfZnJlZShhZGV2LCBzY3JhdGNoKTsNCj4+ ICsJCXJldHVybiByOw0KPj4gKwl9DQo+PiArDQo+PiArCS8qIHVubWFwIHF1ZXVlcyAqLw0KPj4g KwlhbWRncHVfcmluZ193cml0ZShraXFfcmluZywgUEFDS0VUMyhQQUNLRVQzX1VOTUFQX1FVRVVF UywgNCkpOw0KPj4gKwlhbWRncHVfcmluZ193cml0ZShraXFfcmluZywgLyogUV9zZWw6IDAsIHZt aWQ6IDAsIGVuZ2luZTogMCwgbnVtX1E6IDEgKi8NCj4+ICsJCQkJCQlQQUNLRVQzX1VOTUFQX1FV RVVFU19BQ1RJT04oMSkgfCAvKiBSRVNFVF9RVUVVRVMgKi8NCj4+ICsJCQkJCQlQQUNLRVQzX1VO TUFQX1FVRVVFU19RVUVVRV9TRUwoMCkgfA0KPj4gKwkJCQkJCVBBQ0tFVDNfVU5NQVBfUVVFVUVT X0VOR0lORV9TRUwoMCkgfA0KPj4gKwkJCQkJCVBBQ0tFVDNfVU5NQVBfUVVFVUVTX05VTV9RVUVV RVMoMSkpOw0KPj4gKwlhbWRncHVfcmluZ193cml0ZShraXFfcmluZywgUEFDS0VUM19VTk1BUF9R VUVVRVNfRE9PUkJFTExfT0ZGU0VUMChyaW5nLT5kb29yYmVsbF9pbmRleCkpOw0KPj4gKwlhbWRn cHVfcmluZ193cml0ZShraXFfcmluZywgMCk7DQo+PiArCWFtZGdwdV9yaW5nX3dyaXRlKGtpcV9y aW5nLCAwKTsNCj4+ICsJYW1kZ3B1X3Jpbmdfd3JpdGUoa2lxX3JpbmcsIDApOw0KPj4gKwkvKiB3 cml0ZSB0byBzY3JhdGNoIGZvciBjb21wbGV0aW9uICovDQo+PiArCWFtZGdwdV9yaW5nX3dyaXRl KGtpcV9yaW5nLCBQQUNLRVQzKFBBQ0tFVDNfU0VUX1VDT05GSUdfUkVHLCAxKSk7DQo+PiArCWFt ZGdwdV9yaW5nX3dyaXRlKGtpcV9yaW5nLCAoc2NyYXRjaCAtIFBBQ0tFVDNfU0VUX1VDT05GSUdf UkVHX1NUQVJUKSk7DQo+PiArCWFtZGdwdV9yaW5nX3dyaXRlKGtpcV9yaW5nLCAweERFQURCRUVG KTsNCj4+ICsJYW1kZ3B1X3JpbmdfY29tbWl0KGtpcV9yaW5nKTsNCj4+ICsNCj4+ICsJZm9yIChp ID0gMDsgaSA8IGFkZXYtPnVzZWNfdGltZW91dDsgaSsrKSB7DQo+PiArCQl0bXAgPSBSUkVHMzIo c2NyYXRjaCk7DQo+PiArCQlpZiAodG1wID09IDB4REVBREJFRUYpDQo+PiArCQkJYnJlYWs7DQo+ PiArCQlEUk1fVURFTEFZKDEpOw0KPj4gKwl9DQo+PiArCWlmIChpID49IGFkZXYtPnVzZWNfdGlt ZW91dCkgew0KPj4gKwkJRFJNX0VSUk9SKCJLQ1EgZGlzYWJsZWQgZmFpbGVkIChzY3JhdGNoKDB4 JTA0WCk9MHglMDhYKVxuIiwgc2NyYXRjaCwgdG1wKTsNCj4+ICsJCXIgPSAtRUlOVkFMOw0KPj4g Kwl9DQo+PiArCWFtZGdwdV9nZnhfc2NyYXRjaF9mcmVlKGFkZXYsIHNjcmF0Y2gpOw0KPj4gKwly ZXR1cm4gcjsNCj4+ICt9DQo+PiArDQo+PiArDQo+PiAgICBzdGF0aWMgaW50IGdmeF92OV8wX2h3 X2Zpbmkodm9pZCAqaGFuZGxlKQ0KPj4gICAgew0KPj4gICAgCXN0cnVjdCBhbWRncHVfZGV2aWNl ICphZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopaGFuZGxlOw0KPj4gKwlpbnQgaSwgcjsN Cj4+ICAgIA0KPj4gICAgCWFtZGdwdV9pcnFfcHV0KGFkZXYsICZhZGV2LT5nZngucHJpdl9yZWdf aXJxLCAwKTsNCj4+ICAgIAlhbWRncHVfaXJxX3B1dChhZGV2LCAmYWRldi0+Z2Z4LnByaXZfaW5z dF9pcnEsIDApOw0KPj4gICAgCWlmIChhbWRncHVfc3Jpb3ZfdmYoYWRldikpIHsNCj4+IC0JCXBy X2RlYnVnKCJGb3IgU1JJT1YgY2xpZW50LCBzaG91bGRuJ3QgZG8gYW55dGhpbmcuXG4iKTsNCj4+ ICsJCS8qIGRpc2FibGUgS0NRIHRvIGF2b2lkIENQQyB0b3VjaCBtZW1vcnkgbm90IHZhbGlkIGFu eW1vcmUgKi8NCj4+ICsJCWZvciAoaSA9IDA7IGkgPCBhZGV2LT5nZngubnVtX2NvbXB1dGVfcmlu Z3M7IGkrKykgew0KPj4gKwkJCXIgPSBnZnhfdjlfMF9rY3FfZGlzYWJsZSgmYWRldi0+Z2Z4Lmtp cS5yaW5nLCAmYWRldi0+Z2Z4LmNvbXB1dGVfcmluZ1tpXSk7DQo+PiArCQkJaWYgKHIpDQo+PiAr CQkJCXJldHVybiByOw0KPj4gKwkJfQ0KPj4gICAgCQlyZXR1cm4gMDsNCj4+ICAgIAl9DQo+PiAg ICAJZ2Z4X3Y5XzBfY3BfZW5hYmxlKGFkZXYsIGZhbHNlKTsNCj4NCj4gX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18NCj4gYW1kLWdmeCBtYWlsaW5nIGxpc3QN Cj4gYW1kLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcNCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9hbWQtZ2Z4DQoNCg0KX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX18KYW1kLWdmeCBtYWlsaW5nIGxpc3QKYW1kLWdm eEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFp bG1hbi9saXN0aW5mby9hbWQtZ2Z4Cg==