From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH i-g-t 10/12] i915/gem_exec_balancer: Exercise bonded pairs Date: Wed, 22 May 2019 13:26:43 +0100 Message-ID: <342496f5-e495-143f-e59e-51d63afe3376@linux.intel.com> References: <20190522113712.23512-1-chris@chris-wilson.co.uk> <20190522113712.23512-10-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190522113712.23512-10-chris@chris-wilson.co.uk> Content-Language: en-US List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: Chris Wilson , intel-gfx@lists.freedesktop.org Cc: igt-dev@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org Ck9uIDIyLzA1LzIwMTkgMTI6MzcsIENocmlzIFdpbHNvbiB3cm90ZToKPiBUaGUgc3VibWl0LWZl bmNlICsgbG9hZF9iYWxhbmNpbmcgYXBpcyBhbGxvdyBmb3IgdXMgdG8gZXhlY3V0ZSBhIG5hbWVk Cj4gcGFpciBvZiBlbmdpbmVzIGluIHBhcmFsbGVsOyB0aGF0IHRoaXMgYnkgc3VibWl0dGluZyBh IHJlcXVlc3QgdG8gb25lCj4gZW5naW5lLCB3ZSBjYW4gdGhlbiB1c2UgdGhlIGdlbmVyYXRlZCBz dWJtaXQtZmVuY2UgdG8gc3VibWl0IGEgc2Vjb25kCj4gcmVxdWVzdCB0byBhbm90aGVyIGVuZ2lu ZSBhbmQgaGF2ZSBpdCBleGVjdXRlIGF0IHRoZSBzYW1lIHRpbWUuCj4gRnVydGhlcm1vcmUsIGJ5 IHNwZWNpZnlpbmcgYm9uZGVkIHBhaXJzLCB3ZSBjYW4gZGlyZWN0IHRoZSB2aXJ0dWFsCj4gZW5n aW5lIHRvIHVzZSBhIHBhcnRpY3VsYXIgZW5naW5lIGluIHBhcmFsbGVsIHRvIHRoZSBmaXJzdCBy ZXF1ZXN0Lgo+IAo+IHYyOiBNZWFzdXJlIGxvYWQgYWNyb3NzIGFsbCBib25kZWQgc2libGluZ3Mg dG8gY2hlY2sgd2UgZG9uJ3QKPiBtaXNzIGFuIGFjY2lkZW50YWwgZXhlY3V0aW9uIG9uIGFub3Ro ZXIuCj4gCj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24u Y28udWs+Cj4gLS0tCj4gICB0ZXN0cy9pOTE1L2dlbV9leGVjX2JhbGFuY2VyLmMgfCAyNzcgKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKy0tCj4gICAxIGZpbGUgY2hhbmdlZCwgMjYyIGlu c2VydGlvbnMoKyksIDE1IGRlbGV0aW9ucygtKQo+IAo+IGRpZmYgLS1naXQgYS90ZXN0cy9pOTE1 L2dlbV9leGVjX2JhbGFuY2VyLmMgYi90ZXN0cy9pOTE1L2dlbV9leGVjX2JhbGFuY2VyLmMKPiBp bmRleCA0MGEyNzE5YzAuLmM3NjExMzQ3NiAxMDA2NDQKPiAtLS0gYS90ZXN0cy9pOTE1L2dlbV9l eGVjX2JhbGFuY2VyLmMKPiArKysgYi90ZXN0cy9pOTE1L2dlbV9leGVjX2JhbGFuY2VyLmMKPiBA QCAtOTgsOSArOTgsMzUgQEAgbGlzdF9lbmdpbmVzKGludCBpOTE1LCB1aW50MzJfdCBjbGFzc19t YXNrLCB1bnNpZ25lZCBpbnQgKm91dCkKPiAgIAlyZXR1cm4gZW5naW5lczsKPiAgIH0KPiAgIAo+ ICtzdGF0aWMgaW50IF9fc2V0X2VuZ2luZXMoaW50IGk5MTUsIHVpbnQzMl90IGN0eCwKPiArCQkJ IGNvbnN0IHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqY2ksCj4gKwkJCSB1bnNp Z25lZCBpbnQgY291bnQpCj4gK3sKPiArCUk5MTVfREVGSU5FX0NPTlRFWFRfUEFSQU1fRU5HSU5F UyhlbmdpbmVzLCBjb3VudCk7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2NvbnRleHRfcGFyYW0g cCA9IHsKPiArCQkuY3R4X2lkID0gY3R4LAo+ICsJCS5wYXJhbSA9IEk5MTVfQ09OVEVYVF9QQVJB TV9FTkdJTkVTLAo+ICsJCS5zaXplID0gc2l6ZW9mKGVuZ2luZXMpLAo+ICsJCS52YWx1ZSA9IHRv X3VzZXJfcG9pbnRlcigmZW5naW5lcykKPiArCX07Cj4gKwo+ICsJZW5naW5lcy5leHRlbnNpb25z ID0gMDsKPiArCW1lbWNweShlbmdpbmVzLmVuZ2luZXMsIGNpLCBzaXplb2YoZW5naW5lcy5lbmdp bmVzKSk7Cj4gKwo+ICsJcmV0dXJuIF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsK PiArfQo+ICsKPiArc3RhdGljIHZvaWQgc2V0X2VuZ2luZXMoaW50IGk5MTUsIHVpbnQzMl90IGN0 eCwKPiArCQkJY29uc3Qgc3RydWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpjaSwKPiAr CQkJdW5zaWduZWQgaW50IGNvdW50KQo+ICt7Cj4gKwlpZ3RfYXNzZXJ0X2VxKF9fc2V0X2VuZ2lu ZXMoaTkxNSwgY3R4LCBjaSwgY291bnQpLCAwKTsKPiArfQo+ICsKPiAgIHN0YXRpYyBpbnQgX19z ZXRfbG9hZF9iYWxhbmNlcihpbnQgaTkxNSwgdWludDMyX3QgY3R4LAo+ICAgCQkJICAgICAgIGNv bnN0IHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAqY2ksCj4gLQkJCSAgICAgICB1 bnNpZ25lZCBpbnQgY291bnQpCj4gKwkJCSAgICAgICB1bnNpZ25lZCBpbnQgY291bnQsCj4gKwkJ CSAgICAgICB2b2lkICpleHQpCj4gICB7Cj4gICAJSTkxNV9ERUZJTkVfQ09OVEVYVF9FTkdJTkVT X0xPQURfQkFMQU5DRShiYWxhbmNlciwgY291bnQpOwo+ICAgCUk5MTVfREVGSU5FX0NPTlRFWFRf UEFSQU1fRU5HSU5FUyhlbmdpbmVzLCAxICsgY291bnQpOwo+IEBAIC0xMTMsNiArMTM5LDcgQEAg c3RhdGljIGludCBfX3NldF9sb2FkX2JhbGFuY2VyKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCj4g ICAKPiAgIAltZW1zZXQoJmJhbGFuY2VyLCAwLCBzaXplb2YoYmFsYW5jZXIpKTsKPiAgIAliYWxh bmNlci5iYXNlLm5hbWUgPSBJOTE1X0NPTlRFWFRfRU5HSU5FU19FWFRfTE9BRF9CQUxBTkNFOwo+ ICsJYmFsYW5jZXIuYmFzZS5uZXh0X2V4dGVuc2lvbiA9IHRvX3VzZXJfcG9pbnRlcihleHQpOwo+ ICAgCj4gICAJaWd0X2Fzc2VydChjb3VudCk7Cj4gICAJYmFsYW5jZXIubnVtX3NpYmxpbmdzID0g Y291bnQ7Cj4gQEAgLTEzMSw5ICsxNTgsMTAgQEAgc3RhdGljIGludCBfX3NldF9sb2FkX2JhbGFu Y2VyKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCj4gICAKPiAgIHN0YXRpYyB2b2lkIHNldF9sb2Fk X2JhbGFuY2VyKGludCBpOTE1LCB1aW50MzJfdCBjdHgsCj4gICAJCQkgICAgICBjb25zdCBzdHJ1 Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpLAo+IC0JCQkgICAgICB1bnNpZ25lZCBp bnQgY291bnQpCj4gKwkJCSAgICAgIHVuc2lnbmVkIGludCBjb3VudCwKPiArCQkJICAgICAgdm9p ZCAqZXh0KQo+ICAgewo+IC0JaWd0X2Fzc2VydF9lcShfX3NldF9sb2FkX2JhbGFuY2VyKGk5MTUs IGN0eCwgY2ksIGNvdW50KSwgMCk7Cj4gKwlpZ3RfYXNzZXJ0X2VxKF9fc2V0X2xvYWRfYmFsYW5j ZXIoaTkxNSwgY3R4LCBjaSwgY291bnQsIGV4dCksIDApOwo+ICAgfQo+ICAgCj4gICBzdGF0aWMg dWludDMyX3QgbG9hZF9iYWxhbmNlcl9jcmVhdGUoaW50IGk5MTUsCj4gQEAgLTE0Myw3ICsxNzEs NyBAQCBzdGF0aWMgdWludDMyX3QgbG9hZF9iYWxhbmNlcl9jcmVhdGUoaW50IGk5MTUsCj4gICAJ dWludDMyX3QgY3R4Owo+ICAgCj4gICAJY3R4ID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOwo+ IC0Jc2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwgY3R4LCBjaSwgY291bnQpOwo+ICsJc2V0X2xvYWRf YmFsYW5jZXIoaTkxNSwgY3R4LCBjaSwgY291bnQsIE5VTEwpOwo+ICAgCj4gICAJcmV0dXJuIGN0 eDsKPiAgIH0KPiBAQCAtMjg3LDYgKzMxNSw3NCBAQCBzdGF0aWMgdm9pZCBpbnZhbGlkX2JhbGFu Y2VyKGludCBpOTE1KQo+ICAgCX0KPiAgIH0KPiAgIAo+ICtzdGF0aWMgdm9pZCBpbnZhbGlkX2Jv bmRzKGludCBpOTE1KQo+ICt7Cj4gKwlJOTE1X0RFRklORV9DT05URVhUX0VOR0lORVNfQk9ORChi b25kc1sxNl0sIDEpOwo+ICsJSTkxNV9ERUZJTkVfQ09OVEVYVF9QQVJBTV9FTkdJTkVTKGVuZ2lu ZXMsIDEpOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9jb250ZXh0X3BhcmFtIHAgPSB7Cj4gKwkJ LmN0eF9pZCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KSwKPiArCQkucGFyYW0gPSBJOTE1X0NP TlRFWFRfUEFSQU1fRU5HSU5FUywKPiArCQkudmFsdWUgPSB0b191c2VyX3BvaW50ZXIoJmVuZ2lu ZXMpLAo+ICsJCS5zaXplID0gc2l6ZW9mKGVuZ2luZXMpLAo+ICsJfTsKPiArCXVpbnQzMl90IGhh bmRsZTsKPiArCXZvaWQgKnB0cjsKPiArCj4gKwltZW1zZXQoJmVuZ2luZXMsIDAsIHNpemVvZihl bmdpbmVzKSk7Cj4gKwlnZW1fY29udGV4dF9zZXRfcGFyYW0oaTkxNSwgJnApOwo+ICsKPiArCW1l bXNldChib25kcywgMCwgc2l6ZW9mKGJvbmRzKSk7Cj4gKwlmb3IgKGludCBuID0gMDsgbiA8IEFS UkFZX1NJWkUoYm9uZHMpOyBuKyspIHsKPiArCQlib25kc1tuXS5iYXNlLm5hbWUgPSBJOTE1X0NP TlRFWFRfRU5HSU5FU19FWFRfQk9ORDsKPiArCQlib25kc1tuXS5iYXNlLm5leHRfZXh0ZW5zaW9u ID0KPiArCQkJbiA/IHRvX3VzZXJfcG9pbnRlcigmYm9uZHNbbiAtIDFdKSA6IDA7Cj4gKwkJYm9u ZHNbbl0ubnVtX2JvbmRzID0gMTsKPiArCX0KPiArCWVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3Vz ZXJfcG9pbnRlcigmYm9uZHMpOwo+ICsJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsK PiArCj4gKwlib25kc1swXS5iYXNlLm5leHRfZXh0ZW5zaW9uID0gLTF1bGw7Cj4gKwlpZ3RfYXNz ZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSwgLUVGQVVMVCk7Cj4gKwo+ ICsJYm9uZHNbMF0uYmFzZS5uZXh0X2V4dGVuc2lvbiA9IHRvX3VzZXJfcG9pbnRlcigmYm9uZHNb MF0pOwo+ICsJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCks IC1FMkJJRyk7Cj4gKwo+ICsJZW5naW5lcy5leHRlbnNpb25zID0gdG9fdXNlcl9wb2ludGVyKCZi b25kc1sxXSk7Cj4gKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUs ICZwKSwgLUUyQklHKTsKPiArCWJvbmRzWzBdLmJhc2UubmV4dF9leHRlbnNpb24gPSAwOwo+ICsJ Z2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKPiArCj4gKwloYW5kbGUgPSBnZW1fY3Jl YXRlKGk5MTUsIDQwOTYgKiAzKTsKPiArCXB0ciA9IGdlbV9tbWFwX19ndHQoaTkxNSwgaGFuZGxl LCA0MDk2ICogMywgUFJPVF9XUklURSk7Cj4gKwlnZW1fY2xvc2UoaTkxNSwgaGFuZGxlKTsKPiAr Cj4gKwltZW1jcHkocHRyICsgNDA5NiwgJmJvbmRzWzBdLCBzaXplb2YoYm9uZHNbMF0pKTsKPiAr CWVuZ2luZXMuZXh0ZW5zaW9ucyA9IHRvX3VzZXJfcG9pbnRlcihwdHIpICsgNDA5NjsKPiArCWdl bV9jb250ZXh0X3NldF9wYXJhbShpOTE1LCAmcCk7Cj4gKwo+ICsJbWVtY3B5KHB0ciwgJmJvbmRz WzBdLCBzaXplb2YoYm9uZHNbMF0pKTsKPiArCWJvbmRzWzBdLmJhc2UubmV4dF9leHRlbnNpb24g PSB0b191c2VyX3BvaW50ZXIocHRyKTsKPiArCW1lbWNweShwdHIgKyA0MDk2LCAmYm9uZHNbMF0s IHNpemVvZihib25kc1swXSkpOwo+ICsJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsK PiArCj4gKwltdW5tYXAocHRyLCA0MDk2KTsKPiArCWlndF9hc3NlcnRfZXEoX19nZW1fY29udGV4 dF9zZXRfcGFyYW0oaTkxNSwgJnApLCAtRUZBVUxUKTsKPiArCj4gKwlib25kc1swXS5iYXNlLm5l eHRfZXh0ZW5zaW9uID0gMDsKPiArCW1lbWNweShwdHIgKyA4MTkyLCAmYm9uZHNbMF0sIHNpemVv Zihib25kc1swXSkpOwo+ICsJYm9uZHNbMF0uYmFzZS5uZXh0X2V4dGVuc2lvbiA9IHRvX3VzZXJf cG9pbnRlcihwdHIpICsgODE5MjsKPiArCW1lbWNweShwdHIgKyA0MDk2LCAmYm9uZHNbMF0sIHNp emVvZihib25kc1swXSkpOwo+ICsJZ2VtX2NvbnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKTsKPiAr Cj4gKwltdW5tYXAocHRyICsgODE5MiwgNDA5Nik7Cj4gKwlpZ3RfYXNzZXJ0X2VxKF9fZ2VtX2Nv bnRleHRfc2V0X3BhcmFtKGk5MTUsICZwKSwgLUVGQVVMVCk7Cj4gKwo+ICsJbXVubWFwKHB0ciAr IDQwOTYsIDQwOTYpOwo+ICsJaWd0X2Fzc2VydF9lcShfX2dlbV9jb250ZXh0X3NldF9wYXJhbShp OTE1LCAmcCksIC1FRkFVTFQpOwo+ICsKPiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgcC5j dHhfaWQpOwo+ICt9Cj4gKwo+ICAgc3RhdGljIHZvaWQga2lja19rdGhyZWFkcyh2b2lkKQo+ICAg ewo+ICAgCXVzbGVlcCgyMCAqIDEwMDApOyAvKiAyMG1zIHNob3VsZCBiZSBlbm91Z2ggZm9yIGtz b2Z0aXJxZCEgKi8KPiBAQCAtMzQ2LDYgKzQ0MiwzOCBAQCBzdGF0aWMgZG91YmxlIG1lYXN1cmVf bWluX2xvYWQoaW50IHBtdSwgdW5zaWduZWQgaW50IG51bSwgaW50IHBlcmlvZF91cykKPiAgIAly ZXR1cm4gbWluIC8gKGRvdWJsZSlkX3Q7Cj4gICB9Cj4gICAKPiArc3RhdGljIHZvaWQgbWVhc3Vy ZV9hbGxfbG9hZChpbnQgcG11LCBkb3VibGUgKnYsIHVuc2lnbmVkIGludCBudW0sIGludCBwZXJp b2RfdXMpCj4gK3sKPiArCXVpbnQ2NF90IGRhdGFbMiArIG51bV07Cj4gKwl1aW50NjRfdCBkX3Qs IGRfdltudW1dOwo+ICsKPiArCWtpY2tfa3RocmVhZHMoKTsKPiArCj4gKwlpZ3RfYXNzZXJ0X2Vx KHJlYWQocG11LCBkYXRhLCBzaXplb2YoZGF0YSkpLCBzaXplb2YoZGF0YSkpOwo+ICsJZm9yICh1 bnNpZ25lZCBpbnQgbiA9IDA7IG4gPCBudW07IG4rKykKPiArCQlkX3Zbbl0gPSAtZGF0YVsyICsg bl07Cj4gKwlkX3QgPSAtZGF0YVsxXTsKPiArCj4gKwl1c2xlZXAocGVyaW9kX3VzKTsKPiArCj4g KwlpZ3RfYXNzZXJ0X2VxKHJlYWQocG11LCBkYXRhLCBzaXplb2YoZGF0YSkpLCBzaXplb2YoZGF0 YSkpOwo+ICsKPiArCWRfdCArPSBkYXRhWzFdOwo+ICsJZm9yICh1bnNpZ25lZCBpbnQgbiA9IDA7 IG4gPCBudW07IG4rKykgewo+ICsJCWRfdltuXSArPSBkYXRhWzIgKyBuXTsKPiArCQlpZ3RfZGVi dWcoImVuZ2luZVslZF06ICUuMWYlJVxuIiwKPiArCQkJICBuLCBkX3Zbbl0gLyAoZG91YmxlKWRf dCAqIDEwMCk7Cj4gKwkJdltuXSA9IGRfdltuXSAvIChkb3VibGUpZF90Owo+ICsJfQo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGFkZF9wbXUoaW50IHBtdSwgY29uc3Qgc3RydWN0IGk5MTVfZW5naW5l X2NsYXNzX2luc3RhbmNlICpjaSkKPiArewo+ICsJcmV0dXJuIHBlcmZfaTkxNV9vcGVuX2dyb3Vw KEk5MTVfUE1VX0VOR0lORV9CVVNZKGNpLT5lbmdpbmVfY2xhc3MsCj4gKwkJCQkJCQkgY2ktPmVu Z2luZV9pbnN0YW5jZSksCj4gKwkJCQkgICAgcG11KTsKPiArfQo+ICsKPiAgIHN0YXRpYyB2b2lk IGNoZWNrX2luZGl2aWR1YWxfZW5naW5lKGludCBpOTE1LAo+ICAgCQkJCSAgICB1aW50MzJfdCBj dHgsCj4gICAJCQkJICAgIGNvbnN0IHN0cnVjdCBpOTE1X2VuZ2luZV9jbGFzc19pbnN0YW5jZSAq Y2ksCj4gQEAgLTM5NCw3ICs1MjIsNyBAQCBzdGF0aWMgdm9pZCBpbmRpdmlkdWFsKGludCBpOTE1 KQo+ICAgCQlmb3IgKGludCBwYXNzID0gMDsgcGFzcyA8IGNvdW50OyBwYXNzKyspIHsgLyogYXBw cm94LiBjb3VudCEgKi8KPiAgIAkJCWlndF9hc3NlcnQoc2l6ZW9mKCpjaSkgPT0gc2l6ZW9mKGlu dCkpOwo+ICAgCQkJaWd0X3Blcm11dGVfYXJyYXkoY2ksIGNvdW50LCBpZ3RfZXhjaGFuZ2VfaW50 KTsKPiAtCQkJc2V0X2xvYWRfYmFsYW5jZXIoaTkxNSwgY3R4LCBjaSwgY291bnQpOwo+ICsJCQlz ZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsIGNpLCBjb3VudCwgTlVMTCk7Cj4gICAJCQlmb3Ig KHVuc2lnbmVkIGludCBuID0gMDsgbiA8IGNvdW50OyBuKyspCj4gICAJCQkJY2hlY2tfaW5kaXZp ZHVhbF9lbmdpbmUoaTkxNSwgY3R4LCBjaSwgbik7Cj4gICAJCX0KPiBAQCAtNDA2LDYgKzUzNCwx MjMgQEAgc3RhdGljIHZvaWQgaW5kaXZpZHVhbChpbnQgaTkxNSkKPiAgIAlnZW1fcXVpZXNjZW50 X2dwdShpOTE1KTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgdm9pZCBib25kZWQoaW50IGk5MTUsIHVu c2lnbmVkIGludCBmbGFncykKPiArI2RlZmluZSBDT1JLIDB4MQo+ICt7Cj4gKwlJOTE1X0RFRklO RV9DT05URVhUX0VOR0lORVNfQk9ORChib25kc1sxNl0sIDEpOwo+ICsJc3RydWN0IGk5MTVfZW5n aW5lX2NsYXNzX2luc3RhbmNlICptYXN0ZXJfZW5naW5lczsKPiArCXVpbnQzMl90IG1hc3RlcjsK PiArCj4gKwkvKgo+ICsJICogSTkxNV9DT05URVhUX1BBUkFNX0VOR0lORSBwcm92aWRlcyBhbiBl eHRlbnNpb24gdGhhdCBhbGxvd3MgdXMKPiArCSAqIHRvIHNwZWNpZnkgd2hpY2ggZW5naW5lKHMp IHRvIHBhaXIgd2l0aCBhIHBhcmFsbGVsIChFWEVDX1NVQk1JVCkKPiArCSAqIHJlcXVlc3Qgc3Vi bWl0dGVkIHRvIGFub3RoZXIgZW5naW5lLgo+ICsJICovCj4gKwo+ICsJbWFzdGVyID0gZ2VtX3F1 ZXVlX2NyZWF0ZShpOTE1KTsKPiArCj4gKwltZW1zZXQoYm9uZHMsIDAsIHNpemVvZihib25kcykp Owo+ICsJZm9yIChpbnQgbiA9IDA7IG4gPCBBUlJBWV9TSVpFKGJvbmRzKTsgbisrKSB7Cj4gKwkJ Ym9uZHNbbl0uYmFzZS5uYW1lID0gSTkxNV9DT05URVhUX0VOR0lORVNfRVhUX0JPTkQ7Cj4gKwkJ Ym9uZHNbbl0uYmFzZS5uZXh0X2V4dGVuc2lvbiA9Cj4gKwkJCW4gPyB0b191c2VyX3BvaW50ZXIo JmJvbmRzW24gLSAxXSkgOiAwOwo+ICsJCWJvbmRzW25dLm51bV9ib25kcyA9IDE7Cj4gKwl9Cj4g Kwo+ICsJZm9yIChpbnQgY2xhc3MgPSAwOyBjbGFzcyA8IDMyOyBjbGFzcysrKSB7Cj4gKwkJc3Ry dWN0IGk5MTVfZW5naW5lX2NsYXNzX2luc3RhbmNlICpzaWJsaW5nczsKPiArCQl1bnNpZ25lZCBp bnQgY291bnQsIGxpbWl0Owo+ICsJCXVpbnQzMl90IGN0eDsKPiArCQlpbnQgcG11WzE2XTsKPiAr CQlpbnQgbjsKPiArCj4gKwkJc2libGluZ3MgPSBsaXN0X2VuZ2luZXMoaTkxNSwgMXUgPDwgY2xh c3MsICZjb3VudCk7Cj4gKwkJaWYgKCFzaWJsaW5ncykKPiArCQkJY29udGludWU7Cj4gKwo+ICsJ CWlmIChjb3VudCA8IDIpIHsKPiArCQkJZnJlZShzaWJsaW5ncyk7Cj4gKwkJCWNvbnRpbnVlOwo+ ICsJCX0KPiArCj4gKwkJbWFzdGVyX2VuZ2luZXMgPSBsaXN0X2VuZ2luZXMoaTkxNSwgfigxdSA8 PCBjbGFzcyksICZsaW1pdCk7Cj4gKwkJc2V0X2VuZ2luZXMoaTkxNSwgbWFzdGVyLCBtYXN0ZXJf ZW5naW5lcywgbGltaXQpOwo+ICsKPiArCQlsaW1pdCA9IG1pbihjb3VudCwgbGltaXQpOwo+ICsJ CWlndF9hc3NlcnQobGltaXQgPD0gQVJSQVlfU0laRShib25kcykpOwo+ICsJCWZvciAobiA9IDA7 IG4gPCBsaW1pdDsgbisrKSB7Cj4gKwkJCWJvbmRzW25dLm1hc3RlciA9IG1hc3Rlcl9lbmdpbmVz W25dOwo+ICsJCQlib25kc1tuXS5lbmdpbmVzWzBdID0gc2libGluZ3Nbbl07Cj4gKwkJfQo+ICsK PiArCQljdHggPSBnZW1fY29udGV4dF9jbG9uZShpOTE1LAo+ICsJCQkJCW1hc3RlciwgSTkxNV9D T05URVhUX0NMT05FX1ZNLAo+ICsJCQkJCUk5MTVfQ09OVEVYVF9DUkVBVEVfRkxBR1NfU0lOR0xF X1RJTUVMSU5FKTsKPiArCQlzZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBjdHgsIHNpYmxpbmdzLCBj b3VudCwgJmJvbmRzW2xpbWl0IC0gMV0pOwo+ICsKPiArCQlwbXVbMF0gPSAtMTsKPiArCQlmb3Ig KG4gPSAwOyBuIDwgbGltaXQ7IG4rKykKPiArCQkJcG11W25dID0gYWRkX3BtdShwbXVbMF0sICZz aWJsaW5nc1tuXSk7CgpCdXQgc3RpbGwgbm8gY2hlY2tpbmcgdGhhdCB0aGUgam9iIHJhbiBvbiBt YXN0ZXIuIElmIEkgYW0gZm9sbG93aW5nIApjb3JyZWN0bHkgeW91IGNvdWxkIGVhc2lseSBoYXZl IHNvbWV0aGluZyBsaWtlOgoKICAgcG11W25dID0gYWRkX3BtdShwbXVbMF0sICZtYXN0ZXJfZW5n aW5lc1tuXSk7CiAgIHBtdVtsaW1pdCArIG5dID0gYWRkX3BtdShwbXVbMF0sICZzaWJsaW5nc1tu XSk7CgpBbmQgY2hlY2sgYm90aC4KClJlZ2FyZHMsCgpUdnJ0a28KCj4gKwo+ICsJCWZvciAobiA9 IDA7IG4gPCBsaW1pdDsgbisrKSB7Cj4gKwkJCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY2J1ZmZl cjIgZWI7Cj4gKwkJCWlndF9zcGluX3QgKnNwaW4sICpwbHVnOwo+ICsJCQlJR1RfQ09SS19IQU5E TEUoY29yayk7Cj4gKwkJCWRvdWJsZSB2W2xpbWl0XTsKPiArCj4gKwkJCWlndF9hc3NlcnQoc2li bGluZ3Nbbl0uZW5naW5lX2NsYXNzICE9IG1hc3Rlcl9lbmdpbmVzW25dLmVuZ2luZV9jbGFzcyk7 Cj4gKwo+ICsJCQlwbHVnID0gTlVMTDsKPiArCQkJaWYgKGZsYWdzICYgQ09SSykgewo+ICsJCQkJ cGx1ZyA9IF9faWd0X3NwaW5fbmV3KGk5MTUsCj4gKwkJCQkJCSAgICAgIC5jdHggPSBtYXN0ZXIs Cj4gKwkJCQkJCSAgICAgIC5lbmdpbmUgPSBuLAo+ICsJCQkJCQkgICAgICAuZGVwZW5kZW5jeSA9 IGlndF9jb3JrX3BsdWcoJmNvcmssIGk5MTUpKTsKPiArCQkJfQo+ICsKPiArCQkJc3BpbiA9IF9f aWd0X3NwaW5fbmV3KGk5MTUsCj4gKwkJCQkJICAgICAgLmN0eCA9IG1hc3RlciwKPiArCQkJCQkg ICAgICAuZW5naW5lID0gbiwKPiArCQkJCQkgICAgICAuZmxhZ3MgPSBJR1RfU1BJTl9GRU5DRV9P VVQpOwo+ICsKPiArCQkJZWIgPSBzcGluLT5leGVjYnVmOwo+ICsJCQllYi5yc3ZkMSA9IGN0eDsK PiArCQkJZWIucnN2ZDIgPSBzcGluLT5vdXRfZmVuY2U7Cj4gKwkJCWViLmZsYWdzID0gSTkxNV9F WEVDX0ZFTkNFX1NVQk1JVDsKPiArCQkJZ2VtX2V4ZWNidWYoaTkxNSwgJmViKTsKPiArCj4gKwkJ CWlmIChwbHVnKSB7Cj4gKwkJCQlpZ3RfY29ya191bnBsdWcoJmNvcmspOwo+ICsJCQkJaWd0X3Nw aW5fZnJlZShpOTE1LCBwbHVnKTsKPiArCQkJfQo+ICsKPiArCQkJbWVhc3VyZV9hbGxfbG9hZChw bXVbMF0sIHYsIGxpbWl0LCAxMDAwMCk7Cj4gKwkJCWlndF9zcGluX2ZyZWUoaTkxNSwgc3Bpbik7 Cj4gKwo+ICsJCQlpZ3RfYXNzZXJ0X2YodltuXSA+IDAuOTAsCj4gKwkJCQkgICAgICJlbmdpbmUg JWQgKGNsYXNzOmluc3RhbmNlICVkOiVkKSB3YXMgZm91bmQgdG8gYmUgb25seSAlLjFmJSUgYnVz eVxuIiwKPiArCQkJCSAgICAgbiwgc2libGluZ3Nbbl0uZW5naW5lX2NsYXNzLCBzaWJsaW5nc1tu XS5lbmdpbmVfaW5zdGFuY2UsCj4gKwkJCQkgICAgIDEwMCAqIHZbbl0pOwo+ICsJCQlmb3IgKGlu dCBvdGhlciA9IDA7IG90aGVyIDwgbGltaXQ7IG90aGVyKyspIHsKPiArCQkJCWlmIChvdGhlciA9 PSBuKQo+ICsJCQkJCWNvbnRpbnVlOwo+ICsKPiArCQkJCWlndF9hc3NlcnRfZih2W290aGVyXSA9 PSAwLAo+ICsJCQkJCSAgICAgImVuZ2luZSAlZCAoY2xhc3M6aW5zdGFuY2UgJWQ6JWQpIHdhcyBu b3QgaWRsZSwgYW5kIGFjdHVhbGx5ICUuMWYlJSBidXN5XG4iLAo+ICsJCQkJCSAgICAgb3RoZXIs IHNpYmxpbmdzW290aGVyXS5lbmdpbmVfY2xhc3MsIHNpYmxpbmdzW290aGVyXS5lbmdpbmVfaW5z dGFuY2UsCj4gKwkJCQkJICAgICAxMDAgKiB2W290aGVyXSk7Cj4gKwkJCX0KPiArCQl9Cj4gKwo+ ICsJCWNsb3NlKHBtdVswXSk7Cj4gKwkJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBjdHgpOwo+ ICsJCWZyZWUobWFzdGVyX2VuZ2luZXMpOwo+ICsJCWZyZWUoc2libGluZ3MpOwo+ICsJfQo+ICsK PiArCWdlbV9jb250ZXh0X2Rlc3Ryb3koaTkxNSwgbWFzdGVyKTsKPiArfQo+ICsKPiAgIHN0YXRp YyB2b2lkIGluZGljZXMoaW50IGk5MTUpCj4gICB7Cj4gICAJSTkxNV9ERUZJTkVfQ09OVEVYVF9Q QVJBTV9FTkdJTkVTKGVuZ2luZXMsIEk5MTVfRVhFQ19SSU5HX01BU0sgKyAxKTsKPiBAQCAtNTY0 LDEzICs4MDksNiBAQCBzdGF0aWMgdm9pZCBidXN5KGludCBpOTE1KQo+ICAgCWdlbV9xdWllc2Nl bnRfZ3B1KGk5MTUpOwo+ICAgfQo+ICAgCj4gLXN0YXRpYyBpbnQgYWRkX3BtdShpbnQgcG11LCBj b25zdCBzdHJ1Y3QgaTkxNV9lbmdpbmVfY2xhc3NfaW5zdGFuY2UgKmNpKQo+IC17Cj4gLQlyZXR1 cm4gcGVyZl9pOTE1X29wZW5fZ3JvdXAoSTkxNV9QTVVfRU5HSU5FX0JVU1koY2ktPmVuZ2luZV9j bGFzcywKPiAtCQkJCQkJCSBjaS0+ZW5naW5lX2luc3RhbmNlKSwKPiAtCQkJCSAgICBwbXUpOwo+ IC19Cj4gLQo+ICAgc3RhdGljIHZvaWQgZnVsbChpbnQgaTkxNSwgdW5zaWduZWQgaW50IGZsYWdz KQo+ICAgI2RlZmluZSBQVUxTRSAweDEKPiAgICNkZWZpbmUgTEFURSAweDIKPiBAQCAtODYwLDcg KzEwOTgsNyBAQCBzdGF0aWMgdm9pZCBzZW1hcGhvcmUoaW50IGk5MTUpCj4gICAJCWNvdW50ID0g QVJSQVlfU0laRShibG9jayk7Cj4gICAKPiAgIAkJZm9yIChpbnQgaSA9IDA7IGkgPCBjb3VudDsg aSsrKSB7Cj4gLQkJCXNldF9sb2FkX2JhbGFuY2VyKGk5MTUsIGJsb2NrW2ldLCBjaSwgY291bnQp Owo+ICsJCQlzZXRfbG9hZF9iYWxhbmNlcihpOTE1LCBibG9ja1tpXSwgY2ksIGNvdW50LCBOVUxM KTsKPiAgIAkJCXNwaW5baV0gPSBfX2lndF9zcGluX25ldyhpOTE1LAo+ICAgCQkJCQkJIC5jdHgg PSBibG9ja1tpXSwKPiAgIAkJCQkJCSAuZGVwZW5kZW5jeSA9IHNjcmF0Y2gpOwo+IEBAIC04NzEs NyArMTEwOSw3IEBAIHN0YXRpYyB2b2lkIHNlbWFwaG9yZShpbnQgaTkxNSkKPiAgIAkJICogb3Ig d2UgbGV0IHRoZSB2aXAgdGhyb3VnaC4gSWYgbm90LCB3ZSBoYW5nLgo+ICAgCQkgKi8KPiAgIAkJ dmlwID0gZ2VtX2NvbnRleHRfY3JlYXRlKGk5MTUpOwo+IC0JCXNldF9sb2FkX2JhbGFuY2VyKGk5 MTUsIHZpcCwgY2ksIGNvdW50KTsKPiArCQlzZXRfbG9hZF9iYWxhbmNlcihpOTE1LCB2aXAsIGNp LCBjb3VudCwgTlVMTCk7Cj4gICAJCXBpbmcoaTkxNSwgdmlwLCAwKTsKPiAgIAkJZ2VtX2NvbnRl eHRfZGVzdHJveShpOTE1LCB2aXApOwo+ICAgCj4gQEAgLTk4Niw3ICsxMjI0LDcgQEAgc3RhdGlj IGJvb2wgaGFzX2xvYWRfYmFsYW5jZXIoaW50IGk5MTUpCj4gICAJaW50IGVycjsKPiAgIAo+ICAg CWN0eCA9IGdlbV9jb250ZXh0X2NyZWF0ZShpOTE1KTsKPiAtCWVyciA9IF9fc2V0X2xvYWRfYmFs YW5jZXIoaTkxNSwgY3R4LCAmY2ksIDEpOwo+ICsJZXJyID0gX19zZXRfbG9hZF9iYWxhbmNlcihp OTE1LCBjdHgsICZjaSwgMSwgTlVMTCk7Cj4gICAJZ2VtX2NvbnRleHRfZGVzdHJveShpOTE1LCBj dHgpOwo+ICAgCj4gICAJcmV0dXJuIGVyciA9PSAwOwo+IEBAIC0xMDEyLDYgKzEyNTAsOSBAQCBp Z3RfbWFpbgo+ICAgCWlndF9zdWJ0ZXN0KCJpbnZhbGlkLWJhbGFuY2VyIikKPiAgIAkJaW52YWxp ZF9iYWxhbmNlcihpOTE1KTsKPiAgIAo+ICsJaWd0X3N1YnRlc3QoImludmFsaWQtYm9uZHMiKQo+ ICsJCWludmFsaWRfYm9uZHMoaTkxNSk7Cj4gKwo+ICAgCWlndF9zdWJ0ZXN0KCJpbmRpdmlkdWFs IikKPiAgIAkJaW5kaXZpZHVhbChpOTE1KTsKPiAgIAo+IEBAIC0xMDQ2LDYgKzEyODcsMTIgQEAg aWd0X21haW4KPiAgIAlpZ3Rfc3VidGVzdCgic21va2UiKQo+ICAgCQlzbW9rZXRlc3QoaTkxNSwg MjApOwo+ICAgCj4gKwlpZ3Rfc3VidGVzdCgiYm9uZGVkLWltbSIpCj4gKwkJYm9uZGVkKGk5MTUs IDApOwo+ICsKPiArCWlndF9zdWJ0ZXN0KCJib25kZWQtY29yayIpCj4gKwkJYm9uZGVkKGk5MTUs IENPUkspOwo+ICsKPiAgIAlpZ3RfZml4dHVyZSB7Cj4gICAJCWlndF9zdG9wX2hhbmdfZGV0ZWN0 b3IoKTsKPiAgIAl9Cj4gCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fCkludGVsLWdmeCBtYWlsaW5nIGxpc3QKSW50ZWwtZ2Z4QGxpc3RzLmZyZWVkZXNrdG9w Lm9yZwpodHRwczovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2ludGVs LWdmeA==