From mboxrd@z Thu Jan 1 00:00:00 1970 From: "Tuikov, Luben" Subject: Re: [PATCH 8/8] drm/amdgpu/psp: add psp memory training implementation Date: Fri, 11 Oct 2019 23:44:23 +0000 Message-ID: <614acac3-c44a-4310-b7d5-abe166d99ecd@amd.com> References: <20191011035033.24935-1-tianci.yin@amd.com> <20191011035033.24935-8-tianci.yin@amd.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20191011035033.24935-8-tianci.yin-5C7GfCeVMHo@public.gmane.org> Content-Language: en-US Content-ID: 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: "amd-gfx-PD4FTy7X32lNgt0PjOBp9y5qC8QIuHrW@public.gmane.org" T24gMjAxOS0xMC0xMCAxMTo1MCBwLm0uLCBUaWFuY2kgWWluIHdyb3RlOg0KPiBGcm9tOiAiVGlh bmNpLllpbiIgPHRpYW5jaS55aW5AYW1kLmNvbT4NCj4gDQo+IGFkZCBtZW1vcnkgdHJhaW5pbmcg aW1wbGVtZW50YXRpb24gY29kZSB0byBzYXZlIHJlc3VtZSB0aW1lLg0KPiANCj4gQ2hhbmdlLUlk OiBJNjI1Nzk0YTc4MGIxMWQ4MjRhYjU3ZWYzOWNjMzNiODcyYzZkYzZjOQ0KPiBSZXZpZXdlZC1i eTogQWxleCBEZXVjaGVyIDxhbGV4YW5kZXIuZGV1Y2hlckBhbWQuY29tPg0KPiBTaWduZWQtb2Zm LWJ5OiBUaWFuY2kuWWluIDx0aWFuY2kueWluQGFtZC5jb20+DQo+IC0tLQ0KPiAgZHJpdmVycy9n cHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmggICAgIHwgICAxICsNCj4gIGRyaXZlcnMvZ3B1L2Ry bS9hbWQvYW1kZ3B1L2FtZGdwdV9kcnYuYyB8ICAgOSArKw0KPiAgZHJpdmVycy9ncHUvZHJtL2Ft ZC9hbWRncHUvcHNwX3YxMV8wLmMgIHwgMTcxICsrKysrKysrKysrKysrKysrKysrKysrKw0KPiAg MyBmaWxlcyBjaGFuZ2VkLCAxODEgaW5zZXJ0aW9ucygrKQ0KPiANCj4gZGlmZiAtLWdpdCBhL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1LmgNCj4gaW5kZXggZTNkNzE1YzMxYWM5Li4wM2M1YzE4YmI1MWUgMTAwNjQ0 DQo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oDQo+ICsrKyBiL2Ry aXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdS5oDQo+IEBAIC0xNTEsNiArMTUxLDcgQEAg ZXh0ZXJuIHVpbnQgYW1kZ3B1X3NkbWFfcGhhc2VfcXVhbnR1bTsNCj4gIGV4dGVybiBjaGFyICph bWRncHVfZGlzYWJsZV9jdTsNCj4gIGV4dGVybiBjaGFyICphbWRncHVfdmlydHVhbF9kaXNwbGF5 Ow0KPiAgZXh0ZXJuIHVpbnQgYW1kZ3B1X3BwX2ZlYXR1cmVfbWFzazsNCj4gK2V4dGVybiB1aW50 IGFtZGdwdV9mb3JjZV9sb25nX3RyYWluaW5nOw0KPiAgZXh0ZXJuIGludCBhbWRncHVfam9iX2hh bmdfbGltaXQ7DQo+ICBleHRlcm4gaW50IGFtZGdwdV9sYnB3Ow0KPiAgZXh0ZXJuIGludCBhbWRn cHVfY29tcHV0ZV9tdWx0aXBpcGU7DQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfZHJ2LmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf ZHJ2LmMNCj4gaW5kZXggNTk4NWJkNzkyMTZkLi5mMDNkY2M1ZDE4NWQgMTAwNjQ0DQo+IC0tLSBh L2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kcnYuYw0KPiArKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZHJ2LmMNCj4gQEAgLTEyNyw2ICsxMjcsNyBAQCBj aGFyICphbWRncHVfZGlzYWJsZV9jdSA9IE5VTEw7DQo+ICBjaGFyICphbWRncHVfdmlydHVhbF9k aXNwbGF5ID0gTlVMTDsNCj4gIC8qIE92ZXJEcml2ZShiaXQgMTQpIGRpc2FibGVkIGJ5IGRlZmF1 bHQqLw0KPiAgdWludCBhbWRncHVfcHBfZmVhdHVyZV9tYXNrID0gMHhmZmZmYmZmZjsNCj4gK3Vp bnQgYW1kZ3B1X2ZvcmNlX2xvbmdfdHJhaW5pbmcgPSAwOw0KPiAgaW50IGFtZGdwdV9qb2JfaGFu Z19saW1pdCA9IDA7DQo+ICBpbnQgYW1kZ3B1X2xicHcgPSAtMTsNCj4gIGludCBhbWRncHVfY29t cHV0ZV9tdWx0aXBpcGUgPSAtMTsNCj4gQEAgLTM5MCw2ICszOTEsMTQgQEAgbW9kdWxlX3BhcmFt X25hbWVkKHNjaGVkX2h3X3N1Ym1pc3Npb24sIGFtZGdwdV9zY2hlZF9od19zdWJtaXNzaW9uLCBp bnQsIDA0NDQpOw0KPiAgTU9EVUxFX1BBUk1fREVTQyhwcGZlYXR1cmVtYXNrLCAiYWxsIHBvd2Vy IGZlYXR1cmVzIGVuYWJsZWQgKGRlZmF1bHQpKSIpOw0KPiAgbW9kdWxlX3BhcmFtX25hbWVkKHBw ZmVhdHVyZW1hc2ssIGFtZGdwdV9wcF9mZWF0dXJlX21hc2ssIHVpbnQsIDA0NDQpOw0KPiAgDQo+ ICsvKioNCj4gKyAqIERPQzogZm9yY2Vsb25ndHJhaW5pbmcgKHVpbnQpDQo+ICsgKiBGb3JjZSBs b25nIG1lbW9yeSB0cmFpbmluZyBpbiByZXN1bWUuDQo+ICsgKiBUaGUgZGVmYXVsdCBpcyB6ZXJv LCBpbmRpY2F0ZXMgc2hvcnQgdHJhaW5pbmcgaW4gcmVzdW1lLg0KPiArICovDQo+ICtNT0RVTEVf UEFSTV9ERVNDKGZvcmNlbG9uZ3RyYWluaW5nLCAiZm9yY2UgbWVtb3J5IGxvbmcgdHJhaW5pbmci KTsNCj4gK21vZHVsZV9wYXJhbV9uYW1lZChmb3JjZWxvbmd0cmFpbmluZywgYW1kZ3B1X2ZvcmNl X2xvbmdfdHJhaW5pbmcsIHVpbnQsIDA0NDQpOw0KPiArDQo+ICAvKioNCj4gICAqIERPQzogcGNp ZV9nZW5fY2FwICh1aW50KQ0KPiAgICogT3ZlcnJpZGUgUENJRSBnZW4gc3BlZWQgY2FwYWJpbGl0 aWVzLiBTZWUgdGhlIENBSUwgZmxhZ3MgaW4gZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2Ft ZF9wY2llLmguDQo+IGRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9wc3Bf djExXzAuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L3BzcF92MTFfMC5jDQo+IGluZGV4 IDJiYTBmNjhjZWQxMC4uMDc0ZjIzYzg0NmNiIDEwMDY0NA0KPiAtLS0gYS9kcml2ZXJzL2dwdS9k cm0vYW1kL2FtZGdwdS9wc3BfdjExXzAuYw0KPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2Ft ZGdwdS9wc3BfdjExXzAuYw0KPiBAQCAtOTAyLDYgKzkwMiwxNzQgQEAgc3RhdGljIGludCBwc3Bf djExXzBfcmxjX2F1dG9sb2FkX3N0YXJ0KHN0cnVjdCBwc3BfY29udGV4dCAqcHNwKQ0KPiAgCXJl dHVybiBwc3BfcmxjX2F1dG9sb2FkX3N0YXJ0KHBzcCk7DQo+ICB9DQo+ICANCj4gK3N0YXRpYyBp bnQgcHNwX3YxMV8wX21lbW9yeV90cmFpbmluZ19zZW5kX21zZyhzdHJ1Y3QgcHNwX2NvbnRleHQg KnBzcCwgaW50IG1zZykNCj4gK3sNCj4gKwlpbnQgcmV0ID0gMDsNCj4gKwlpbnQgaSA9IDA7DQo+ ICsJdWludDMyX3QgZGF0YV8zMiA9IDA7DQo+ICsJc3RydWN0IGFtZGdwdV9kZXZpY2UgKmFkZXYg PSBwc3AtPmFkZXY7DQoNCk5BSyEgdG8gcHJlaW5pdGlhbGl6aW5nIHZhcmlhYmxlcy4NCg0KPiAr DQo+ICsJZGF0YV8zMiA9IChwc3AtPm1lbV90cmFpbl9jdHguYzJwX3RyYWluX2RhdGFfb2Zmc2V0 ID4+IDIwKTsNCj4gKwlXUkVHMzJfU09DMTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzM2LCBk YXRhXzMyKTsNCj4gKwlXUkVHMzJfU09DMTUoTVAwLCAwLCBtbU1QMF9TTU5fQzJQTVNHXzM1LCBt c2cpOw0KPiArDQo+ICsJLyptYXggNXMqLw0KPiArCXdoaWxlIChpIDwgNTApIHsNCj4gKwkJcmV0 ID0gcHNwX3dhaXRfZm9yKHBzcCwgU09DMTVfUkVHX09GRlNFVChNUDAsIDAsIG1tTVAwX1NNTl9D MlBNU0dfMzUpLA0KPiArCQkJCSAgIDB4ODAwMDAwMDAsIDB4ODAwMDAwMDAsIGZhbHNlKTsNCg0K SG1tLCBub25lIG9mIHRoZSBsb29wIGJvZHkgZGVwZW5kcyBvbiAiaSI/DQpTbywgY29uY2VpdmFi bHkgb25lIGNvdWxkIGRvIHRoaXMgb25lIHRpbWUgaW5zdGVhZCBvZiA1MD8NCkludGVyZXN0aW5n Li4uIFNvIHBlcmhhcHMgdGhlICI1MCIgY291dWxkIGJlIGEgbWFjcm8gZXhwbGFpbmluZw0Kd2hh dCBraW5kIG9mIGNvbnN0YW50IGl0IGlzLi4uDQoNCj4gKwkJaWYgKHJldCA9PSAwKQ0KPiArCQkJ YnJlYWs7DQo+ICsJCWkrKzsNCj4gKwl9DQoNCk5BSyB0byBicm9rZW4gdXAgbG9vcCBkZWZpbml0 aW9uLiBVc2UgYSBmb3ItbG9vcDoNCg0KZm9yIChpID0gMDsgaSA8IDUwOyBpKyspIHsNCglyZXQg PSBwc3Bfd2FpdF9mb3IocHNwLCBTT0MxNV9SRUdfT0ZGU0VUKE1QMCwgMCwgbW1NUDBfU01OX0My UE1TR18zNSksDQoJCQkgICAweDgwMDAwMDAwLCAweDgwMDAwMDAwLCBmYWxzZSk7DQoJaWYgKHJl dCkNCgkJYnJlYWs7DQp9DQoNClRoaXMgbWFrZXMgdGhlIGNvZGUgbW9yZSBzZWN1cmUgYXMgd2Vs bCBhcyB0aGUgbG9vcC1ib2R5IHJlbG9jYXRhYmxlDQppbnRvIGEgZnVuY3Rpb24sIGV0Yy4gQXMg d2VsbCBhcyBvYnZpb3VzIHRoYXQgdGhlIGJvZHkNCm9mIHRoZSBsb29wIGRvZXMgTk9UIGRlcGVu ZCBvbiAiaSIgYW5kIHRoZXJlZm9yZSAiNTAiIGlzIGNvbXBsZXRlbHkNCmFyYml0cmF0cnkuDQoN Cj4gKwlEUk1fREVCVUcoIiVzIHRyYWluaW5nICVzLCBjb3N0ICVkICogJWRtcy5cbiIsDQo+ICsJ CSAgKG1zZyA9PSBQU1BfQkxfX0RSQU1fU0hPUlRfVFJBSU4pID8gInNob3J0IiA6ICJsb25nIiwN Cj4gKwkJICAocmV0ID09IDApID8gInN1Y2NlZWQiIDogImZhaWxlZCIsDQo+ICsJCSAgaSwgYWRl di0+dXNlY190aW1lb3V0LzEwMDApOw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gK3N0 YXRpYyBpbnQgcHNwX3YxMV8wX21lbW9yeV90cmFpbmluZ19maW5pKHN0cnVjdCBwc3BfY29udGV4 dCAqcHNwKQ0KPiArew0KPiArCWludCByZXQgPSAwOw0KDQpOQUshDQoNCj4gKwlzdHJ1Y3QgcHNw X21lbW9yeV90cmFpbmluZ19jb250ZXh0ICpjdHggPSAmcHNwLT5tZW1fdHJhaW5fY3R4Ow0KPiAr DQo+ICsJY3R4LT5pbml0ID0gUFNQX01FTV9UUkFJTl9OT1RfU1VQUE9SVDsNCj4gKwlpZihjdHgt PnN5c19jYWNoZSkgew0KDQpTcGFjZSBhZnRlciBrZXl3b3JkOiAiaWYgKC4uLiIuDQoNCj4gKwkJ a2ZyZWUoY3R4LT5zeXNfY2FjaGUpOw0KPiArCQljdHgtPnN5c19jYWNoZSA9IE5VTEw7DQo+ICsJ fQ0KPiArDQo+ICsJcmV0dXJuIHJldDsNCg0KTkFLIQ0KVGhpcyBmdW5jdGlvbiBzaG91bGQgYmUg InZvaWQiISBMaWtlIGFsbCAiZnJlZSIgZnVuY3Rpb25zLg0KDQo+ICt9DQo+ICsNCj4gK3N0YXRp YyBpbnQgcHNwX3YxMV8wX21lbW9yeV90cmFpbmluZ19pbml0KHN0cnVjdCBwc3BfY29udGV4dCAq cHNwKQ0KPiArew0KPiArCWludCByZXQgPSAwOw0KDQpOQUsgZHVlIHRvIHByZS1pbml0aWFsaXpp bmcgInJldCIuDQoNCj4gKwlzdHJ1Y3QgcHNwX21lbW9yeV90cmFpbmluZ19jb250ZXh0ICpjdHgg PSAmcHNwLT5tZW1fdHJhaW5fY3R4Ow0KPiArDQo+ICsJaWYoY3R4LT5pbml0ICE9IFBTUF9NRU1f VFJBSU5fUkVTRVJWRV9TVUNDRVNTKSB7DQo+ICsJCURSTV9ERUJVRygibWVtb3J5IHRyYWluaW5n IGRvZXMgbm90IHN1cHBvcnQhXG4iKTsNCg0KUGVyaGFwcyB5b3UgbWVhbjoNCgkJRFJNX0RFQlVH KCJNZW1vcnkgdHJhaW5pbmcgaXMgbm90IHN1cHBvcnRlZCFcbiIpOw0KDQo+ICsJCXJldHVybiAw Ow0KPiArCX0+ICsNCj4gKwljdHgtPnN5c19jYWNoZSA9IGt6YWxsb2MoY3R4LT50cmFpbl9kYXRh X3NpemUsIEdGUF9LRVJORUwpOw0KPiArCWlmKGN0eC0+c3lzX2NhY2hlID09IE5VTEwpIHsNCg0K U3BhY2UgYWZ0ZXIga2V5d29yZCAiaWYgKC4uLiIuDQoNCj4gKwkJRFJNX0VSUk9SKCJhbGxvYyBt ZW1fdHJhaW5fY3R4LnN5c19jYWNoZSBmYWlsZWQoJWQpIVxuIiwgcmV0KTsNCj4gKwkJcmV0ID0g LUVOT01FTTsNCj4gKwkJZ290byBlcnJfb3V0Ow0KPiArCX0NCj4gKw0KPiArCURSTV9ERUJVRygi dHJhaW5fZGF0YV9zaXplOiVsbHgscDJjX3RyYWluX2RhdGFfb2Zmc2V0OiVsbHgsYzJwX3RyYWlu X2RhdGFfb2Zmc2V0OiVsbHguXG4iLA0KPiArCQkgIGN0eC0+dHJhaW5fZGF0YV9zaXplLA0KPiAr CQkgIGN0eC0+cDJjX3RyYWluX2RhdGFfb2Zmc2V0LA0KPiArCQkgIGN0eC0+YzJwX3RyYWluX2Rh dGFfb2Zmc2V0KTsNCj4gKwljdHgtPmluaXQgPSBQU1BfTUVNX1RSQUlOX0lOSVRfU1VDQ0VTUzsN Cj4gKwlyZXR1cm4gMDsNCj4gKw0KPiArZXJyX291dDoNCj4gKwlwc3BfdjExXzBfbWVtb3J5X3Ry YWluaW5nX2ZpbmkocHNwKTsNCj4gKwlyZXR1cm4gcmV0Ow0KPiArfQ0KPiArDQo+ICsvKg0KPiAr ICogc2F2ZSBhbmQgcmVzdG9yZSBwcm9jZXMNCj4gKyAqLw0KPiArc3RhdGljIGludCBwc3BfdjEx XzBfbWVtb3J5X3RyYWluaW5nKHN0cnVjdCBwc3BfY29udGV4dCAqcHNwLCB1aW50MzJfdCBvcHMp DQo+ICt7DQo+ICsJaW50IHJldCA9IDA7DQoNCk5BSyB0byBwcmUtaW5pdGlhbGl6aW5nIHJldHVy biB2YWx1ZSBvZiBmdW5jdGlvbiB3aGljaCB5b3UgZG9uJ3Qga25vdw0KYXByaW9yaSBpZiBpdCB3 aWxsIHN1Y2NlZWQgb3IgZmFpbC4NCg0KU2ltcGx5LCBkb24ndCBwcmUtaW5pdGlhbGl6ZSBhdXRv bWF0aWMgdmFyaWFibGVzLg0KDQo+ICsJdWludDMyX3QgcDJjX2hlYWRlcls0XTsNCj4gKwlzdHJ1 Y3QgcHNwX21lbW9yeV90cmFpbmluZ19jb250ZXh0ICpjdHggPSAmcHNwLT5tZW1fdHJhaW5fY3R4 Ow0KPiArCXVpbnQzMl90ICpwY2FjaGUgPSAodWludDMyX3QqKWN0eC0+c3lzX2NhY2hlOw0KPiAr DQo+ICsJaWYgKGN0eC0+aW5pdCA9PSBQU1BfTUVNX1RSQUlOX05PVF9TVVBQT1JUKSB7DQo+ICsJ CURSTV9ERUJVRygiTWVtb3J5IHRyYWluaW5nIGRvZXMgbm90IHN1cHBvcnQuXG4iKTsNCg0KIk1l bW9yeSB0cmFpbmluZyBpcyBub3Qgc3VwcG9ydGVkISINCg0KPiArCQlyZXR1cm4gMDsNCj4gKwl9 IGVsc2UgaWYgKGN0eC0+aW5pdCAhPSBQU1BfTUVNX1RSQUlOX0lOSVRfU1VDQ0VTUykgew0KPiAr CQlEUk1fRVJST1IoIlBsZWFzZSBjaGVjayBpbml0aWFsaXphdGlvbiBmYWlsdXJlLlxuIik7DQoN CiJNZW1vcnkgdHJhaW5pbmcgaW5pdGlhbGl6YXRpb24gZmFpbHVyZS4iDQoNCj4gKwkJcmV0dXJu IC1FSU5WQUw7DQo+ICsJfQ0KPiArDQo+ICsJaWYgKHBzcF92MTFfMF9pc19zb3NfYWxpdmUocHNw KSkgew0KPiArCQlEUk1fREVCVUcoInNvcyBpcyBhbGl2ZSwgc2tpcCBtZW1vcnkgdHJhaW5pbmcu XG4iKTsNCj4gKwkJcmV0dXJuIDA7DQo+ICsJfQ0KPiArDQo+ICsJcmV0ID0gYW1kZ3B1X2Rldmlj ZV92cmFtX2FjY2Vzcyhwc3AtPmFkZXYsIGN0eC0+cDJjX3RyYWluX2RhdGFfb2Zmc2V0LCBwMmNf aGVhZGVyLCBzaXplb2YocDJjX2hlYWRlciksIGZhbHNlKTsNCj4gKwlpZiAocmV0KSB7DQo+ICsJ CURSTV9FUlJPUigicmVhZCBwMmMgaGVhZGVyIGZhaWxlZC5cbiIpOw0KDQoiUDJDIGhlYWRlciBy ZWFkIGZhaWxlZC4iDQoNCj4gKwkJcmV0dXJuIHJldDsNCj4gKwl9DQo+ICsJRFJNX0RFQlVHKCJz eXNfY2FjaGVbJTA4eCwlMDh4LCUwOHgsJTA4eF0gcDJjX2hlYWRlclslMDh4LCUwOHgsJTA4eCwl MDh4XVxuIiwNCj4gKwkJICBwY2FjaGVbMF0sIHBjYWNoZVsxXSwgcGNhY2hlWzJdLCBwY2FjaGVb M10sDQo+ICsJCSAgcDJjX2hlYWRlclswXSwgcDJjX2hlYWRlclsxXSwgcDJjX2hlYWRlclsyXSwg cDJjX2hlYWRlclszXSk7DQo+ICsNCj4gKwlpZiAob3BzICYgUFNQX01FTV9UUkFJTl9TRU5EX1NI T1JUX01TRykgew0KPiArCQlEUk1fREVCVUcoInNob3J0IHRyYWluaW5nIGRlcGVuZCBvbiByZXN0 b3JlLlxuIik7DQoNCkNoYW5nZSAiZGVwZW5kIiAtLT4gImRlcGVuZHMiLg0KYWxzbyBmZWVsIGZy ZWUgdG8gc3RhcnQgeW91ciBzZW50ZW5jZXMgd2l0aCBhIGNhcGl0YWwgbGV0dGVyLg0KDQoiU2hv cnQgdHJhaW5pbmcgZGVwZW5kcyBvbiByZXN0b3JlLiINCg0KUmVnYXJkcywNCkx1YmVuDQoNCj4g KwkJb3BzIHw9IFBTUF9NRU1fVFJBSU5fUkVTVE9SRTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoKG9w cyAmIFBTUF9NRU1fVFJBSU5fUkVTVE9SRSkgJiYNCj4gKwkgICAgcGNhY2hlWzBdICE9IE1FTV9U UkFJTl9TWVNURU1fU0lHTkFUVVJFKSB7DQo+ICsJCURSTV9ERUJVRygic3lzX2NhY2hlWzBdIGlz IGludmFsaWQsIHJlc3RvcmUgZGVwZW5kIG9uIHNhdmUuXG4iKTsNCj4gKwkJb3BzIHw9IFBTUF9N RU1fVFJBSU5fU0FWRTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAocDJjX2hlYWRlclswXSA9PSBNRU1f VFJBSU5fU1lTVEVNX1NJR05BVFVSRSAmJg0KPiArCSAgICAhKHBjYWNoZVswXSA9PSBNRU1fVFJB SU5fU1lTVEVNX1NJR05BVFVSRSAmJg0KPiArCSAgICAgIHBjYWNoZVszXSA9PSBwMmNfaGVhZGVy WzNdKSkgew0KPiArCQlEUk1fREVCVUcoInN5c19jYWNoZSBpcyBpbnZhbGlkIG9yIG91dC1vZi1k YXRlLCBuZWVkIHNhdmUgdHJhaW5pbmcgZGF0YSB0byBzeXNfY2FjaGUuXG4iKTsNCj4gKwkJb3Bz IHw9IFBTUF9NRU1fVFJBSU5fU0FWRTsNCj4gKwl9DQo+ICsNCj4gKwlpZiAoKG9wcyAmIFBTUF9N RU1fVFJBSU5fU0FWRSkgJiYNCj4gKwkgICAgcDJjX2hlYWRlclswXSAhPSBNRU1fVFJBSU5fU1lT VEVNX1NJR05BVFVSRSkgew0KPiArCQlEUk1fREVCVUcoInAyY19oZWFkZXJbMF0gaXMgaW52YWxp ZCwgc2F2ZSBkZXBlbmQgb24gbG9uZyB0cmFpbmluZy5cbiIpOw0KPiArCQlvcHMgfD0gUFNQX01F TV9UUkFJTl9TRU5EX0xPTkdfTVNHOw0KPiArCX0NCj4gKw0KPiArCWlmIChvcHMgJiBQU1BfTUVN X1RSQUlOX1NFTkRfTE9OR19NU0cpIHsNCj4gKwkJb3BzICY9IH5QU1BfTUVNX1RSQUlOX1NFTkRf U0hPUlRfTVNHOw0KPiArCQlvcHMgfD0gUFNQX01FTV9UUkFJTl9TQVZFOw0KPiArCX0NCj4gKw0K PiArCURSTV9ERUJVRygibWVtIHRyYWluaW5nIG9wczoleC5cbiIsIG9wcyk7DQo+ICsNCj4gKwlp ZiAob3BzICYgUFNQX01FTV9UUkFJTl9TRU5EX0xPTkdfTVNHKSB7DQo+ICsJCXJldCA9IHBzcF92 MTFfMF9tZW1vcnlfdHJhaW5pbmdfc2VuZF9tc2cocHNwLCBQU1BfQkxfX0RSQU1fTE9OR19UUkFJ Tik7DQo+ICsJCWlmIChyZXQpIHsNCj4gKwkJCURSTV9FUlJPUigic2VuZCBsb25nIHRyYWluaW5n IG1zZyBmYWlsZWQuXG4iKTsNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJCX0NCj4gKwl9DQo+ICsN Cj4gKwlpZiAob3BzICYgUFNQX01FTV9UUkFJTl9TQVZFKSB7DQo+ICsJCXJldCA9IGFtZGdwdV9k ZXZpY2VfdnJhbV9hY2Nlc3MocHNwLT5hZGV2LCBjdHgtPnAyY190cmFpbl9kYXRhX29mZnNldCwg Y3R4LT5zeXNfY2FjaGUsIGN0eC0+dHJhaW5fZGF0YV9zaXplLCBmYWxzZSk7DQo+ICsJCWlmIChy ZXQpIHsNCj4gKwkJCURSTV9FUlJPUigicmVhZCB0cmFpbmluZyBkYXRhIGZyb20gdnJhbSBmYWls ZWQuXG4iKTsNCj4gKwkJCXJldHVybiByZXQ7DQo+ICsJCX0NCj4gKwl9DQo+ICsNCj4gKwlpZiAo b3BzICYgUFNQX01FTV9UUkFJTl9SRVNUT1JFKSB7DQo+ICsJCXJldCA9IGFtZGdwdV9kZXZpY2Vf dnJhbV9hY2Nlc3MocHNwLT5hZGV2LCBjdHgtPmMycF90cmFpbl9kYXRhX29mZnNldCwgY3R4LT5z eXNfY2FjaGUsIGN0eC0+dHJhaW5fZGF0YV9zaXplLCB0cnVlKTsNCj4gKwkJaWYgKHJldCkgew0K PiArCQkJRFJNX0VSUk9SKCJ3cml0ZSB0cmFpbmluZyBkYXRhIHRvIHZyYW0gZmFpbGVkLlxuIik7 DQo+ICsJCQlyZXR1cm4gcmV0Ow0KPiArCQl9DQo+ICsJfQ0KPiArDQo+ICsJaWYgKG9wcyAmIFBT UF9NRU1fVFJBSU5fU0VORF9TSE9SVF9NU0cpIHsNCj4gKwkJcmV0ID0gcHNwX3YxMV8wX21lbW9y eV90cmFpbmluZ19zZW5kX21zZyhwc3AsIChhbWRncHVfZm9yY2VfbG9uZ190cmFpbmluZyA+IDAp ID8NCj4gKwkJCQkJCQkgUFNQX0JMX19EUkFNX0xPTkdfVFJBSU4gOiBQU1BfQkxfX0RSQU1fU0hP UlRfVFJBSU4pOw0KPiArCQlpZiAocmV0KSB7DQo+ICsJCQlEUk1fRVJST1IoInNlbmQgdHJhaW5p bmcgbXNnIGZhaWxlZC5cbiIpOw0KPiArCQkJcmV0dXJuIHJldDsNCj4gKwkJfQ0KPiArCX0NCj4g KwljdHgtPnRyYWluaW5nX2NudCsrOw0KPiArCXJldHVybiByZXQ7DQo+ICt9DQo+ICsNCj4gIHN0 YXRpYyBjb25zdCBzdHJ1Y3QgcHNwX2Z1bmNzIHBzcF92MTFfMF9mdW5jcyA9IHsNCj4gIAkuaW5p dF9taWNyb2NvZGUgPSBwc3BfdjExXzBfaW5pdF9taWNyb2NvZGUsDQo+ICAJLmJvb3Rsb2FkZXJf bG9hZF9rZGIgPSBwc3BfdjExXzBfYm9vdGxvYWRlcl9sb2FkX2tkYiwNCj4gQEAgLTkyMiw2ICsx MDkwLDkgQEAgc3RhdGljIGNvbnN0IHN0cnVjdCBwc3BfZnVuY3MgcHNwX3YxMV8wX2Z1bmNzID0g ew0KPiAgCS5yYXNfdHJpZ2dlcl9lcnJvciA9IHBzcF92MTFfMF9yYXNfdHJpZ2dlcl9lcnJvciwN Cj4gIAkucmFzX2N1cmVfcG9zaW9uID0gcHNwX3YxMV8wX3Jhc19jdXJlX3Bvc2lvbiwNCj4gIAku cmxjX2F1dG9sb2FkX3N0YXJ0ID0gcHNwX3YxMV8wX3JsY19hdXRvbG9hZF9zdGFydCwNCj4gKwku bWVtX3RyYWluaW5nX2luaXQgPSBwc3BfdjExXzBfbWVtb3J5X3RyYWluaW5nX2luaXQsDQo+ICsJ Lm1lbV90cmFpbmluZ19maW5pID0gcHNwX3YxMV8wX21lbW9yeV90cmFpbmluZ19maW5pLA0KPiAr CS5tZW1fdHJhaW5pbmcgPSBwc3BfdjExXzBfbWVtb3J5X3RyYWluaW5nLA0KPiAgfTsNCj4gIA0K PiAgdm9pZCBwc3BfdjExXzBfc2V0X3BzcF9mdW5jcyhzdHJ1Y3QgcHNwX2NvbnRleHQgKnBzcCkN Cj4gDQoNCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmFt ZC1nZnggbWFpbGluZyBsaXN0CmFtZC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8v bGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4vbGlzdGluZm8vYW1kLWdmeA==