From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Koenig, Christian" Subject: Re: [PATCH 1/2] drm/ttm: fix busy memory to fail other user v6 Date: Tue, 7 May 2019 10:53:29 +0000 Message-ID: References: <20190507093642.7859-1-david1.zhou@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190507093642.7859-1-david1.zhou@amd.com> Content-Language: en-US Content-ID: <9F2AC957E19F2A42A865C07B590B99F5@namprd12.prod.outlook.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: "Zhou, David(ChunMing)" , "Liang, Prike" , "dri-devel@lists.freedesktop.org" , "amd-gfx@lists.freedesktop.org" List-Id: amd-gfx.lists.freedesktop.org QW0gMDcuMDUuMTkgdW0gMTE6MzYgc2NocmllYiBDaHVubWluZyBaaG91Og0KPiBoZWF2eSBncHUg am9iIGNvdWxkIG9jY3VweSBtZW1vcnkgbG9uZyB0aW1lLCB3aGljaCBsZWFkIG90aGVyIHVzZXIg ZmFpbCB0byBnZXQgbWVtb3J5Lg0KPg0KPiBiYXNpY2FsbHkgcGljayB1cCBDaHJpc3RpYW4gaWRl YToNCj4NCj4gMS4gUmVzZXJ2ZSB0aGUgQk8gaW4gREMgdXNpbmcgYSB3d19tdXRleCB0aWNrZXQg KHRyaXZpYWwpLg0KPiAyLiBJZiB3ZSB0aGVuIHJ1biBpbnRvIHRoaXMgRUJVU1kgY29uZGl0aW9u IGluIFRUTSBjaGVjayBpZiB0aGUgQk8gd2UgbmVlZCBtZW1vcnkgZm9yIChvciByYXRoZXIgdGhl IHd3X211dGV4IG9mIGl0cyByZXNlcnZhdGlvbiBvYmplY3QpIGhhcyBhIHRpY2tldCBhc3NpZ25l ZC4NCj4gMy4gSWYgd2UgaGF2ZSBhIHRpY2tldCB3ZSBncmFiIGEgcmVmZXJlbmNlIHRvIHRoZSBm aXJzdCBCTyBvbiB0aGUgTFJVLCBkcm9wIHRoZSBMUlUgbG9jayBhbmQgdHJ5IHRvIGdyYWIgdGhl IHJlc2VydmF0aW9uIGxvY2sgd2l0aCB0aGUgdGlja2V0Lg0KPiA0LiBJZiBnZXR0aW5nIHRoZSBy ZXNlcnZhdGlvbiBsb2NrIHdpdGggdGhlIHRpY2tldCBzdWNjZWVkZWQgd2UgY2hlY2sgaWYgdGhl IEJPIGlzIHN0aWxsIHRoZSBmaXJzdCBvbmUgb24gdGhlIExSVSBpbiBxdWVzdGlvbiAodGhlIEJP IGNvdWxkIGhhdmUgbW92ZWQpLg0KPiA1LiBJZiB0aGUgQk8gaXMgc3RpbGwgdGhlIGZpcnN0IG9u ZSBvbiB0aGUgTFJVIGluIHF1ZXN0aW9uIHdlIHRyeSB0byBldmljdCBpdCBhcyB3ZSB3b3VsZCBl dmljdCBhbnkgb3RoZXIgQk8uDQo+IDYuIElmIGFueSBvZiB0aGUgIklmJ3MiIGFib3ZlIGZhaWwg d2UganVzdCBiYWNrIG9mZiBhbmQgcmV0dXJuIC1FQlVTWS4NCj4NCj4gdjI6IGZpeCBzb21lIG1p bm9yIGNoZWNrDQo+IHYzOiBhZGRyZXNzIENocmlzdGlhbiB2MiBjb21tZW50cy4NCj4gdjQ6IGZp eCBzb21lIG1pc3NpbmcNCj4gdjU6IGhhbmRsZSBmaXJzdF9ibyB1bmxvY2sgYW5kIGJvX2dldC9w dXQNCj4gdjY6IGFic3RyYWN0IHVuaWZpZWQgaXRlcmF0ZSBmdW5jdGlvbiwgYW5kIGhhbmRsZSBh bGwgcG9zc2libGUgdXNlY2FzZSBub3Qgb25seSBwaW5uZWQgYm8uDQo+DQo+IENoYW5nZS1JZDog STIxNDIzZmI5MjJmODg1NDY1ZjEzODMzYzQxZGYxZTEzNDM2NGE4ZTcNCj4gU2lnbmVkLW9mZi1i eTogQ2h1bm1pbmcgWmhvdSA8ZGF2aWQxLnpob3VAYW1kLmNvbT4NCj4gLS0tDQo+ICAgZHJpdmVy cy9ncHUvZHJtL3R0bS90dG1fYm8uYyB8IDExMyArKysrKysrKysrKysrKysrKysrKysrKysrKysr KystLS0tLQ0KPiAgIDEgZmlsZSBjaGFuZ2VkLCA5NyBpbnNlcnRpb25zKCspLCAxNiBkZWxldGlv bnMoLSkNCj4NCj4gZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMgYi9k cml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jDQo+IGluZGV4IDg1MDJiM2VkMmQ4OC4uYmJmMWQx NGQwMGE3IDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vdHRtL3R0bV9iby5jDQo+ICsr KyBiL2RyaXZlcnMvZ3B1L2RybS90dG0vdHRtX2JvLmMNCj4gQEAgLTc2NiwxMSArNzY2LDEzIEBA IEVYUE9SVF9TWU1CT0wodHRtX2JvX2V2aWN0aW9uX3ZhbHVhYmxlKTsNCj4gICAgKiBiLiBPdGhl cndpc2UsIHRyeWxvY2sgaXQuDQo+ICAgICovDQo+ICAgc3RhdGljIGJvb2wgdHRtX2JvX2V2aWN0 X3N3YXBvdXRfYWxsb3dhYmxlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sDQo+IC0JCQlz dHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggKmN0eCwgYm9vbCAqbG9ja2VkKQ0KPiArCQkJc3RydWN0 IHR0bV9vcGVyYXRpb25fY3R4ICpjdHgsIGJvb2wgKmxvY2tlZCwgYm9vbCAqYnVzeSkNCj4gICB7 DQo+ICAgCWJvb2wgcmV0ID0gZmFsc2U7DQo+ICAgDQo+ICAgCSpsb2NrZWQgPSBmYWxzZTsNCj4g KwlpZiAoYnVzeSkNCj4gKwkJKmJ1c3kgPSBmYWxzZTsNCj4gICAJaWYgKGJvLT5yZXN2ID09IGN0 eC0+cmVzdikgew0KPiAgIAkJcmVzZXJ2YXRpb25fb2JqZWN0X2Fzc2VydF9oZWxkKGJvLT5yZXN2 KTsNCj4gICAJCWlmIChjdHgtPmZsYWdzICYgVFRNX09QVF9GTEFHX0FMTE9XX1JFU19FVklDVA0K PiBAQCAtNzc5LDM1ICs3ODEsNDUgQEAgc3RhdGljIGJvb2wgdHRtX2JvX2V2aWN0X3N3YXBvdXRf YWxsb3dhYmxlKHN0cnVjdCB0dG1fYnVmZmVyX29iamVjdCAqYm8sDQo+ICAgCX0gZWxzZSB7DQo+ ICAgCQkqbG9ja2VkID0gcmVzZXJ2YXRpb25fb2JqZWN0X3RyeWxvY2soYm8tPnJlc3YpOw0KPiAg IAkJcmV0ID0gKmxvY2tlZDsNCj4gKwkJaWYgKCFyZXQgJiYgYnVzeSkNCj4gKwkJCSpidXN5ID0g dHJ1ZTsNCj4gICAJfQ0KPiAgIA0KPiAgIAlyZXR1cm4gcmV0Ow0KPiAgIH0NCj4gICANCj4gLXN0 YXRpYyBpbnQgdHRtX21lbV9ldmljdF9maXJzdChzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwN Cj4gLQkJCSAgICAgICB1aW50MzJfdCBtZW1fdHlwZSwNCj4gLQkJCSAgICAgICBjb25zdCBzdHJ1 Y3QgdHRtX3BsYWNlICpwbGFjZSwNCj4gLQkJCSAgICAgICBzdHJ1Y3QgdHRtX29wZXJhdGlvbl9j dHggKmN0eCkNCj4gK3N0YXRpYyBzdHJ1Y3QgdHRtX2J1ZmZlcl9vYmplY3QqDQo+ICt0dG1fbWVt X2ZpbmRfZXZpdGFibGVfYm8oc3RydWN0IHR0bV9ib19kZXZpY2UgKmJkZXYsDQo+ICsJCQkgc3Ry dWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4sDQo+ICsJCQkgY29uc3Qgc3RydWN0IHR0bV9w bGFjZSAqcGxhY2UsDQo+ICsJCQkgc3RydWN0IHR0bV9vcGVyYXRpb25fY3R4ICpjdHgsDQo+ICsJ CQkgc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICoqZmlyc3RfYm8sDQo+ICsJCQkgYm9vbCAqbG9j a2VkKQ0KPiAgIHsNCj4gLQlzdHJ1Y3QgdHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGJkZXYtPmdsb2I7 DQo+IC0Jc3RydWN0IHR0bV9tZW1fdHlwZV9tYW5hZ2VyICptYW4gPSAmYmRldi0+bWFuW21lbV90 eXBlXTsNCj4gICAJc3RydWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibyA9IE5VTEw7DQo+IC0JYm9v bCBsb2NrZWQgPSBmYWxzZTsNCj4gLQl1bnNpZ25lZCBpOw0KPiAtCWludCByZXQ7DQo+ICsJaW50 IGk7DQo+ICAgDQo+IC0Jc3Bpbl9sb2NrKCZnbG9iLT5scnVfbG9jayk7DQo+ICsJaWYgKGZpcnN0 X2JvKQ0KPiArCQkqZmlyc3RfYm8gPSBOVUxMOw0KPiAgIAlmb3IgKGkgPSAwOyBpIDwgVFRNX01B WF9CT19QUklPUklUWTsgKytpKSB7DQo+ICAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJvLCAmbWFu LT5scnVbaV0sIGxydSkgew0KPiAtCQkJaWYgKCF0dG1fYm9fZXZpY3Rfc3dhcG91dF9hbGxvd2Fi bGUoYm8sIGN0eCwgJmxvY2tlZCkpDQo+ICsJCQlib29sIGJ1c3kgPSBmYWxzZTsNCj4gKwkJCWlm ICghdHRtX2JvX2V2aWN0X3N3YXBvdXRfYWxsb3dhYmxlKGJvLCBjdHgsIGxvY2tlZCwNCj4gKwkJ CQkJCQkgICAgJmJ1c3kpKSB7DQoNCkEgbmV3bGluZSBiZXR3ZWVuIGRlY2xhcmF0aW9uIGFuZCBj b2RlIHBsZWFzZS4NCg0KPiArCQkJCWlmIChmaXJzdF9ibyAmJiAhKCpmaXJzdF9ibykgJiYgYnVz eSkgew0KPiArCQkJCQl0dG1fYm9fZ2V0KGJvKTsNCj4gKwkJCQkJKmZpcnN0X2JvID0gYm87DQo+ ICsJCQkJfQ0KPiAgIAkJCQljb250aW51ZTsNCj4gKwkJCX0NCj4gICANCj4gICAJCQlpZiAocGxh Y2UgJiYgIWJkZXYtPmRyaXZlci0+ZXZpY3Rpb25fdmFsdWFibGUoYm8sDQo+ICAgCQkJCQkJCQkg ICAgICBwbGFjZSkpIHsNCj4gLQkJCQlpZiAobG9ja2VkKQ0KPiArCQkJCWlmICgqbG9ja2VkKQ0K PiAgIAkJCQkJcmVzZXJ2YXRpb25fb2JqZWN0X3VubG9jayhiby0+cmVzdik7DQo+ICAgCQkJCWNv bnRpbnVlOw0KPiAgIAkJCX0NCj4gKw0KPiAgIAkJCWJyZWFrOw0KPiAgIAkJfQ0KPiAgIA0KPiBA QCAtODE4LDkgKzgzMCw2NiBAQCBzdGF0aWMgaW50IHR0bV9tZW1fZXZpY3RfZmlyc3Qoc3RydWN0 IHR0bV9ib19kZXZpY2UgKmJkZXYsDQo+ICAgCQlibyA9IE5VTEw7DQo+ICAgCX0NCj4gICANCj4g KwlyZXR1cm4gYm87DQo+ICt9DQo+ICsNCj4gK3N0YXRpYyBpbnQgdHRtX21lbV9ldmljdF9maXJz dChzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwNCj4gKwkJCSAgICAgICB1aW50MzJfdCBtZW1f dHlwZSwNCj4gKwkJCSAgICAgICBjb25zdCBzdHJ1Y3QgdHRtX3BsYWNlICpwbGFjZSwNCj4gKwkJ CSAgICAgICBzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggKmN0eCkNCj4gK3sNCj4gKwlzdHJ1Y3Qg dHRtX2JvX2dsb2JhbCAqZ2xvYiA9IGJkZXYtPmdsb2I7DQo+ICsJc3RydWN0IHR0bV9tZW1fdHlw ZV9tYW5hZ2VyICptYW4gPSAmYmRldi0+bWFuW21lbV90eXBlXTsNCj4gKwlzdHJ1Y3QgdHRtX2J1 ZmZlcl9vYmplY3QgKmJvID0gTlVMTCwgKmZpcnN0X2JvID0gTlVMTDsNCj4gKwlib29sIGxvY2tl ZCA9IGZhbHNlOw0KPiArCWludCByZXQ7DQo+ICsNCj4gKwlzcGluX2xvY2soJmdsb2ItPmxydV9s b2NrKTsNCj4gKwlibyA9IHR0bV9tZW1fZmluZF9ldml0YWJsZV9ibyhiZGV2LCBtYW4sIHBsYWNl LCBjdHgsICZmaXJzdF9ibywNCj4gKwkJCQkgICAgICAmbG9ja2VkKTsNCj4gICAJaWYgKCFibykg ew0KPiArCQlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggYnVzeV9jdHg7DQo+ICsNCj4gICAJCXNw aW5fdW5sb2NrKCZnbG9iLT5scnVfbG9jayk7DQo+IC0JCXJldHVybiAtRUJVU1k7DQo+ICsJCS8q IGNoZWNrIGlmIG90aGVyIHVzZXIgb2NjdXB5IG1lbW9yeSB0b28gbG9uZyB0aW1lICovDQo+ICsJ CWlmICghZmlyc3RfYm8gfHwgIWN0eCB8fCAhY3R4LT5yZXN2IHx8ICFjdHgtPnJlc3YtPmxvY2su Y3R4KSB7DQo+ICsJCQlpZiAoZmlyc3RfYm8pDQo+ICsJCQkJdHRtX2JvX3B1dChmaXJzdF9ibyk7 DQo+ICsJCQlyZXR1cm4gLUVCVVNZOw0KPiArCQl9DQo+ICsJCWlmIChmaXJzdF9iby0+cmVzdiA9 PSBjdHgtPnJlc3YpIHsNCj4gKwkJCXR0bV9ib19wdXQoZmlyc3RfYm8pOw0KPiArCQkJcmV0dXJu IC1FQlVTWTsNCj4gKwkJfQ0KPiArCQlpZiAoY3R4LT5pbnRlcnJ1cHRpYmxlKQ0KPiArCQkJcmV0 ID0gd3dfbXV0ZXhfbG9ja19pbnRlcnJ1cHRpYmxlKCZmaXJzdF9iby0+cmVzdi0+bG9jaywNCj4g KwkJCQkJCQkgIGN0eC0+cmVzdi0+bG9jay5jdHgpOw0KPiArCQllbHNlDQo+ICsJCQlyZXQgPSB3 d19tdXRleF9sb2NrKCZmaXJzdF9iby0+cmVzdi0+bG9jaywgY3R4LT5yZXN2LT5sb2NrLmN0eCk7 DQo+ICsJCWlmIChyZXQpIHsNCj4gKwkJCXR0bV9ib19wdXQoZmlyc3RfYm8pOw0KPiArCQkJcmV0 dXJuIHJldDsNCj4gKwkJfQ0KPiArCQlzcGluX2xvY2soJmdsb2ItPmxydV9sb2NrKTsNCj4gKwkJ LyogcHJldmlvdXMgYnVzeSByZXN2IGxvY2sgaXMgaGVsZCBieSBhYm92ZSwgaWRsZSBub3csDQo+ ICsJCSAqIHNvIGxldCB0aGVtIGV2aWN0YWJsZS4NCj4gKwkJICovDQo+ICsJCWJ1c3lfY3R4Lmlu dGVycnVwdGlibGUgPSBjdHgtPmludGVycnVwdGlibGU7DQo+ICsJCWJ1c3lfY3R4Lm5vX3dhaXRf Z3B1ICAgPSBjdHgtPm5vX3dhaXRfZ3B1Ow0KPiArCQlidXN5X2N0eC5yZXN2CSAgICAgICA9IGZp cnN0X2JvLT5yZXN2Ow0KPiArCQlidXN5X2N0eC5mbGFncwkgICAgICAgPSBUVE1fT1BUX0ZMQUdf QUxMT1dfUkVTX0VWSUNUOw0KPiArDQo+ICsJCWJvID0gdHRtX21lbV9maW5kX2V2aXRhYmxlX2Jv KGJkZXYsIG1hbiwgcGxhY2UsICZidXN5X2N0eCwgTlVMTCwNCj4gKwkJCQkJICAgICAgJmxvY2tl ZCk7DQo+ICsJCWlmIChibyAmJiAoYm8tPnJlc3YgPT0gZmlyc3RfYm8tPnJlc3YpKQ0KPiArCQkJ bG9ja2VkID0gdHJ1ZTsNCj4gKwkJZWxzZSBpZiAoYm8pDQo+ICsJCQl3d19tdXRleF91bmxvY2so JmZpcnN0X2JvLT5yZXN2LT5sb2NrKTsNCj4gKwkJaWYgKCFibykgew0KPiArCQkJc3Bpbl91bmxv Y2soJmdsb2ItPmxydV9sb2NrKTsNCj4gKwkJCXR0bV9ib19wdXQoZmlyc3RfYm8pOw0KPiArCQkJ cmV0dXJuIC1FQlVTWTsNCj4gKwkJfQ0KPiAgIAl9DQo+ICAgDQo+ICAgCWtyZWZfZ2V0KCZiby0+ bGlzdF9rcmVmKTsNCj4gQEAgLTgyOSwxMSArODk4LDE1IEBAIHN0YXRpYyBpbnQgdHRtX21lbV9l dmljdF9maXJzdChzdHJ1Y3QgdHRtX2JvX2RldmljZSAqYmRldiwNCj4gICAJCXJldCA9IHR0bV9i b19jbGVhbnVwX3JlZnMoYm8sIGN0eC0+aW50ZXJydXB0aWJsZSwNCj4gICAJCQkJCSAgY3R4LT5u b193YWl0X2dwdSwgbG9ja2VkKTsNCj4gICAJCWtyZWZfcHV0KCZiby0+bGlzdF9rcmVmLCB0dG1f Ym9fcmVsZWFzZV9saXN0KTsNCj4gKwkJaWYgKGZpcnN0X2JvKQ0KPiArCQkJdHRtX2JvX3B1dChm aXJzdF9ibyk7DQo+ICAgCQlyZXR1cm4gcmV0Ow0KPiAgIAl9DQo+ICAgDQo+ICAgCXR0bV9ib19k ZWxfZnJvbV9scnUoYm8pOw0KPiAgIAlzcGluX3VubG9jaygmZ2xvYi0+bHJ1X2xvY2spOw0KPiAr CWlmIChmaXJzdF9ibykNCj4gKwkJdHRtX2JvX3B1dChmaXJzdF9ibyk7DQo+ICAgDQo+ICAgCXJl dCA9IHR0bV9ib19ldmljdChibywgY3R4KTsNCj4gICAJaWYgKGxvY2tlZCkgew0KPiBAQCAtODk5 LDYgKzk3MiwxMyBAQCBzdGF0aWMgaW50IHR0bV9ib19tZW1fZm9yY2Vfc3BhY2Uoc3RydWN0IHR0 bV9idWZmZXJfb2JqZWN0ICpibywNCj4gICB7DQo+ICAgCXN0cnVjdCB0dG1fYm9fZGV2aWNlICpi ZGV2ID0gYm8tPmJkZXY7DQo+ICAgCXN0cnVjdCB0dG1fbWVtX3R5cGVfbWFuYWdlciAqbWFuID0g JmJkZXYtPm1hblttZW1fdHlwZV07DQo+ICsJc3RydWN0IHR0bV9vcGVyYXRpb25fY3R4IG5hdGl2 ZV9jdHggPSB7DQo+ICsJCS5pbnRlcnJ1cHRpYmxlID0gZmFsc2UsDQo+ICsJCS5ub193YWl0X2dw dSA9IGZhbHNlLA0KPiArCQkucmVzdiA9IGJvLT5yZXN2LA0KPiArCQkuZmxhZ3MgPSAwDQo+ICsJ fTsNCj4gKwlzdHJ1Y3QgdHRtX29wZXJhdGlvbl9jdHggKmV2aWN0X2N0eCA9IGN0eCA/IGN0eCA6 ICZuYXRpdmVfY3R4Ow0KDQpJIHRob3VnaHQgd2UgbWFkZSB0aGUgY3R4IHBhcmFtZXRlciBtYW5k YXRvcnksIGRpZG4ndCB3ZT8gQ291bGQgYmUgdGhhdCANCkkgcmVtZW1iZXIgdGhhdCBpbmNvcnJl Y3RseS4NCg0KQ2hyaXN0aWFuLg0KDQo+ICAgCWludCByZXQ7DQo+ICAgDQo+ICAgCWRvIHsNCj4g QEAgLTkwNyw3ICs5ODcsNyBAQCBzdGF0aWMgaW50IHR0bV9ib19tZW1fZm9yY2Vfc3BhY2Uoc3Ry dWN0IHR0bV9idWZmZXJfb2JqZWN0ICpibywNCj4gICAJCQlyZXR1cm4gcmV0Ow0KPiAgIAkJaWYg KG1lbS0+bW1fbm9kZSkNCj4gICAJCQlicmVhazsNCj4gLQkJcmV0ID0gdHRtX21lbV9ldmljdF9m aXJzdChiZGV2LCBtZW1fdHlwZSwgcGxhY2UsIGN0eCk7DQo+ICsJCXJldCA9IHR0bV9tZW1fZXZp Y3RfZmlyc3QoYmRldiwgbWVtX3R5cGUsIHBsYWNlLCBldmljdF9jdHgpOw0KPiAgIAkJaWYgKHVu bGlrZWx5KHJldCAhPSAwKSkNCj4gICAJCQlyZXR1cm4gcmV0Ow0KPiAgIAl9IHdoaWxlICgxKTsN Cj4gQEAgLTE3ODQsNyArMTg2NCw4IEBAIGludCB0dG1fYm9fc3dhcG91dChzdHJ1Y3QgdHRtX2Jv X2dsb2JhbCAqZ2xvYiwgc3RydWN0IHR0bV9vcGVyYXRpb25fY3R4ICpjdHgpDQo+ICAgCXNwaW5f bG9jaygmZ2xvYi0+bHJ1X2xvY2spOw0KPiAgIAlmb3IgKGkgPSAwOyBpIDwgVFRNX01BWF9CT19Q UklPUklUWTsgKytpKSB7DQo+ICAgCQlsaXN0X2Zvcl9lYWNoX2VudHJ5KGJvLCAmZ2xvYi0+c3dh cF9scnVbaV0sIHN3YXApIHsNCj4gLQkJCWlmICh0dG1fYm9fZXZpY3Rfc3dhcG91dF9hbGxvd2Fi bGUoYm8sIGN0eCwgJmxvY2tlZCkpIHsNCj4gKwkJCWlmICh0dG1fYm9fZXZpY3Rfc3dhcG91dF9h bGxvd2FibGUoYm8sIGN0eCwgJmxvY2tlZCwNCj4gKwkJCQkJCQkgICBOVUxMKSkgew0KPiAgIAkJ CQlyZXQgPSAwOw0KPiAgIAkJCQlicmVhazsNCj4gICAJCQl9DQoNCl9fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJp LWRldmVsQGxpc3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2RyaS1kZXZlbA==