From mboxrd@z Thu Jan 1 00:00:00 1970 From: Tvrtko Ursulin Subject: Re: [PATCH v2] drm/i915/execlists: Cancel banned contexts on schedule-out Date: Fri, 11 Oct 2019 14:10:21 +0100 Message-ID: References: <20191010071434.31195-7-chris@chris-wilson.co.uk> <20191011111601.26850-1-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 mga12.intel.com (mga12.intel.com [192.55.52.136]) by gabe.freedesktop.org (Postfix) with ESMTPS id 8FB9A6E2FF for ; Fri, 11 Oct 2019 13:10:26 +0000 (UTC) In-Reply-To: <20191011111601.26850-1-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 Ck9uIDExLzEwLzIwMTkgMTI6MTYsIENocmlzIFdpbHNvbiB3cm90ZToKPiBPbiBzY2hlZHVsZS1v dXQgKENTIGNvbXBsZXRpb24pIG9mIGEgYmFubmVkIGNvbnRleHQsIHNjcnViIHRoZSBjb250ZXh0 Cj4gaW1hZ2Ugc28gdGhhdCB3ZSBkbyBub3QgcmVwbGF5IHRoZSBhY3RpdmUgcGF5bG9hZC4gVGhl IGludGVudCBpcyB0aGF0IHdlCj4gc2tpcCBiYW5uZWQgcGF5bG9hZHMgb24gcmVxdWVzdCBzdWJt aXNzaW9uIHNvIHRoYXQgdGhlIHRpbWVsaW5lCj4gYWR2YW5jZW1lbnQgY29udGludWVzIG9uIGlu IHRoZSBiYWNrZ3JvdW5kLiBIb3dldmVyLCBpZiB3ZSBhcmUgcmV0dXJuaW5nCj4gdG8gYSBwcmVl bXB0ZWQgcmVxdWVzdCwgaTkxNV9yZXF1ZXN0X3NraXAoKSBpcyBpbmVmZmVjdGl2ZSBhbmQgaW5z dGVhZCB3ZQo+IG5lZWQgdG8gcGF0Y2ggdXAgdGhlIGNvbnRleHQgaW1hZ2Ugc28gdGhhdCBpdCBj b250aW51ZXMgZnJvbSB0aGUgc3RhcnQKPiBvZiB0aGUgbmV4dCByZXF1ZXN0Lgo+IAo+IHYyOiBG aXh1cCBjYW5jZWxsYXRpb24gc28gdGhhdCB3ZSBvbmx5IHNjcnViIHRoZSBwYXlsb2FkIG9mIHRo ZSBhY3RpdmUKPiByZXF1ZXN0IGFuZCBkbyBub3Qgc2hvcnQtY2lyY3VpdCB0aGUgYnJlYWRjcnVt YnMgKHdoaWNoIG1pZ2h0IGNhdXNlCj4gb3RoZXIgY29udGV4dHMgdG8gZXhlY3V0ZSBvdXQgb2Yg b3JkZXIpLgo+IAo+IFNpZ25lZC1vZmYtYnk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2ls c29uLmNvLnVrPgo+IENjOiBUdnJ0a28gVXJzdWxpbiA8dHZydGtvLnVyc3VsaW5AaW50ZWwuY29t Pgo+IC0tLQo+ICAgZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMgICAgfCAgOTEg KysrKysrLS0tCj4gICBkcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYyB8IDI3 MyArKysrKysrKysrKysrKysrKysrKysrKysrCj4gICAyIGZpbGVzIGNoYW5nZWQsIDM0MSBpbnNl cnRpb25zKCspLCAyMyBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUv ZHJtL2k5MTUvZ3QvaW50ZWxfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9pbnRlbF9s cmMuYwo+IGluZGV4IDA5ZmM1ZWNmZGQwOS4uODA5YTVkZDk3YzE0IDEwMDY0NAo+IC0tLSBhL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L2d0L2ludGVsX2xyYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJt L2k5MTUvZ3QvaW50ZWxfbHJjLmMKPiBAQCAtMjM0LDYgKzIzNCw5IEBAIHN0YXRpYyB2b2lkIGV4 ZWNsaXN0c19pbml0X3JlZ19zdGF0ZSh1MzIgKnJlZ19zdGF0ZSwKPiAgIAkJCQkgICAgIGNvbnN0 IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZSwKPiAgIAkJCQkgICAgIGNvbnN0IHN0cnVj dCBpbnRlbF9yaW5nICpyaW5nLAo+ICAgCQkJCSAgICAgYm9vbCBjbG9zZSk7Cj4gK3N0YXRpYyB2 b2lkCj4gK19fZXhlY2xpc3RzX3VwZGF0ZV9yZWdfc3RhdGUoY29uc3Qgc3RydWN0IGludGVsX2Nv bnRleHQgKmNlLAo+ICsJCQkgICAgIGNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2lu ZSk7Cj4gICAKPiAgIHN0YXRpYyB2b2lkIF9fY29udGV4dF9waW5fYWNxdWlyZShzdHJ1Y3QgaW50 ZWxfY29udGV4dCAqY2UpCj4gICB7Cj4gQEAgLTI1Niw2ICsyNTksMjkgQEAgc3RhdGljIHZvaWQg bWFya19laW8oc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gICAJaTkxNV9yZXF1ZXN0X21hcmtf Y29tcGxldGUocnEpOwo+ICAgfQo+ICAgCj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICph Y3RpdmVfcmVxdWVzdChzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICpycSkKPiArewo+ICsJY29uc3Qgc3Ry dWN0IGludGVsX2NvbnRleHQgKiBjb25zdCBjZSA9IHJxLT5od19jb250ZXh0Owo+ICsJc3RydWN0 IGk5MTVfcmVxdWVzdCAqYWN0aXZlID0gTlVMTDsKPiArCXN0cnVjdCBsaXN0X2hlYWQgKmxpc3Q7 Cj4gKwo+ICsJaWYgKCFpOTE1X3JlcXVlc3RfaXNfYWN0aXZlKHJxKSkgLyogdW53b3VuZCwgYnV0 IGluY29tcGxldGUhICovCj4gKwkJcmV0dXJuIHJxOwo+ICsKPiArCWxpc3QgPSAmaTkxNV9yZXF1 ZXN0X2FjdGl2ZV90aW1lbGluZShycSktPnJlcXVlc3RzOwo+ICsJbGlzdF9mb3JfZWFjaF9lbnRy eV9mcm9tX3JldmVyc2UocnEsIGxpc3QsIGxpbmspIHsKPiArCQlpZiAoaTkxNV9yZXF1ZXN0X2Nv bXBsZXRlZChycSkpCj4gKwkJCWJyZWFrOwo+ICsKPiArCQlpZiAocnEtPmh3X2NvbnRleHQgIT0g Y2UpCj4gKwkJCWJyZWFrOwoKV291bGQgaXQgYmUgb2YgYW55IHZhbHVlIGhlcmUgdG8gYWxzbyBj aGVjayB0aGUgaW5pdGlhbCBicmVhZGNydW1iIG1hdGNoZXM/Cgo+ICsKPiArCQlhY3RpdmUgPSBy cTsKPiArCX0KPiArCj4gKwlyZXR1cm4gYWN0aXZlOwo+ICt9Cj4gKwo+ICAgc3RhdGljIGlubGlu ZSB1MzIgaW50ZWxfaHdzX3ByZWVtcHRfYWRkcmVzcyhzdHJ1Y3QgaW50ZWxfZW5naW5lX2NzICpl bmdpbmUpCj4gICB7Cj4gICAJcmV0dXJuIChpOTE1X2dndHRfb2Zmc2V0KGVuZ2luZS0+c3RhdHVz X3BhZ2Uudm1hKSArCj4gQEAgLTk3Nyw2ICsxMDAzLDQ1IEBAIHN0YXRpYyB2b2lkIGtpY2tfc2li bGluZ3Moc3RydWN0IGk5MTVfcmVxdWVzdCAqcnEsIHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSkK PiAgIAkJdGFza2xldF9zY2hlZHVsZSgmdmUtPmJhc2UuZXhlY2xpc3RzLnRhc2tsZXQpOwo+ICAg fQo+ICAgCj4gK3N0YXRpYyB2b2lkIGNhbmNlbF9hY3RpdmUoc3RydWN0IGk5MTVfcmVxdWVzdCAq cnEsCj4gKwkJCSAgc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5lKQo+ICt7Cj4gKwlzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqIGNvbnN0IGNlID0gcnEtPmh3X2NvbnRleHQ7Cj4gKwl1MzIgKnJl Z3MgPSBjZS0+bHJjX3JlZ19zdGF0ZTsKPiArCj4gKwkvKgo+ICsJICogVGhlIGV4ZWN1dGluZyBj b250ZXh0IGhhcyBiZWVuIGNhbmNlbGxlZC4gRml4dXAgdGhlIGNvbnRleHQgc28gdGhhdAo+ICsJ ICogaXQgY29udGludWVzIG9uIGZyb20gdGhlIGJyZWFkY3J1bWIgYWZ0ZXIgdGhlIGJhdGNoIGFu ZCB3aWxsIGJlCj4gKwkgKiBtYXJrZWQgYXMgaW5jb21wbGV0ZSBbLUVJT10gdXBvbiBzaWduYWxp bmcuIFdlIHByZXNlcnZlIHRoZQoKV2hlcmUgZG9lcyB0aGUgLUVJTyBtYXJraW5nIGhhcHBlbiBu b3c/Cgo+ICsJICogYnJlYWRjcnVtYnMgYW5kIHNlbWFwaG9yZXMgb2YgdGhlIHN1YnNlcXVlbnQg cmVxdWVzdHMgc28gdGhhdAo+ICsJICogaW50ZXItdGltZWxpbmUgZGVwZW5kZW5jaWVzIHJlbWFp biBjb3JyZWN0bHkgb3JkZXJlZC4KPiArCSAqLwo+ICsJR0VNX1RSQUNFKCIlcyglcyk6IHsgcnE9 JWxseDolbGxkIH1cbiIsCj4gKwkJICBfX2Z1bmNfXywgZW5naW5lLT5uYW1lLCBycS0+ZmVuY2Uu Y29udGV4dCwgcnEtPmZlbmNlLnNlcW5vKTsKPiArCj4gKwlfX2NvbnRleHRfcGluX2FjcXVpcmUo Y2UpOwo+ICsKPiArCS8qIE9uIHJlc3VibWlzc2lvbiBvZiB0aGUgYWN0aXZlIHJlcXVlc3QsIGl0 J3MgcGF5bG9hZCBiZSBzY3J1YmJlZCAqLwo+ICsJcnEgPSBhY3RpdmVfcmVxdWVzdChycSk7Cj4g KwlpZiAocnEpCj4gKwkJY2UtPnJpbmctPmhlYWQgPSBpbnRlbF9yaW5nX3dyYXAoY2UtPnJpbmcs IHJxLT5oZWFkKTsKPiArCWVsc2UKPiArCQljZS0+cmluZy0+aGVhZCA9IGNlLT5yaW5nLT50YWls OwoKSSBkb24ndCBxdWl0ZSB1bmRlcnN0YW5kIHlldC4KCklmIGEgY29udGV4dCB3YXMgYmFubmVk IEknZCBleHBlY3QgYWxsIHJlcXVlc3RzIG9uIHRoZSB0bC0+cmVxdWVzdHMgdG8gCmJlIHphcHBl ZCBhbmQgd2Ugb25seSBtb3ZlIHRvIGV4ZWN1dGUgdGhlIGxhc3QgYnJlYWRjcnVtYiwgbm8/CgpT byBpZiB5b3UgZmluZCB0aGUgYWN0aXZlX3JlcXVlc3QgYW5kIHlvdSBzZXQgcmluZyBoZWFkIHRv IAphY3RpdmVfcnEtPmhlYWQgaG93IGRvZXMgdGhhdCBza2lwIHRoZSBwYXlsb2FkPwoKRnVydGhl cm1vcmUsIGlmIEkgdHJ5IHRvIHNrZXRjaCB0aGUgcnEtPnJlcXVlc3RzIHRpbWVsaW5lIGxpa2Ug dGhpczoKCiAgIFIwIHIxIHIyIHJbZWxzcF0gcjQgcjUKCidSJyA9IGNvbXBsZXRlZDsgJ3InID0g aW5jb21wbGV0ZQoKT24gc2NoZWR1bGVfb3V0KHJbZWxzcF0pIEknZCBleHBlY3QgeW91IHdhbnQg dG8gZmluZCByNSBhbmQgc2V0IHJpbmcgCmhlYWQgdG8gZmluYWwgYnJlYWRjcnVtYiBvZiBpdC4g QW5kIG1hcmsgcjEtcjUgYW5kIC1FSU8uIEFtIEkgY29tcGxldGVseSAKb24gdGhlIHdyb25nIHRy YWNrPwoKKEJlYXIgd2l0aCBtZSB3aXRoIHI0IGFuZCByNSwgYXNzdW1pbmcgc29tZW9uZSBoYXMg c2V0IHRoZSBjb250ZXh0IGFzIApzaW5nbGUgc3VibWlzc2lvbiBmb3IgZnV0dXJlIHByb29maW5n IHRoZSBjb2RlLikKClJlZ2FyZHMsCgpUdnJ0a28KCj4gKwo+ICsJLyogU2NydWIgdGhlIGNvbnRl eHQgaW1hZ2UgdG8gcHJldmVudCByZXBsYXlpbmcgdGhlIHByZXZpb3VzIGJhdGNoICovCj4gKwlt ZW1jcHkocmVncywgLyogc2tpcCByZXN0b3JpbmcgdGhlIHZhbmlsbGEgUFBIV1NQICovCj4gKwkg ICAgICAgZW5naW5lLT5waW5uZWRfZGVmYXVsdF9zdGF0ZSArIExSQ19TVEFURV9QTiAqIFBBR0Vf U0laRSwKPiArCSAgICAgICBlbmdpbmUtPmNvbnRleHRfc2l6ZSAtIFBBR0VfU0laRSk7Cj4gKwo+ ICsJZXhlY2xpc3RzX2luaXRfcmVnX3N0YXRlKHJlZ3MsIGNlLCBlbmdpbmUsIGNlLT5yaW5nLCBm YWxzZSk7Cj4gKwlfX2V4ZWNsaXN0c191cGRhdGVfcmVnX3N0YXRlKGNlLCBlbmdpbmUpOwo+ICsK PiArCS8qIFdlJ3ZlIHN3aXRjaGVkIGF3YXksIHNvIHRoaXMgc2hvdWxkIGJlIGEgbm8tb3AsIGJ1 dCBpbnRlbnQgbWF0dGVycyAqLwo+ICsJY2UtPmxyY19kZXNjIHw9IENUWF9ERVNDX0ZPUkNFX1JF U1RPUkU7Cj4gKwo+ICsJX19jb250ZXh0X3Bpbl9yZWxlYXNlKGNlKTsKPiArfQo+ICsKPiAgIHN0 YXRpYyBpbmxpbmUgdm9pZAo+ICAgX19leGVjbGlzdHNfc2NoZWR1bGVfb3V0KHN0cnVjdCBpOTE1 X3JlcXVlc3QgKnJxLAo+ICAgCQkJIHN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKiBjb25zdCBlbmdp bmUpCj4gQEAgLTk4Nyw2ICsxMDUyLDkgQEAgX19leGVjbGlzdHNfc2NoZWR1bGVfb3V0KHN0cnVj dCBpOTE1X3JlcXVlc3QgKnJxLAo+ICAgCWV4ZWNsaXN0c19jb250ZXh0X3N0YXR1c19jaGFuZ2Uo cnEsIElOVEVMX0NPTlRFWFRfU0NIRURVTEVfT1VUKTsKPiAgIAlpbnRlbF9ndF9wbV9wdXQoZW5n aW5lLT5ndCk7Cj4gICAKPiArCWlmICh1bmxpa2VseShpOTE1X2dlbV9jb250ZXh0X2lzX2Jhbm5l ZChjZS0+Z2VtX2NvbnRleHQpKSkKPiArCQljYW5jZWxfYWN0aXZlKHJxLCBlbmdpbmUpOwo+ICsK PiAgIAkvKgo+ICAgCSAqIElmIHRoaXMgaXMgcGFydCBvZiBhIHZpcnR1YWwgZW5naW5lLCBpdHMg bmV4dCByZXF1ZXN0IG1heQo+ICAgCSAqIGhhdmUgYmVlbiBibG9ja2VkIHdhaXRpbmcgZm9yIGFj Y2VzcyB0byB0aGUgYWN0aXZlIGNvbnRleHQuCj4gQEAgLTI3NzYsMjkgKzI4NDQsNiBAQCBzdGF0 aWMgdm9pZCByZXNldF9jc2JfcG9pbnRlcnMoc3RydWN0IGludGVsX2VuZ2luZV9jcyAqZW5naW5l KQo+ICAgCQkJICAgICAgICZleGVjbGlzdHMtPmNzYl9zdGF0dXNbcmVzZXRfdmFsdWVdKTsKPiAg IH0KPiAgIAo+IC1zdGF0aWMgc3RydWN0IGk5MTVfcmVxdWVzdCAqYWN0aXZlX3JlcXVlc3Qoc3Ry dWN0IGk5MTVfcmVxdWVzdCAqcnEpCj4gLXsKPiAtCWNvbnN0IHN0cnVjdCBpbnRlbF9jb250ZXh0 ICogY29uc3QgY2UgPSBycS0+aHdfY29udGV4dDsKPiAtCXN0cnVjdCBpOTE1X3JlcXVlc3QgKmFj dGl2ZSA9IE5VTEw7Cj4gLQlzdHJ1Y3QgbGlzdF9oZWFkICpsaXN0Owo+IC0KPiAtCWlmICghaTkx NV9yZXF1ZXN0X2lzX2FjdGl2ZShycSkpIC8qIHVud291bmQsIGJ1dCBpbmNvbXBsZXRlISAqLwo+ IC0JCXJldHVybiBycTsKPiAtCj4gLQlsaXN0ID0gJmk5MTVfcmVxdWVzdF9hY3RpdmVfdGltZWxp bmUocnEpLT5yZXF1ZXN0czsKPiAtCWxpc3RfZm9yX2VhY2hfZW50cnlfZnJvbV9yZXZlcnNlKHJx LCBsaXN0LCBsaW5rKSB7Cj4gLQkJaWYgKGk5MTVfcmVxdWVzdF9jb21wbGV0ZWQocnEpKQo+IC0J CQlicmVhazsKPiAtCj4gLQkJaWYgKHJxLT5od19jb250ZXh0ICE9IGNlKQo+IC0JCQlicmVhazsK PiAtCj4gLQkJYWN0aXZlID0gcnE7Cj4gLQl9Cj4gLQo+IC0JcmV0dXJuIGFjdGl2ZTsKPiAtfQo+ IC0KPiAgIHN0YXRpYyB2b2lkIF9fZXhlY2xpc3RzX3Jlc2V0X3JlZ19zdGF0ZShjb25zdCBzdHJ1 Y3QgaW50ZWxfY29udGV4dCAqY2UsCj4gICAJCQkJCWNvbnN0IHN0cnVjdCBpbnRlbF9lbmdpbmVf Y3MgKmVuZ2luZSkKPiAgIHsKPiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvZ3Qv c2VsZnRlc3RfbHJjLmMgYi9kcml2ZXJzL2dwdS9kcm0vaTkxNS9ndC9zZWxmdGVzdF9scmMuYwo+ IGluZGV4IDEyNzZkYTA1OWRjNi4uOWQ4NDJlMzI3YWExIDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L2d0L3NlbGZ0ZXN0X2xyYy5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvZ3Qvc2VsZnRlc3RfbHJjLmMKPiBAQCAtNyw2ICs3LDcgQEAKPiAgICNpbmNsdWRlIDxsaW51 eC9wcmltZV9udW1iZXJzLmg+Cj4gICAKPiAgICNpbmNsdWRlICJnZW0vaTkxNV9nZW1fcG0uaCIK PiArI2luY2x1ZGUgImd0L2ludGVsX2VuZ2luZV9oZWFydGJlYXQuaCIKPiAgICNpbmNsdWRlICJn dC9pbnRlbF9yZXNldC5oIgo+ICAgCj4gICAjaW5jbHVkZSAiaTkxNV9zZWxmdGVzdC5oIgo+IEBA IC0xMDE2LDYgKzEwMTcsMjc3IEBAIHN0YXRpYyBpbnQgbGl2ZV9ub3ByZWVtcHQodm9pZCAqYXJn KQo+ICAgCWdvdG8gZXJyX2NsaWVudF9iOwo+ICAgfQo+ICAgCj4gK3N0cnVjdCBsaXZlX3ByZWVt cHRfY2FuY2VsIHsKPiArCXN0cnVjdCBpbnRlbF9lbmdpbmVfY3MgKmVuZ2luZTsKPiArCXN0cnVj dCBwcmVlbXB0X2NsaWVudCBhLCBiOwo+ICt9Owo+ICsKPiArc3RhdGljIGludCBfX2NhbmNlbF9h Y3RpdmUwKHN0cnVjdCBsaXZlX3ByZWVtcHRfY2FuY2VsICphcmcpCj4gK3sKPiArCXN0cnVjdCBp OTE1X3JlcXVlc3QgKnJxOwo+ICsJc3RydWN0IGlndF9saXZlX3Rlc3QgdDsKPiArCWludCBlcnI7 Cj4gKwo+ICsJLyogUHJlZW1wdCBjYW5jZWwgb2YgRUxTUDAgKi8KPiArCUdFTV9UUkFDRSgiJXMo JXMpXG4iLCBfX2Z1bmNfXywgYXJnLT5lbmdpbmUtPm5hbWUpOwo+ICsKPiArCWlmIChpZ3RfbGl2 ZV90ZXN0X2JlZ2luKCZ0LCBhcmctPmVuZ2luZS0+aTkxNSwKPiArCQkJCV9fZnVuY19fLCBhcmct PmVuZ2luZS0+bmFtZSkpCj4gKwkJcmV0dXJuIC1FSU87Cj4gKwo+ICsJY2xlYXJfYml0KENPTlRF WFRfQkFOTkVELCAmYXJnLT5hLmN0eC0+ZmxhZ3MpOwo+ICsJcnEgPSBzcGlubmVyX2NyZWF0ZV9y ZXF1ZXN0KCZhcmctPmEuc3BpbiwKPiArCQkJCSAgICBhcmctPmEuY3R4LCBhcmctPmVuZ2luZSwK PiArCQkJCSAgICBNSV9BUkJfQ0hFQ0spOwo+ICsJaWYgKElTX0VSUihycSkpCj4gKwkJcmV0dXJu IFBUUl9FUlIocnEpOwo+ICsKPiArCWk5MTVfcmVxdWVzdF9nZXQocnEpOwo+ICsJaTkxNV9yZXF1 ZXN0X2FkZChycSk7Cj4gKwlpZiAoIWlndF93YWl0X2Zvcl9zcGlubmVyKCZhcmctPmEuc3Bpbiwg cnEpKSB7Cj4gKwkJZXJyID0gLUVJTzsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwlpOTE1 X2dlbV9jb250ZXh0X3NldF9iYW5uZWQoYXJnLT5hLmN0eCk7Cj4gKwllcnIgPSBpbnRlbF9lbmdp bmVfcHVsc2UoYXJnLT5lbmdpbmUpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIG91dDsKPiArCj4g KwlpZiAoaTkxNV9yZXF1ZXN0X3dhaXQocnEsIDAsIEhaIC8gNSkgPCAwKSB7Cj4gKwkJZXJyID0g LUVJTzsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwlpZiAocnEtPmZlbmNlLmVycm9yICE9 IC1FSU8pIHsKPiArCQlwcl9lcnIoIkNhbmNlbGxlZCBpbmZsaWdodDAgcmVxdWVzdCBkaWQgbm90 IHJlcG9ydCAtRUlPXG4iKTsKPiArCQllcnIgPSAtRUlOVkFMOwo+ICsJCWdvdG8gb3V0Owo+ICsJ fQo+ICsKPiArb3V0Ogo+ICsJaTkxNV9yZXF1ZXN0X3B1dChycSk7Cj4gKwlpZiAoaWd0X2xpdmVf dGVzdF9lbmQoJnQpKQo+ICsJCWVyciA9IC1FSU87Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ ICtzdGF0aWMgaW50IF9fY2FuY2VsX2FjdGl2ZTEoc3RydWN0IGxpdmVfcHJlZW1wdF9jYW5jZWwg KmFyZykKPiArewo+ICsJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnFbMl0gPSB7fTsKPiArCXN0cnVj dCBpZ3RfbGl2ZV90ZXN0IHQ7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCS8qIFByZWVtcHQgY2FuY2Vs IG9mIEVMU1AxICovCj4gKwlHRU1fVFJBQ0UoIiVzKCVzKVxuIiwgX19mdW5jX18sIGFyZy0+ZW5n aW5lLT5uYW1lKTsKPiArCj4gKwlpZiAoaWd0X2xpdmVfdGVzdF9iZWdpbigmdCwgYXJnLT5lbmdp bmUtPmk5MTUsCj4gKwkJCQlfX2Z1bmNfXywgYXJnLT5lbmdpbmUtPm5hbWUpKQo+ICsJCXJldHVy biAtRUlPOwo+ICsKPiArCWNsZWFyX2JpdChDT05URVhUX0JBTk5FRCwgJmFyZy0+YS5jdHgtPmZs YWdzKTsKPiArCXJxWzBdID0gc3Bpbm5lcl9jcmVhdGVfcmVxdWVzdCgmYXJnLT5hLnNwaW4sCj4g KwkJCQkgICAgICAgYXJnLT5hLmN0eCwgYXJnLT5lbmdpbmUsCj4gKwkJCQkgICAgICAgTUlfTk9P UCk7IC8qIG5vIHByZWVtcHRpb24gKi8KPiArCWlmIChJU19FUlIocnFbMF0pKQo+ICsJCXJldHVy biBQVFJfRVJSKHJxWzBdKTsKPiArCj4gKwlpOTE1X3JlcXVlc3RfZ2V0KHJxWzBdKTsKPiArCWk5 MTVfcmVxdWVzdF9hZGQocnFbMF0pOwo+ICsJaWYgKCFpZ3Rfd2FpdF9mb3Jfc3Bpbm5lcigmYXJn LT5hLnNwaW4sIHJxWzBdKSkgewo+ICsJCWVyciA9IC1FSU87Cj4gKwkJZ290byBvdXQ7Cj4gKwl9 Cj4gKwo+ICsJY2xlYXJfYml0KENPTlRFWFRfQkFOTkVELCAmYXJnLT5iLmN0eC0+ZmxhZ3MpOwo+ ICsJcnFbMV0gPSBzcGlubmVyX2NyZWF0ZV9yZXF1ZXN0KCZhcmctPmIuc3BpbiwKPiArCQkJCSAg ICAgICBhcmctPmIuY3R4LCBhcmctPmVuZ2luZSwKPiArCQkJCSAgICAgICBNSV9BUkJfQ0hFQ0sp Owo+ICsJaWYgKElTX0VSUihycVsxXSkpIHsKPiArCQllcnIgPSBQVFJfRVJSKHJxWzFdKTsKPiAr CQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwlpOTE1X3JlcXVlc3RfZ2V0KHJxWzFdKTsKPiArCWVy ciA9IGk5MTVfcmVxdWVzdF9hd2FpdF9kbWFfZmVuY2UocnFbMV0sICZycVswXS0+ZmVuY2UpOwo+ ICsJaTkxNV9yZXF1ZXN0X2FkZChycVsxXSk7Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8gb3V0Owo+ ICsKPiArCWk5MTVfZ2VtX2NvbnRleHRfc2V0X2Jhbm5lZChhcmctPmIuY3R4KTsKPiArCWVyciA9 IGludGVsX2VuZ2luZV9wdWxzZShhcmctPmVuZ2luZSk7Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8g b3V0Owo+ICsKPiArCWlndF9zcGlubmVyX2VuZCgmYXJnLT5hLnNwaW4pOwo+ICsJaWYgKGk5MTVf cmVxdWVzdF93YWl0KHJxWzFdLCAwLCBIWiAvIDUpIDwgMCkgewo+ICsJCWVyciA9IC1FSU87Cj4g KwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJxWzBdLT5mZW5jZS5lcnJvciAhPSAwKSB7 Cj4gKwkJcHJfZXJyKCJOb3JtYWwgaW5mbGlnaHQwIHJlcXVlc3QgZGlkIG5vdCBjb21wbGV0ZVxu Iik7Cj4gKwkJZXJyID0gLUVJTlZBTDsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwlpZiAo cnFbMV0tPmZlbmNlLmVycm9yICE9IC1FSU8pIHsKPiArCQlwcl9lcnIoIkNhbmNlbGxlZCBpbmZs aWdodDEgcmVxdWVzdCBkaWQgbm90IHJlcG9ydCAtRUlPXG4iKTsKPiArCQllcnIgPSAtRUlOVkFM Owo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArb3V0Ogo+ICsJaTkxNV9yZXF1ZXN0X3B1dChy cVsxXSk7Cj4gKwlpOTE1X3JlcXVlc3RfcHV0KHJxWzBdKTsKPiArCWlmIChpZ3RfbGl2ZV90ZXN0 X2VuZCgmdCkpCj4gKwkJZXJyID0gLUVJTzsKPiArCXJldHVybiBlcnI7Cj4gK30KPiArCj4gK3N0 YXRpYyBpbnQgX19jYW5jZWxfcXVldWVkKHN0cnVjdCBsaXZlX3ByZWVtcHRfY2FuY2VsICphcmcp Cj4gK3sKPiArCXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxWzNdID0ge307Cj4gKwlzdHJ1Y3QgaWd0 X2xpdmVfdGVzdCB0Owo+ICsJaW50IGVycjsKPiArCj4gKwkvKiBGdWxsIEVMU1AgYW5kIG9uZSBp biB0aGUgd2luZ3MgKi8KPiArCUdFTV9UUkFDRSgiJXMoJXMpXG4iLCBfX2Z1bmNfXywgYXJnLT5l bmdpbmUtPm5hbWUpOwo+ICsKPiArCWlmIChpZ3RfbGl2ZV90ZXN0X2JlZ2luKCZ0LCBhcmctPmVu Z2luZS0+aTkxNSwKPiArCQkJCV9fZnVuY19fLCBhcmctPmVuZ2luZS0+bmFtZSkpCj4gKwkJcmV0 dXJuIC1FSU87Cj4gKwo+ICsJY2xlYXJfYml0KENPTlRFWFRfQkFOTkVELCAmYXJnLT5hLmN0eC0+ ZmxhZ3MpOwo+ICsJcnFbMF0gPSBzcGlubmVyX2NyZWF0ZV9yZXF1ZXN0KCZhcmctPmEuc3BpbiwK PiArCQkJCSAgICAgICBhcmctPmEuY3R4LCBhcmctPmVuZ2luZSwKPiArCQkJCSAgICAgICBNSV9B UkJfQ0hFQ0spOwo+ICsJaWYgKElTX0VSUihycVswXSkpCj4gKwkJcmV0dXJuIFBUUl9FUlIocnFb MF0pOwo+ICsKPiArCWk5MTVfcmVxdWVzdF9nZXQocnFbMF0pOwo+ICsJaTkxNV9yZXF1ZXN0X2Fk ZChycVswXSk7Cj4gKwlpZiAoIWlndF93YWl0X2Zvcl9zcGlubmVyKCZhcmctPmEuc3BpbiwgcnFb MF0pKSB7Cj4gKwkJZXJyID0gLUVJTzsKPiArCQlnb3RvIG91dDsKPiArCX0KPiArCj4gKwljbGVh cl9iaXQoQ09OVEVYVF9CQU5ORUQsICZhcmctPmIuY3R4LT5mbGFncyk7Cj4gKwlycVsxXSA9IGln dF9yZXF1ZXN0X2FsbG9jKGFyZy0+Yi5jdHgsIGFyZy0+ZW5naW5lKTsKPiArCWlmIChJU19FUlIo cnFbMV0pKSB7Cj4gKwkJZXJyID0gUFRSX0VSUihycVsxXSk7Cj4gKwkJZ290byBvdXQ7Cj4gKwl9 Cj4gKwo+ICsJaTkxNV9yZXF1ZXN0X2dldChycVsxXSk7Cj4gKwllcnIgPSBpOTE1X3JlcXVlc3Rf YXdhaXRfZG1hX2ZlbmNlKHJxWzFdLCAmcnFbMF0tPmZlbmNlKTsKPiArCWk5MTVfcmVxdWVzdF9h ZGQocnFbMV0pOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIG91dDsKPiArCj4gKwlycVsyXSA9IHNw aW5uZXJfY3JlYXRlX3JlcXVlc3QoJmFyZy0+Yi5zcGluLAo+ICsJCQkJICAgICAgIGFyZy0+YS5j dHgsIGFyZy0+ZW5naW5lLAo+ICsJCQkJICAgICAgIE1JX0FSQl9DSEVDSyk7Cj4gKwlpZiAoSVNf RVJSKHJxWzJdKSkgewo+ICsJCWVyciA9IFBUUl9FUlIocnFbMl0pOwo+ICsJCWdvdG8gb3V0Owo+ ICsJfQo+ICsKPiArCWk5MTVfcmVxdWVzdF9nZXQocnFbMl0pOwo+ICsJZXJyID0gaTkxNV9yZXF1 ZXN0X2F3YWl0X2RtYV9mZW5jZShycVsyXSwgJnJxWzFdLT5mZW5jZSk7Cj4gKwlpOTE1X3JlcXVl c3RfYWRkKHJxWzJdKTsKPiArCWlmIChlcnIpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJaTkxNV9n ZW1fY29udGV4dF9zZXRfYmFubmVkKGFyZy0+YS5jdHgpOwo+ICsJZXJyID0gaW50ZWxfZW5naW5l X3B1bHNlKGFyZy0+ZW5naW5lKTsKPiArCWlmIChlcnIpCj4gKwkJZ290byBvdXQ7Cj4gKwo+ICsJ aWYgKGk5MTVfcmVxdWVzdF93YWl0KHJxWzJdLCAwLCBIWiAvIDUpIDwgMCkgewo+ICsJCWVyciA9 IC1FSU87Cj4gKwkJZ290byBvdXQ7Cj4gKwl9Cj4gKwo+ICsJaWYgKHJxWzBdLT5mZW5jZS5lcnJv ciAhPSAtRUlPKSB7Cj4gKwkJcHJfZXJyKCJDYW5jZWxsZWQgaW5mbGlnaHQwIHJlcXVlc3QgZGlk IG5vdCByZXBvcnQgLUVJT1xuIik7Cj4gKwkJZXJyID0gLUVJTlZBTDsKPiArCQlnb3RvIG91dDsK PiArCX0KPiArCj4gKwlpZiAocnFbMV0tPmZlbmNlLmVycm9yICE9IDApIHsKPiArCQlwcl9lcnIo Ik5vcm1hbCBpbmZsaWdodDEgcmVxdWVzdCBkaWQgbm90IGNvbXBsZXRlXG4iKTsKPiArCQllcnIg PSAtRUlOVkFMOwo+ICsJCWdvdG8gb3V0Owo+ICsJfQo+ICsKPiArCWlmIChycVsyXS0+ZmVuY2Uu ZXJyb3IgIT0gLUVJTykgewo+ICsJCXByX2VycigiQ2FuY2VsbGVkIHF1ZXVlZCByZXF1ZXN0IGRp ZCBub3QgcmVwb3J0IC1FSU9cbiIpOwo+ICsJCWVyciA9IC1FSU5WQUw7Cj4gKwkJZ290byBvdXQ7 Cj4gKwl9Cj4gKwo+ICtvdXQ6Cj4gKwlpOTE1X3JlcXVlc3RfcHV0KHJxWzJdKTsKPiArCWk5MTVf cmVxdWVzdF9wdXQocnFbMV0pOwo+ICsJaTkxNV9yZXF1ZXN0X3B1dChycVswXSk7Cj4gKwlpZiAo aWd0X2xpdmVfdGVzdF9lbmQoJnQpKQo+ICsJCWVyciA9IC1FSU87Cj4gKwlyZXR1cm4gZXJyOwo+ ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGxpdmVfcHJlZW1wdF9jYW5jZWwodm9pZCAqYXJnKQo+ICt7 Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsKPiArCXN0cnVjdCBsaXZl X3ByZWVtcHRfY2FuY2VsIGRhdGE7Cj4gKwllbnVtIGludGVsX2VuZ2luZV9pZCBpZDsKPiArCWlu dCBlcnIgPSAtRU5PTUVNOwo+ICsKPiArCS8qCj4gKwkgKiBUbyBjYW5jZWwgYW4gaW5mbGlnaHQg Y29udGV4dCwgd2UgbmVlZCB0byBmaXJzdCByZW1vdmUgaXQgZnJvbSB0aGUKPiArCSAqIEdQVS4g VGhhdCBzb3VuZHMgbGlrZSBwcmVlbXB0aW9uISBQbHVzIGEgbGl0dGxlIGJpdCBvZiBib29ra2Vl cGluZy4KPiArCSAqLwo+ICsKPiArCWlmICghSEFTX0xPR0lDQUxfUklOR19QUkVFTVBUSU9OKGk5 MTUpKQo+ICsJCXJldHVybiAwOwo+ICsKPiArCWlmIChwcmVlbXB0X2NsaWVudF9pbml0KGk5MTUs ICZkYXRhLmEpKQo+ICsJCXJldHVybiAtRU5PTUVNOwo+ICsJaWYgKHByZWVtcHRfY2xpZW50X2lu aXQoaTkxNSwgJmRhdGEuYikpCj4gKwkJZ290byBlcnJfY2xpZW50X2E7Cj4gKwo+ICsJZm9yX2Vh Y2hfZW5naW5lKGRhdGEuZW5naW5lLCBpOTE1LCBpZCkgewo+ICsJCWlmICghaW50ZWxfZW5naW5l X2hhc19wcmVlbXB0aW9uKGRhdGEuZW5naW5lKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCWVy ciA9IF9fY2FuY2VsX2FjdGl2ZTAoJmRhdGEpOwo+ICsJCWlmIChlcnIpCj4gKwkJCWdvdG8gZXJy X3dlZGdlZDsKPiArCj4gKwkJZXJyID0gX19jYW5jZWxfYWN0aXZlMSgmZGF0YSk7Cj4gKwkJaWYg KGVycikKPiArCQkJZ290byBlcnJfd2VkZ2VkOwo+ICsKPiArCQllcnIgPSBfX2NhbmNlbF9xdWV1 ZWQoJmRhdGEpOwo+ICsJCWlmIChlcnIpCj4gKwkJCWdvdG8gZXJyX3dlZGdlZDsKPiArCX0KPiAr Cj4gKwllcnIgPSAwOwo+ICtlcnJfY2xpZW50X2I6Cj4gKwlwcmVlbXB0X2NsaWVudF9maW5pKCZk YXRhLmIpOwo+ICtlcnJfY2xpZW50X2E6Cj4gKwlwcmVlbXB0X2NsaWVudF9maW5pKCZkYXRhLmEp Owo+ICsJcmV0dXJuIGVycjsKPiArCj4gK2Vycl93ZWRnZWQ6Cj4gKwlHRU1fVFJBQ0VfRFVNUCgp Owo+ICsJaWd0X3NwaW5uZXJfZW5kKCZkYXRhLmIuc3Bpbik7Cj4gKwlpZ3Rfc3Bpbm5lcl9lbmQo JmRhdGEuYS5zcGluKTsKPiArCWludGVsX2d0X3NldF93ZWRnZWQoJmk5MTUtPmd0KTsKPiArCWdv dG8gZXJyX2NsaWVudF9iOwo+ICt9Cj4gKwo+ICAgc3RhdGljIGludCBsaXZlX3N1cHByZXNzX3Nl bGZfcHJlZW1wdCh2b2lkICphcmcpCj4gICB7Cj4gICAJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUg Kmk5MTUgPSBhcmc7Cj4gQEAgLTI0NTIsNiArMjcyNCw3IEBAIGludCBpbnRlbF9leGVjbGlzdHNf bGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gICAJCVNVQlRF U1QobGl2ZV9wcmVlbXB0KSwKPiAgIAkJU1VCVEVTVChsaXZlX2xhdGVfcHJlZW1wdCksCj4gICAJ CVNVQlRFU1QobGl2ZV9ub3ByZWVtcHQpLAo+ICsJCVNVQlRFU1QobGl2ZV9wcmVlbXB0X2NhbmNl bCksCj4gICAJCVNVQlRFU1QobGl2ZV9zdXBwcmVzc19zZWxmX3ByZWVtcHQpLAo+ICAgCQlTVUJU RVNUKGxpdmVfc3VwcHJlc3Nfd2FpdF9wcmVlbXB0KSwKPiAgIAkJU1VCVEVTVChsaXZlX2NoYWlu X3ByZWVtcHQpLAo+IApfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpJbnRlbC1nZnggbWFpbGluZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5v cmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1n Zng=