From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH 08/46] drm/i915/execlists: Suppress mere WAIT preemption Date: Mon, 11 Feb 2019 11:19:27 +0000 Message-ID: <3f9f170c-6771-b509-853a-19560726642a@linux.intel.com> References: <20190206130356.18771-1-chris@chris-wilson.co.uk> <20190206130356.18771-9-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8"; Format="flowed" Content-Transfer-Encoding: base64 Return-path: Received: from mga11.intel.com (mga11.intel.com [192.55.52.93]) by gabe.freedesktop.org (Postfix) with ESMTPS id F02966E17F for ; Mon, 11 Feb 2019 11:19:18 +0000 (UTC) In-Reply-To: <20190206130356.18771-9-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 List-Id: intel-gfx@lists.freedesktop.org Ck9uIDA2LzAyLzIwMTkgMTM6MDMsIENocmlzIFdpbHNvbiB3cm90ZToKPiBXQUlUIGlzIG9jY2Fz aW9uYWxseSBzdXBwcmVzc2VkIGJ5IHZpcnR1ZSBvZiBwcmVlbXB0ZWQgcmVxdWVzdHMgYmVpbmcK PiBwcm9tb3RlZCB0byBORVdDTElFTlQgaWYgdGhleSBoYXZlIG5vdCBhbGwgcmVhZHkgcmVjZWl2 ZWQgdGhhdCBib29zdC4KPiBNYWtlIHRoaXMgY29uc2lzdGVudCBmb3IgYWxsIFdBSVQgYm9vc3Rz IHRoYXQgdGhleSBhcmUgbm90IGFsbG93ZWQgdG8KPiBwcmVlbXB0IGV4ZWN1dGluZyBjb250ZXh0 cyBhbmQgYXJlIG1lcmVseSBncmFudGVkIHRoZSByaWdodCB0byBiZSBhdCB0aGUKPiBmcm9udCBv ZiB0aGUgcXVldWUgZm9yIHRoZSBuZXh0IGV4ZWN1dGlvbiBzbG90LiBUaGlzIGlzIGluIGtlZXBp bmcgd2l0aAo+IHRoZSBkZXNpcmUgdGhhdCB0aGUgV0FJVCBib29zdCBiZSBhIG1pbm9yIHR3ZWFr IHRoYXQgZG9lcyBub3QgZ2l2ZQo+IGV4Y2Vzc2l2ZSBwcm9tb3Rpb24gdG8gaXRzIHVzZXIgYW5k IG9wZW4gb3Vyc2VsdmVzIHRvIHRyaXZpYWwgYWJ1c2UuCj4gCj4gVGhlIHByb2JsZW0gd2l0aCB0 aGUgaW5jb25zaXN0ZW50IFdBSVQgcHJlZW1wdGlvbiBiZWNvbWVzIG1vcmUgYXBwYXJlbnQKPiBh cyB0aGUgcHJlZW1wdGlvbiBpcyBwcm9wYWdhdGVkIGFjcm9zcyB0aGUgZW5naW5lcywgd2hlcmUg b25lIGVuZ2luZSBtYXkKPiBwcmVlbXB0IGFuZCB0aGUgb3RoZXIgbm90LCBhbmQgd2UgYmUgcmVs eWluZyBvbiB0aGUgZXhhY3QgZXhlY3V0aW9uCj4gb3JkZXIgYmVpbmcgY29uc2lzdGVudCBhY3Jv c3MgZW5naW5lcyAoZS5nLiB1c2luZyBIVyBzZW1hcGhvcmVzIHRvCj4gY29vcmRpbmF0ZSBwYXJh bGxlbCBleGVjdXRpb24pLgo+IAo+IHYyOiBBbHNvIHByb3RlY3QgR3VDIHN1Ym1pc3Npb24gZnJv bSBmYWxzZSBwcmVlbXB0aW9uIGxvb3BzLgo+IHYzOiBCdWlsZCBidWcgc2FmZWd1YXJkcyBhbmQg YmV0dGVyIGRlYnVnIG1lc3NhZ2VzIGZvciBzdC4KPiAKPiBTaWduZWQtb2ZmLWJ5OiBDaHJpcyBX aWxzb24gPGNocmlzQGNocmlzLXdpbHNvbi5jby51az4KPiBDYzogVHZydGtvIFVyc3VsaW4gPHR2 cnRrby51cnN1bGluQGludGVsLmNvbT4KPiAtLS0KPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2k5 MTVfcmVxdWVzdC5jICAgICAgICB8ICAxMiArKwo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkx NV9zY2hlZHVsZXIuaCAgICAgIHwgICAyICsKPiAgIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2xyYy5jICAgICAgICAgICB8ICAgOSArLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRl c3RzL2ludGVsX2xyYy5jIHwgMTYxICsrKysrKysrKysrKysrKysrKysrKwo+ICAgNCBmaWxlcyBj aGFuZ2VkLCAxODMgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQo+IAo+IGRpZmYgLS1naXQg YS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYyBiL2RyaXZlcnMvZ3B1L2RybS9p OTE1L2k5MTVfcmVxdWVzdC5jCj4gaW5kZXggYzJhNWM0OGM3NTQxLi4zNWFjZWY3NGI5M2EgMTAw NjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9yZXF1ZXN0LmMKPiArKysgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3JlcXVlc3QuYwo+IEBAIC0zNzIsMTIgKzM3MiwyNCBA QCB2b2lkIF9faTkxNV9yZXF1ZXN0X3N1Ym1pdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpyZXF1ZXN0 KQo+ICAgCj4gICAJLyogV2UgbWF5IGJlIHJlY3Vyc2luZyBmcm9tIHRoZSBzaWduYWwgY2FsbGJh Y2sgb2YgYW5vdGhlciBpOTE1IGZlbmNlICovCj4gICAJc3Bpbl9sb2NrX25lc3RlZCgmcmVxdWVz dC0+bG9jaywgU0lOR0xFX0RFUFRIX05FU1RJTkcpOwo+ICsKPiAgIAlHRU1fQlVHX09OKHRlc3Rf Yml0KEk5MTVfRkVOQ0VfRkxBR19BQ1RJVkUsICZyZXF1ZXN0LT5mZW5jZS5mbGFncykpOwo+ICAg CXNldF9iaXQoSTkxNV9GRU5DRV9GTEFHX0FDVElWRSwgJnJlcXVlc3QtPmZlbmNlLmZsYWdzKTsK PiArCj4gICAJcmVxdWVzdC0+Z2xvYmFsX3NlcW5vID0gc2Vxbm87Cj4gICAJaWYgKHRlc3RfYml0 KERNQV9GRU5DRV9GTEFHX0VOQUJMRV9TSUdOQUxfQklULCAmcmVxdWVzdC0+ZmVuY2UuZmxhZ3Mp ICYmCj4gICAJICAgICFpOTE1X3JlcXVlc3RfZW5hYmxlX2JyZWFkY3J1bWIocmVxdWVzdCkpCj4g ICAJCWludGVsX2VuZ2luZV9xdWV1ZV9icmVhZGNydW1icyhlbmdpbmUpOwo+ICsKPiArCS8qCj4g KwkgKiBBcyB3ZSBkbyBub3QgYWxsb3cgV0FJVCB0byBwcmVlbXB0IGluZmxpZ2h0IHJlcXVlc3Rz LAo+ICsJICogb25jZSB3ZSBoYXZlIGV4ZWN1dGVkIGEgcmVxdWVzdCwgYWxvbmcgd2l0aCB0cmln Z2VyaW5nCj4gKwkgKiBhbnkgZXhlY3V0aW9uIGNhbGxiYWNrcywgd2UgbXVzdCBwcmVzZXJ2ZSBp dHMgb3JkZXJpbmcKPiArCSAqIHdpdGhpbiB0aGUgbm9uLXByZWVtcHRpYmxlIEZJRk8uCj4gKwkg Ki8KPiArCUJVSUxEX0JVR19PTihfX05PX1BSRUVNUFRJT04gJiB+STkxNV9QUklPUklUWV9NQVNL KTsgLyogb25seSBpbnRlcm5hbCAqLwo+ICsJcmVxdWVzdC0+c2NoZWQuYXR0ci5wcmlvcml0eSB8 PSBfX05PX1BSRUVNUFRJT047Cj4gKwo+ICAgCXNwaW5fdW5sb2NrKCZyZXF1ZXN0LT5sb2NrKTsK PiAgIAo+ICAgCWVuZ2luZS0+ZW1pdF9maW5pX2JyZWFkY3J1bWIocmVxdWVzdCwKPiBkaWZmIC0t Z2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaCBiL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2k5MTVfc2NoZWR1bGVyLmgKPiBpbmRleCBkYmU5Y2I3ZWNkODIuLjU0YmQ2Yzg5 ODE3ZSAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pOTE1X3NjaGVkdWxlci5o Cj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaTkxNV9zY2hlZHVsZXIuaAo+IEBAIC0zMyw2 ICszMyw4IEBAIGVudW0gewo+ICAgI2RlZmluZSBJOTE1X1BSSU9SSVRZX1dBSVQJKCh1OClCSVQo MCkpCj4gICAjZGVmaW5lIEk5MTVfUFJJT1JJVFlfTkVXQ0xJRU5UCSgodTgpQklUKDEpKQo+ICAg Cj4gKyNkZWZpbmUgX19OT19QUkVFTVBUSU9OIChJOTE1X1BSSU9SSVRZX1dBSVQpCj4gKwo+ICAg c3RydWN0IGk5MTVfc2NoZWRfYXR0ciB7Cj4gICAJLyoqCj4gICAJICogQHByaW9yaXR5OiBleGVj dXRpb24gYW5kIHNlcnZpY2UgcHJpb3JpdHkKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9scmMuYwo+IGlu ZGV4IDVkNWNlOTFhNWRmYS4uYWZkMDVlMjVmOTExIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1 L2RybS9pOTE1L2ludGVsX2xyYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxf bHJjLmMKPiBAQCAtMTg4LDYgKzE4OCwxMiBAQCBzdGF0aWMgaW5saW5lIGludCBycV9wcmlvKGNv bnN0IHN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICAgCXJldHVybiBycS0+c2NoZWQuYXR0ci5w cmlvcml0eTsKPiAgIH0KPiAgIAo+ICtzdGF0aWMgaW50IGVmZmVjdGl2ZV9wcmlvKGNvbnN0IHN0 cnVjdCBpOTE1X3JlcXVlc3QgKnJxKQo+ICt7Cj4gKwkvKiBSZXN0cmljdCBtZXJlIFdBSVQgYm9v c3RzIGZyb20gdHJpZ2dlcmluZyBwcmVlbXB0aW9uICovCj4gKwlyZXR1cm4gcnFfcHJpbyhycSkg fCBfX05PX1BSRUVNUFRJT047Cj4gK30KPiArCj4gICBzdGF0aWMgaW50IHF1ZXVlX3ByaW8oY29u c3Qgc3RydWN0IGludGVsX2VuZ2luZV9leGVjbGlzdHMgKmV4ZWNsaXN0cykKPiAgIHsKPiAgIAlz dHJ1Y3QgaTkxNV9wcmlvbGlzdCAqcDsKPiBAQCAtMjA4LDcgKzIxNCw3IEBAIHN0YXRpYyBpbnQg cXVldWVfcHJpbyhjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2V4ZWNsaXN0cyAqZXhlY2xpc3Rz KQo+ICAgc3RhdGljIGlubGluZSBib29sIG5lZWRfcHJlZW1wdChjb25zdCBzdHJ1Y3QgaW50ZWxf ZW5naW5lX2NzICplbmdpbmUsCj4gICAJCQkJY29uc3Qgc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEp Cj4gICB7Cj4gLQljb25zdCBpbnQgbGFzdF9wcmlvID0gcnFfcHJpbyhycSk7Cj4gKwlpbnQgbGFz dF9wcmlvOwo+ICAgCj4gICAJaWYgKCFpbnRlbF9lbmdpbmVfaGFzX3ByZWVtcHRpb24oZW5naW5l KSkKPiAgIAkJcmV0dXJuIGZhbHNlOwo+IEBAIC0yMjgsNiArMjM0LDcgQEAgc3RhdGljIGlubGlu ZSBib29sIG5lZWRfcHJlZW1wdChjb25zdCBzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICplbmdpbmUs Cj4gICAJICogcHJlZW1wdC4gSWYgdGhhdCBoaW50IGlzIHN0YWxlIG9yIHdlIG1heSBiZSB0cnlp bmcgdG8gcHJlZW1wdAo+ICAgCSAqIG91cnNlbHZlcywgaWdub3JlIHRoZSByZXF1ZXN0Lgo+ICAg CSAqLwo+ICsJbGFzdF9wcmlvID0gZWZmZWN0aXZlX3ByaW8ocnEpOwo+ICAgCWlmICghX19leGVj bGlzdHNfbmVlZF9wcmVlbXB0KGVuZ2luZS0+ZXhlY2xpc3RzLnF1ZXVlX3ByaW9yaXR5X2hpbnQs Cj4gICAJCQkJICAgICAgbGFzdF9wcmlvKSkKPiAgIAkJcmV0dXJuIGZhbHNlOwo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbHJjLmMgYi9kcml2ZXJz L2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50ZWxfbHJjLmMKPiBpbmRleCA1ODE0NGUwMjQ3NTEu LjI2M2FmZDJmMTU5NiAxMDA2NDQKPiAtLS0gYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaW50ZWxfbHJjLmMKPiArKysgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaW50 ZWxfbHJjLmMKPiBAQCAtNDA3LDYgKzQwNywxNjYgQEAgc3RhdGljIGludCBsaXZlX3N1cHByZXNz X3NlbGZfcHJlZW1wdCh2b2lkICphcmcpCj4gICAJZ290byBlcnJfY2xpZW50X2I7Cj4gICB9Cj4g ICAKPiArc3RhdGljIGludCBfX2k5MTVfc3dfZmVuY2VfY2FsbAo+ICtkdW1teV9ub3RpZnkoc3Ry dWN0IGk5MTVfc3dfZmVuY2UgKmZlbmNlLCBlbnVtIGk5MTVfc3dfZmVuY2Vfbm90aWZ5IHN0YXRl KQo+ICt7Cj4gKwlyZXR1cm4gTk9USUZZX0RPTkU7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3Qg aTkxNV9yZXF1ZXN0ICpkdW1teV9yZXF1ZXN0KHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSkKPiArewo+ICsJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gKwo+ICsJcnEgPSBrbWFsbG9j KHNpemVvZigqcnEpLCBHRlBfS0VSTkVMIHwgX19HRlBfWkVSTyk7Cj4gKwlpZiAoIXJxKQo+ICsJ CXJldHVybiBOVUxMOwo+ICsKPiArCUlOSVRfTElTVF9IRUFEKCZycS0+YWN0aXZlX2xpc3QpOwo+ ICsJcnEtPmVuZ2luZSA9IGVuZ2luZTsKPiArCj4gKwlpOTE1X3NjaGVkX25vZGVfaW5pdCgmcnEt PnNjaGVkKTsKPiArCj4gKwkvKiBtYXJrIHRoaXMgcmVxdWVzdCBhcyBwZXJtYW5lbnRseSBpbmNv bXBsZXRlICovCj4gKwlycS0+ZmVuY2Uuc2Vxbm8gPSAxOwo+ICsJQlVJTERfQlVHX09OKHNpemVv ZihycS0+ZmVuY2Uuc2Vxbm8pICE9IDgpOyAvKiB1cHBlciAzMmIgPT0gMCAqLwo+ICsJcnEtPmh3 c3Bfc2Vxbm8gPSAodTMyICopJnJxLT5mZW5jZS5zZXFubyArIDE7Cj4gKwlHRU1fQlVHX09OKGk5 MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKTsKPiArCj4gKwlpOTE1X3N3X2ZlbmNlX2luaXQoJnJx LT5zdWJtaXQsIGR1bW15X25vdGlmeSk7Cj4gKwlpOTE1X3N3X2ZlbmNlX2NvbW1pdCgmcnEtPnN1 Ym1pdCk7Cj4gKwo+ICsJcmV0dXJuIHJxOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBkdW1teV9y ZXF1ZXN0X2ZyZWUoc3RydWN0IGk5MTVfcmVxdWVzdCAqZHVtbXkpCj4gK3sKPiArCWk5MTVfcmVx dWVzdF9tYXJrX2NvbXBsZXRlKGR1bW15KTsKPiArCWk5MTVfc2NoZWRfbm9kZV9maW5pKGR1bW15 LT5lbmdpbmUtPmk5MTUsICZkdW1teS0+c2NoZWQpOwo+ICsJa2ZyZWUoZHVtbXkpOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgaW50IGxpdmVfc3VwcHJlc3Nfd2FpdF9wcmVlbXB0KHZvaWQgKmFyZykKPiAr ewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBhcmc7Cj4gKwlzdHJ1Y3QgcHJl ZW1wdF9jbGllbnQgY2xpZW50WzRdOwo+ICsJc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l Owo+ICsJZW51bSBpbnRlbF9lbmdpbmVfaWQgaWQ7Cj4gKwlpbnRlbF93YWtlcmVmX3Qgd2FrZXJl ZjsKPiArCWludCBlcnIgPSAtRU5PTUVNOwo+ICsJaW50IGk7Cj4gKwo+ICsJLyoKPiArCSAqIFdh aXRlcnMgYXJlIGdpdmVuIGEgbGl0dGxlIHByaW9yaXR5IG51ZGdlLCBidXQgbm90IGVub3VnaAo+ ICsJICogdG8gYWN0dWFsbHkgY2F1c2UgYW55IHByZWVtcHRpb24uIERvdWJsZSBjaGVjayB0aGF0 IHdlIGRvCj4gKwkgKiBub3QgbmVlZGxlc3NseSBnZW5lcmF0ZSBwcmVlbXB0LXRvLWlkbGUgY3lj bGVzLgo+ICsJICovCj4gKwo+ICsJaWYgKCFIQVNfTE9HSUNBTF9SSU5HX1BSRUVNUFRJT04oaTkx NSkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9t dXRleCk7Cj4gKwl3YWtlcmVmID0gaW50ZWxfcnVudGltZV9wbV9nZXQoaTkxNSk7Cj4gKwo+ICsJ aWYgKHByZWVtcHRfY2xpZW50X2luaXQoaTkxNSwgJmNsaWVudFswXSkpIC8qIEVMU1BbMF0gKi8K PiArCQlnb3RvIGVycl91bmxvY2s7Cj4gKwlpZiAocHJlZW1wdF9jbGllbnRfaW5pdChpOTE1LCAm Y2xpZW50WzFdKSkgLyogRUxTUFsxXSAqLwo+ICsJCWdvdG8gZXJyX2NsaWVudF8wOwo+ICsJaWYg KHByZWVtcHRfY2xpZW50X2luaXQoaTkxNSwgJmNsaWVudFsyXSkpIC8qIGhlYWQgb2YgcXVldWUg Ki8KPiArCQlnb3RvIGVycl9jbGllbnRfMTsKPiArCWlmIChwcmVlbXB0X2NsaWVudF9pbml0KGk5 MTUsICZjbGllbnRbM10pKSAvKiBieXN0YW5kZXIgKi8KPiArCQlnb3RvIGVycl9jbGllbnRfMjsK PiArCj4gKwlmb3JfZWFjaF9lbmdpbmUoZW5naW5lLCBpOTE1LCBpZCkgewo+ICsJCWludCBkZXB0 aDsKPiArCj4gKwkJaWYgKCFlbmdpbmUtPmVtaXRfaW5pdF9icmVhZGNydW1iKQo+ICsJCQljb250 aW51ZTsKPiArCj4gKwkJZm9yIChkZXB0aCA9IDA7IGRlcHRoIDwgQVJSQVlfU0laRShjbGllbnQp OyBkZXB0aCsrKSB7Cj4gKwkJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxW0FSUkFZX1NJWkUoY2xp ZW50KV07Cj4gKwkJCXN0cnVjdCBpOTE1X3JlcXVlc3QgKmR1bW15Owo+ICsKPiArCQkJZW5naW5l LT5leGVjbGlzdHMucHJlZW1wdF9oYW5nLmNvdW50ID0gMDsKPiArCj4gKwkJCWR1bW15ID0gZHVt bXlfcmVxdWVzdChlbmdpbmUpOwo+ICsJCQlpZiAoIWR1bW15KQo+ICsJCQkJZ290byBlcnJfY2xp ZW50XzM7Cj4gKwo+ICsJCQlmb3IgKGkgPSAwOyBpIDwgQVJSQVlfU0laRShjbGllbnQpOyBpKysp IHsKPiArCQkJCXJxW2ldID0gaWd0X3NwaW5uZXJfY3JlYXRlX3JlcXVlc3QoJmNsaWVudFtpXS5z cGluLAo+ICsJCQkJCQkJCSAgIGNsaWVudFtpXS5jdHgsIGVuZ2luZSwKPiArCQkJCQkJCQkgICBN SV9OT09QKTsKPiArCQkJCWlmIChJU19FUlIocnFbaV0pKSB7Cj4gKwkJCQkJZXJyID0gUFRSX0VS UihycVtpXSk7Cj4gKwkJCQkJZ290byBlcnJfd2VkZ2VkOwo+ICsJCQkJfQo+ICsKPiArCQkJCS8q IERpc2FibGUgTkVXQ0xJRU5UIHByb21vdGlvbiAqLwo+ICsJCQkJX19pOTE1X2FjdGl2ZV9yZXF1 ZXN0X3NldCgmcnFbaV0tPnRpbWVsaW5lLT5sYXN0X3JlcXVlc3QsCj4gKwkJCQkJCQkgIGR1bW15 KTsKPiArCQkJCWk5MTVfcmVxdWVzdF9hZGQocnFbaV0pOwo+ICsJCQl9Cj4gKwo+ICsJCQlkdW1t eV9yZXF1ZXN0X2ZyZWUoZHVtbXkpOwo+ICsKPiArCQkJR0VNX0JVR19PTihpOTE1X3JlcXVlc3Rf Y29tcGxldGVkKHJxWzBdKSk7Cj4gKwkJCWlmICghaWd0X3dhaXRfZm9yX3NwaW5uZXIoJmNsaWVu dFswXS5zcGluLCBycVswXSkpIHsKPiArCQkJCXByX2VycigiJXM6IEZpcnN0IGNsaWVudCBmYWls ZWQgdG8gc3RhcnRcbiIsCj4gKwkJCQkgICAgICAgZW5naW5lLT5uYW1lKTsKPiArCQkJCWdvdG8g ZXJyX3dlZGdlZDsKPiArCQkJfQo+ICsJCQlHRU1fQlVHX09OKCFpOTE1X3JlcXVlc3Rfc3RhcnRl ZChycVswXSkpOwo+ICsKPiArCQkJaWYgKGk5MTVfcmVxdWVzdF93YWl0KHJxW2RlcHRoXSwKPiAr CQkJCQkgICAgICBJOTE1X1dBSVRfTE9DS0VEIHwKPiArCQkJCQkgICAgICBJOTE1X1dBSVRfUFJJ T1JJVFksCj4gKwkJCQkJICAgICAgMSkgIT0gLUVUSU1FKSB7Cj4gKwkJCQlwcl9lcnIoIiVzOiBX YWl0ZXIgZGVwdGg6JWQgY29tcGxldGVkIVxuIiwKPiArCQkJCSAgICAgICBlbmdpbmUtPm5hbWUs IGRlcHRoKTsKPiArCQkJCWdvdG8gZXJyX3dlZGdlZDsKPiArCQkJfQo+ICsKPiArCQkJZm9yIChp ID0gMDsgaSA8IEFSUkFZX1NJWkUoY2xpZW50KTsgaSsrKQo+ICsJCQkJaWd0X3NwaW5uZXJfZW5k KCZjbGllbnRbaV0uc3Bpbik7Cj4gKwo+ICsJCQlpZiAoaWd0X2ZsdXNoX3Rlc3QoaTkxNSwgSTkx NV9XQUlUX0xPQ0tFRCkpCj4gKwkJCQlnb3RvIGVycl93ZWRnZWQ7Cj4gKwo+ICsJCQlpZiAoZW5n aW5lLT5leGVjbGlzdHMucHJlZW1wdF9oYW5nLmNvdW50KSB7Cj4gKwkJCQlwcl9lcnIoIiVzOiBQ cmVlbXB0aW9uIHJlY29yZGVkIHglZCwgZGVwdGggJWQ7IHNob3VsZCBoYXZlIGJlZW4gc3VwcHJl c3NlZCFcbiIsCj4gKwkJCQkgICAgICAgZW5naW5lLT5uYW1lLAo+ICsJCQkJICAgICAgIGVuZ2lu ZS0+ZXhlY2xpc3RzLnByZWVtcHRfaGFuZy5jb3VudCwKPiArCQkJCSAgICAgICBkZXB0aCk7Cj4g KwkJCQllcnIgPSAtRUlOVkFMOwo+ICsJCQkJZ290byBlcnJfY2xpZW50XzM7Cj4gKwkJCX0KPiAr CQl9Cj4gKwl9Cj4gKwo+ICsJZXJyID0gMDsKPiArZXJyX2NsaWVudF8zOgo+ICsJcHJlZW1wdF9j bGllbnRfZmluaSgmY2xpZW50WzNdKTsKPiArZXJyX2NsaWVudF8yOgo+ICsJcHJlZW1wdF9jbGll bnRfZmluaSgmY2xpZW50WzJdKTsKPiArZXJyX2NsaWVudF8xOgo+ICsJcHJlZW1wdF9jbGllbnRf ZmluaSgmY2xpZW50WzFdKTsKPiArZXJyX2NsaWVudF8wOgo+ICsJcHJlZW1wdF9jbGllbnRfZmlu aSgmY2xpZW50WzBdKTsKPiArZXJyX3VubG9jazoKPiArCWlmIChpZ3RfZmx1c2hfdGVzdChpOTE1 LCBJOTE1X1dBSVRfTE9DS0VEKSkKPiArCQllcnIgPSAtRUlPOwo+ICsJaW50ZWxfcnVudGltZV9w bV9wdXQoaTkxNSwgd2FrZXJlZik7Cj4gKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3Rf bXV0ZXgpOwo+ICsJcmV0dXJuIGVycjsKPiArCj4gK2Vycl93ZWRnZWQ6Cj4gKwlmb3IgKGkgPSAw OyBpIDwgQVJSQVlfU0laRShjbGllbnQpOyBpKyspCj4gKwkJaWd0X3NwaW5uZXJfZW5kKCZjbGll bnRbaV0uc3Bpbik7Cj4gKwlpOTE1X2dlbV9zZXRfd2VkZ2VkKGk5MTUpOwo+ICsJZXJyID0gLUVJ TzsKPiArCWdvdG8gZXJyX2NsaWVudF8zOwo+ICt9Cj4gKwo+ICAgc3RhdGljIGludCBsaXZlX2No YWluX3ByZWVtcHQodm9pZCAqYXJnKQo+ICAgewo+ICAgCXN0cnVjdCBkcm1faTkxNV9wcml2YXRl ICppOTE1ID0gYXJnOwo+IEBAIC04ODcsNiArMTA0Nyw3IEBAIGludCBpbnRlbF9leGVjbGlzdHNf bGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICAJCVNVQlRF U1QobGl2ZV9wcmVlbXB0KSwKPiAgIAkJU1VCVEVTVChsaXZlX2xhdGVfcHJlZW1wdCksCj4gICAJ CVNVQlRFU1QobGl2ZV9zdXBwcmVzc19zZWxmX3ByZWVtcHQpLAo+ICsJCVNVQlRFU1QobGl2ZV9z dXBwcmVzc193YWl0X3ByZWVtcHQpLAo+ICAgCQlTVUJURVNUKGxpdmVfY2hhaW5fcHJlZW1wdCks Cj4gICAJCVNVQlRFU1QobGl2ZV9wcmVlbXB0X2hhbmcpLAo+ICAgCQlTVUJURVNUKGxpdmVfcHJl ZW1wdF9zbW9rZSksCj4gCgpSZXZpZXdlZC1ieTogVHZydGtvIFVyc3VsaW4gPHR2cnRrby51cnN1 bGluQGludGVsLmNvbT4KClJlZ2FyZHMsCgpUdnJ0a28KX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1nZnhA bGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxt YW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==