From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?Q?Christian_K=c3=b6nig?= Subject: Re: [PATCH 2/4] drm/amdgpu: cleanups for vram lost handling Date: Wed, 28 Feb 2018 13:22:34 +0100 Message-ID: <7b2cc0f2-fa4e-758e-1395-24d7bd48c898@gmail.com> References: <1519802463-9090-1-git-send-email-Monk.Liu@amd.com> <1519802463-9090-2-git-send-email-Monk.Liu@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: <1519802463-9090-2-git-send-email-Monk.Liu-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: Monk Liu , amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org QW0gMjguMDIuMjAxOCB1bSAwODoyMSBzY2hyaWViIE1vbmsgTGl1Ogo+IDEpY3JlYXRlIGEgcm91 dGluZSAiaGFuZGxlX3ZyYW1fbG9zdCIgdG8gZG8gdGhlIHZyYW0KPiByZWNvdmVyeSwgYW5kIHB1 dCBpdCBpbnRvIGFtZGdwdV9kZXZpY2VfcmVzZXQvcmVzZXRfc3Jpb3YsCj4gdGhpcyB3YXkgbm8g bmVlZCBvZiB0aGUgZXh0cmEgcGFyYW10ZXIgdG8gaG9sZCB0aGUKPiBWUkFNIExPU1QgaW5mb3Jt YXRpb24gYW5kIHRoZSByZWxhdGVkIG1hY3JvcyBjYW4gYmUgcmVtb3ZlZC4KPgo+IDMpc2hvdyB2 cmFtX3JlY292ZXIgZmFpbHVyZSBpZiB0aW1lIG91dCwgYW5kIHNldCBUTU8gZXF1YWwgdG8KPiBs b2NrdXBfdGltZW91dCBpZiB2cmFtX3JlY292ZXIgaXMgdW5kZXIgU1JJT1YgcnVudGltZSBtb2Rl Lgo+Cj4gNClyZXBvcnQgZXJyb3IgaWYgYW55IGlwIHJlc2V0IGZhaWxlZCBmb3IgU1ItSU9WCj4K PiBDaGFuZ2UtSWQ6IEk2ODZlMmI2MTMzODQ0YzE0OTQ4YzIwNmEyMzE1YzA2NGE3OGMxZDljCj4g U2lnbmVkLW9mZi1ieTogTW9uayBMaXUgPE1vbmsuTGl1QGFtZC5jb20+CgpMb29rcyBnb29kIHRv IG1lLCBidXQgbm90IDEwMCUgc3VyZSBpZiBhbGwgb2YgdGhpcyBpcyB0ZWNobmljYWxseSBjb3Jy ZWN0LgoKUGF0Y2ggaXMgQWNrZWQtYnk6IENocmlzdGlhbiBLw7ZuaWcgPGNocmlzdGlhbi5rb2Vu aWdAYW1kLmNvbT4gZm9yIG5vdy4KCkFuZHJleSBhbmQvb3IgRGF2aWQgc2hvdWxkIHByb2JhYmx5 IHRha2UgYSBsb29rIGFzIHdlbGwuCgpDaHJpc3RpYW4uCgo+IC0tLQo+ICAgZHJpdmVycy9ncHUv ZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmggICAgICAgIHwgICA0IC0KPiAgIGRyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYyB8IDEzNiArKysrKysrKysrKysrKystLS0tLS0t LS0tLS0tLQo+ICAgMiBmaWxlcyBjaGFuZ2VkLCA3MiBpbnNlcnRpb25zKCspLCA2OCBkZWxldGlv bnMoLSkKPgo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUu aCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oCj4gaW5kZXggNWJkZGZjMS4u YWJiYzNmMSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHUu aAo+ICsrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oCj4gQEAgLTE4MSwx MCArMTgxLDYgQEAgZXh0ZXJuIGludCBhbWRncHVfY2lrX3N1cHBvcnQ7Cj4gICAjZGVmaW5lIENJ S19DVVJTT1JfV0lEVEggMTI4Cj4gICAjZGVmaW5lIENJS19DVVJTT1JfSEVJR0hUIDEyOAo+ICAg Cj4gLS8qIEdQVSBSRVNFVCBmbGFncyAqLwo+IC0jZGVmaW5lIEFNREdQVV9SRVNFVF9JTkZPX1ZS QU1fTE9TVCAgKDEgPDwgMCkKPiAtI2RlZmluZSBBTURHUFVfUkVTRVRfSU5GT19GVUxMUkVTRVQg ICgxIDw8IDEpCj4gLQo+ICAgc3RydWN0IGFtZGdwdV9kZXZpY2U7Cj4gICBzdHJ1Y3QgYW1kZ3B1 X2liOwo+ICAgc3RydWN0IGFtZGdwdV9jc19wYXJzZXI7Cj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMv Z3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kZXZpY2UuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9kZXZpY2UuYwo+IGluZGV4IGU5ZDgxYTguLjM5ZWNlN2YgMTAwNjQ0Cj4g LS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jCj4gKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2RldmljZS5jCj4gQEAgLTE1OTEsNiAr MTU5MSw4IEBAIHN0YXRpYyBpbnQgYW1kZ3B1X2RldmljZV9pcF9yZWluaXRfZWFybHlfc3Jpb3Yo c3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYpCj4gICAKPiAgIAkJCXIgPSBibG9jay0+dmVyc2lv bi0+ZnVuY3MtPmh3X2luaXQoYWRldik7Cj4gICAJCQlEUk1fSU5GTygiUkUtSU5JVDogJXMgJXNc biIsIGJsb2NrLT52ZXJzaW9uLT5mdW5jcy0+bmFtZSwgcj8iZmFpbGVkIjoic3VjY2Vzc2VkIik7 Cj4gKwkJCWlmIChyKQo+ICsJCQkJcmV0dXJuIHI7Cj4gICAJCX0KPiAgIAl9Cj4gICAKPiBAQCAt MTYyNCw2ICsxNjI2LDggQEAgc3RhdGljIGludCBhbWRncHVfZGV2aWNlX2lwX3JlaW5pdF9sYXRl X3NyaW92KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICAgCj4gICAJCQlyID0gYmxvY2st PnZlcnNpb24tPmZ1bmNzLT5od19pbml0KGFkZXYpOwo+ICAgCQkJRFJNX0lORk8oIlJFLUlOSVQ6 ICVzICVzXG4iLCBibG9jay0+dmVyc2lvbi0+ZnVuY3MtPm5hbWUsIHI/ImZhaWxlZCI6InN1Y2Nl c3NlZCIpOwo+ICsJCQlpZiAocikKPiArCQkJCXJldHVybiByOwo+ICAgCQl9Cj4gICAJfQo+ICAg Cj4gQEAgLTI0NzEsMTcgKzI0NzUsNzEgQEAgc3RhdGljIGludCBhbWRncHVfZGV2aWNlX3JlY292 ZXJfdnJhbV9mcm9tX3NoYWRvdyhzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiwKPiAgIAlyZXR1 cm4gcjsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50IGFtZGdwdV9oYW5kbGVfdnJhbV9sb3N0KHN0 cnVjdCBhbWRncHVfZGV2aWNlICphZGV2KQo+ICt7Cj4gKwlzdHJ1Y3QgYW1kZ3B1X3JpbmcgKnJp bmcgPSBhZGV2LT5tbWFuLmJ1ZmZlcl9mdW5jc19yaW5nOwo+ICsJc3RydWN0IGFtZGdwdV9ibyAq Ym8sICp0bXA7Cj4gKwlzdHJ1Y3QgZG1hX2ZlbmNlICpmZW5jZSA9IE5VTEwsICpuZXh0ID0gTlVM TDsKPiArCWxvbmcgciA9IDE7Cj4gKwlpbnQgaSA9IDA7Cj4gKwlsb25nIHRtbzsKPiArCj4gKwlp ZiAoYW1kZ3B1X3NyaW92X3J1bnRpbWUoYWRldikpCj4gKwkJdG1vID0gbXNlY3NfdG9famlmZmll cyhhbWRncHVfbG9ja3VwX3RpbWVvdXQpOwo+ICsJZWxzZQo+ICsJCXRtbyA9IG1zZWNzX3RvX2pp ZmZpZXMoMTAwKTsKPiArCj4gKwlEUk1fSU5GTygicmVjb3ZlciB2cmFtIGJvIGZyb20gc2hhZG93 IHN0YXJ0XG4iKTsKPiArCW11dGV4X2xvY2soJmFkZXYtPnNoYWRvd19saXN0X2xvY2spOwo+ICsJ bGlzdF9mb3JfZWFjaF9lbnRyeV9zYWZlKGJvLCB0bXAsICZhZGV2LT5zaGFkb3dfbGlzdCwgc2hh ZG93X2xpc3QpIHsKPiArCQluZXh0ID0gTlVMTDsKPiArCQlhbWRncHVfZGV2aWNlX3JlY292ZXJf dnJhbV9mcm9tX3NoYWRvdyhhZGV2LCByaW5nLCBibywgJm5leHQpOwo+ICsJCWlmIChmZW5jZSkg ewo+ICsJCQlyID0gZG1hX2ZlbmNlX3dhaXRfdGltZW91dChmZW5jZSwgZmFsc2UsIHRtbyk7Cj4g KwkJCWlmIChyID09IDApCj4gKwkJCQlwcl9lcnIoIndhaXQgZmVuY2UgJXBbJWRdIHRpbWVvdXRc biIsIGZlbmNlLCBpKTsKPiArCQkJZWxzZSBpZiAociA8IDApCj4gKwkJCQlwcl9lcnIoIndhaXQg ZmVuY2UgJXBbJWRdIGludGVycnVwdGVkXG4iLCBmZW5jZSwgaSk7Cj4gKwkJCWlmIChyIDwgMSkg ewo+ICsJCQkJZG1hX2ZlbmNlX3B1dChmZW5jZSk7Cj4gKwkJCQlmZW5jZSA9IG5leHQ7Cj4gKwkJ CQlicmVhazsKPiArCQkJfQo+ICsJCQlpKys7Cj4gKwkJfQo+ICsKPiArCQlkbWFfZmVuY2VfcHV0 KGZlbmNlKTsKPiArCQlmZW5jZSA9IG5leHQ7Cj4gKwl9Cj4gKwltdXRleF91bmxvY2soJmFkZXYt PnNoYWRvd19saXN0X2xvY2spOwo+ICsKPiArCWlmIChmZW5jZSkgewo+ICsJCXIgPSBkbWFfZmVu Y2Vfd2FpdF90aW1lb3V0KGZlbmNlLCBmYWxzZSwgdG1vKTsKPiArCQlpZiAociA9PSAwKQo+ICsJ CQlwcl9lcnIoIndhaXQgZmVuY2UgJXBbJWRdIHRpbWVvdXRcbiIsIGZlbmNlLCBpKTsKPiArCQll bHNlIGlmIChyIDwgMCkKPiArCQkJcHJfZXJyKCJ3YWl0IGZlbmNlICVwWyVkXSBpbnRlcnJ1cHRl ZFxuIiwgZmVuY2UsIGkpOwo+ICsKPiArCX0KPiArCWRtYV9mZW5jZV9wdXQoZmVuY2UpOwo+ICsK PiArCWlmIChyID4gMCkKPiArCQlEUk1fSU5GTygicmVjb3ZlciB2cmFtIGJvIGZyb20gc2hhZG93 IGRvbmVcbiIpOwo+ICsJZWxzZQo+ICsJCURSTV9FUlJPUigicmVjb3ZlciB2cmFtIGJvIGZyb20g c2hhZG93IGZhaWxlZFxuIik7Cj4gKwo+ICsJcmV0dXJuIChyID4gMD8wOjEpOwo+ICt9Cj4gKwo+ ICAgLyoKPiAgICAqIGFtZGdwdV9kZXZpY2VfcmVzZXQgLSByZXNldCBBU0lDL0dQVSBmb3IgYmFy ZS1tZXRhbCBvciBwYXNzdGhyb3VnaAo+ICAgICoKPiAgICAqIEBhZGV2OiBhbWRncHUgZGV2aWNl IHBvaW50ZXIKPiAtICogQHJlc2V0X2ZsYWdzOiBvdXRwdXQgcGFyYW0gdGVsbHMgY2FsbGVyIHRo ZSByZXNldCByZXN1bHQKPiAgICAqCj4gICAgKiBhdHRlbXB0IHRvIGRvIHNvZnQtcmVzZXQgb3Ig ZnVsbC1yZXNldCBhbmQgcmVpbml0aWFsaXplIEFzaWMKPiAgICAqIHJldHVybiAwIG1lYW5zIHN1 Y2Nlc3NlZCBvdGhlcndpc2UgZmFpbGVkCj4gICAqLwo+IC1zdGF0aWMgaW50IGFtZGdwdV9kZXZp Y2VfcmVzZXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsCj4gLQkJCSAgICAgICB1aW50NjRf dCogcmVzZXRfZmxhZ3MpCj4gK3N0YXRpYyBpbnQgYW1kZ3B1X2RldmljZV9yZXNldChzdHJ1Y3Qg YW1kZ3B1X2RldmljZSAqYWRldikKPiAgIHsKPiAgIAlib29sIG5lZWRfZnVsbF9yZXNldCwgdnJh bV9sb3N0ID0gMDsKPiAgIAlpbnQgcjsKPiBAQCAtMjQ5Niw3ICsyNTU0LDYgQEAgc3RhdGljIGlu dCBhbWRncHVfZGV2aWNlX3Jlc2V0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAgCQkJ RFJNX0lORk8oInNvZnQgcmVzZXQgZmFpbGVkLCB3aWxsIGZhbGxiYWNrIHRvIGZ1bGwgcmVzZXQh XG4iKTsKPiAgIAkJCW5lZWRfZnVsbF9yZXNldCA9IHRydWU7Cj4gICAJCX0KPiAtCj4gICAJfQo+ ICAgCj4gICAJaWYgKG5lZWRfZnVsbF9yZXNldCkgewo+IEBAIC0yNTQ1LDEzICsyNjAyLDggQEAg c3RhdGljIGludCBhbWRncHVfZGV2aWNlX3Jlc2V0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2 LAo+ICAgCQl9Cj4gICAJfQo+ICAgCj4gLQlpZiAocmVzZXRfZmxhZ3MpIHsKPiAtCQlpZiAodnJh bV9sb3N0KQo+IC0JCQkoKnJlc2V0X2ZsYWdzKSB8PSBBTURHUFVfUkVTRVRfSU5GT19WUkFNX0xP U1Q7Cj4gLQo+IC0JCWlmIChuZWVkX2Z1bGxfcmVzZXQpCj4gLQkJCSgqcmVzZXRfZmxhZ3MpIHw9 IEFNREdQVV9SRVNFVF9JTkZPX0ZVTExSRVNFVDsKPiAtCX0KPiArCWlmICghciAmJiAoKG5lZWRf ZnVsbF9yZXNldCAmJiAhKGFkZXYtPmZsYWdzICYgQU1EX0lTX0FQVSkpIHx8IHZyYW1fbG9zdCkp Cj4gKwkJciA9IGFtZGdwdV9oYW5kbGVfdnJhbV9sb3N0KGFkZXYpOwo+ICAgCj4gICAJcmV0dXJu IHI7Cj4gICB9Cj4gQEAgLTI1NjAsMTQgKzI2MTIsMTEgQEAgc3RhdGljIGludCBhbWRncHVfZGV2 aWNlX3Jlc2V0KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+ICAgICogYW1kZ3B1X2Rldmlj ZV9yZXNldF9zcmlvdiAtIHJlc2V0IEFTSUMgZm9yIFNSLUlPViB2Zgo+ICAgICoKPiAgICAqIEBh ZGV2OiBhbWRncHUgZGV2aWNlIHBvaW50ZXIKPiAtICogQHJlc2V0X2ZsYWdzOiBvdXRwdXQgcGFy YW0gdGVsbHMgY2FsbGVyIHRoZSByZXNldCByZXN1bHQKPiAgICAqCj4gICAgKiBkbyBWRiBGTFIg YW5kIHJlaW5pdGlhbGl6ZSBBc2ljCj4gICAgKiByZXR1cm4gMCBtZWFucyBzdWNjZXNzZWQgb3Ro ZXJ3aXNlIGZhaWxlZAo+ICAgKi8KPiAtc3RhdGljIGludCBhbWRncHVfZGV2aWNlX3Jlc2V0X3Ny aW92KHN0cnVjdCBhbWRncHVfZGV2aWNlICphZGV2LAo+IC0JCQkJICAgICB1aW50NjRfdCAqcmVz ZXRfZmxhZ3MsCj4gLQkJCQkgICAgIGJvb2wgZnJvbV9oeXBlcnZpc29yKQo+ICtzdGF0aWMgaW50 IGFtZGdwdV9kZXZpY2VfcmVzZXRfc3Jpb3Yoc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYsIGJv b2wgZnJvbV9oeXBlcnZpc29yKQo+ICAgewo+ICAgCWludCByOwo+ICAgCj4gQEAgLTI1ODgsMjgg KzI2MzcsMjAgQEAgc3RhdGljIGludCBhbWRncHVfZGV2aWNlX3Jlc2V0X3NyaW92KHN0cnVjdCBh bWRncHVfZGV2aWNlICphZGV2LAo+ICAgCj4gICAJLyogbm93IHdlIGFyZSBva2F5IHRvIHJlc3Vt ZSBTTUMvQ1AvU0RNQSAqLwo+ICAgCXIgPSBhbWRncHVfZGV2aWNlX2lwX3JlaW5pdF9sYXRlX3Ny aW92KGFkZXYpOwo+ICsJYW1kZ3B1X3ZpcnRfcmVsZWFzZV9mdWxsX2dwdShhZGV2LCB0cnVlKTsK PiAgIAlpZiAocikKPiAgIAkJZ290byBlcnJvcjsKPiAgIAo+ICAgCWFtZGdwdV9pcnFfZ3B1X3Jl c2V0X3Jlc3VtZV9oZWxwZXIoYWRldik7Cj4gICAJciA9IGFtZGdwdV9pYl9yaW5nX3Rlc3RzKGFk ZXYpOwo+IC0JaWYgKHIpCj4gLQkJZGV2X2VycihhZGV2LT5kZXYsICJbR1BVX1JFU0VUXSBpYiBy aW5nIHRlc3QgZmFpbGVkICglZCkuXG4iLCByKTsKPiAgIAo+IC1lcnJvcjoKPiAtCS8qIHJlbGVh c2UgZnVsbCBjb250cm9sIG9mIEdQVSBhZnRlciBpYiB0ZXN0ICovCj4gLQlhbWRncHVfdmlydF9y ZWxlYXNlX2Z1bGxfZ3B1KGFkZXYsIHRydWUpOwo+IC0KPiAtCWlmIChyZXNldF9mbGFncykgewo+ IC0JCWlmIChhZGV2LT52aXJ0LmdpbV9mZWF0dXJlICYgQU1ER0lNX0ZFQVRVUkVfR0lNX0ZMUl9W UkFNTE9TVCkgewo+IC0JCQkoKnJlc2V0X2ZsYWdzKSB8PSBBTURHUFVfUkVTRVRfSU5GT19WUkFN X0xPU1Q7Cj4gLQkJCWF0b21pY19pbmMoJmFkZXYtPnZyYW1fbG9zdF9jb3VudGVyKTsKPiAtCQl9 Cj4gLQo+IC0JCS8qIFZGIEZMUiBvciBob3RsaW5rIHJlc2V0IGlzIGFsd2F5cyBmdWxsLXJlc2V0 ICovCj4gLQkJKCpyZXNldF9mbGFncykgfD0gQU1ER1BVX1JFU0VUX0lORk9fRlVMTFJFU0VUOwo+ ICsJaWYgKCFyICYmIGFkZXYtPnZpcnQuZ2ltX2ZlYXR1cmUgJiBBTURHSU1fRkVBVFVSRV9HSU1f RkxSX1ZSQU1MT1NUKSB7Cj4gKwkJYXRvbWljX2luYygmYWRldi0+dnJhbV9sb3N0X2NvdW50ZXIp Owo+ICsJCXIgPSBhbWRncHVfaGFuZGxlX3ZyYW1fbG9zdChhZGV2KTsKPiAgIAl9Cj4gICAKPiAr ZXJyb3I6Cj4gKwo+ICAgCXJldHVybiByOwo+ICAgfQo+ICAgCj4gQEAgLTI2NzMsNDIgKzI3MTQs OSBAQCBpbnQgYW1kZ3B1X2RldmljZV9ncHVfcmVjb3ZlcihzdHJ1Y3QgYW1kZ3B1X2RldmljZSAq YWRldiwKPiAgIAl9Cj4gICAKPiAgIAlpZiAoYW1kZ3B1X3NyaW92X3ZmKGFkZXYpKQo+IC0JCXIg PSBhbWRncHVfZGV2aWNlX3Jlc2V0X3NyaW92KGFkZXYsICZyZXNldF9mbGFncywgam9iID8gZmFs c2UgOiB0cnVlKTsKPiArCQlyID0gYW1kZ3B1X2RldmljZV9yZXNldF9zcmlvdihhZGV2LCBqb2Ig PyBmYWxzZSA6IHRydWUpOwo+ICAgCWVsc2UKPiAtCQlyID0gYW1kZ3B1X2RldmljZV9yZXNldChh ZGV2LCAmcmVzZXRfZmxhZ3MpOwo+IC0KPiAtCWlmICghcikgewo+IC0JCWlmICgoKHJlc2V0X2Zs YWdzICYgQU1ER1BVX1JFU0VUX0lORk9fRlVMTFJFU0VUKSAmJiAhKGFkZXYtPmZsYWdzICYgQU1E X0lTX0FQVSkpIHx8Cj4gLQkJCShyZXNldF9mbGFncyAmIEFNREdQVV9SRVNFVF9JTkZPX1ZSQU1f TE9TVCkpIHsKPiAtCQkJc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nID0gYWRldi0+bW1hbi5idWZm ZXJfZnVuY3NfcmluZzsKPiAtCQkJc3RydWN0IGFtZGdwdV9ibyAqYm8sICp0bXA7Cj4gLQkJCXN0 cnVjdCBkbWFfZmVuY2UgKmZlbmNlID0gTlVMTCwgKm5leHQgPSBOVUxMOwo+IC0KPiAtCQkJRFJN X0lORk8oInJlY292ZXIgdnJhbSBibyBmcm9tIHNoYWRvd1xuIik7Cj4gLQkJCW11dGV4X2xvY2so JmFkZXYtPnNoYWRvd19saXN0X2xvY2spOwo+IC0JCQlsaXN0X2Zvcl9lYWNoX2VudHJ5X3NhZmUo Ym8sIHRtcCwgJmFkZXYtPnNoYWRvd19saXN0LCBzaGFkb3dfbGlzdCkgewo+IC0JCQkJbmV4dCA9 IE5VTEw7Cj4gLQkJCQlhbWRncHVfZGV2aWNlX3JlY292ZXJfdnJhbV9mcm9tX3NoYWRvdyhhZGV2 LCByaW5nLCBibywgJm5leHQpOwo+IC0JCQkJaWYgKGZlbmNlKSB7Cj4gLQkJCQkJciA9IGRtYV9m ZW5jZV93YWl0KGZlbmNlLCBmYWxzZSk7Cj4gLQkJCQkJaWYgKHIpIHsKPiAtCQkJCQkJV0FSTihy LCAicmVjb3ZlcnkgZnJvbSBzaGFkb3cgaXNuJ3QgY29tcGxldGVkXG4iKTsKPiAtCQkJCQkJYnJl YWs7Cj4gLQkJCQkJfQo+IC0JCQkJfQo+IC0KPiAtCQkJCWRtYV9mZW5jZV9wdXQoZmVuY2UpOwo+ IC0JCQkJZmVuY2UgPSBuZXh0Owo+IC0JCQl9Cj4gLQkJCW11dGV4X3VubG9jaygmYWRldi0+c2hh ZG93X2xpc3RfbG9jayk7Cj4gLQkJCWlmIChmZW5jZSkgewo+IC0JCQkJciA9IGRtYV9mZW5jZV93 YWl0KGZlbmNlLCBmYWxzZSk7Cj4gLQkJCQlpZiAocikKPiAtCQkJCQlXQVJOKHIsICJyZWNvdmVy eSBmcm9tIHNoYWRvdyBpc24ndCBjb21wbGV0ZWRcbiIpOwo+IC0JCQl9Cj4gLQkJCWRtYV9mZW5j ZV9wdXQoZmVuY2UpOwo+IC0JCX0KPiAtCX0KPiArCQlyID0gYW1kZ3B1X2RldmljZV9yZXNldChh ZGV2KTsKPiAgIAo+ICAgCWZvciAoaSA9IDA7IGkgPCBBTURHUFVfTUFYX1JJTkdTOyArK2kpIHsK PiAgIAkJc3RydWN0IGFtZGdwdV9yaW5nICpyaW5nID0gYWRldi0+cmluZ3NbaV07CgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwphbWQtZ2Z4IG1haWxpbmcg bGlzdAphbWQtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNr dG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2FtZC1nZngK