From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH v2] drm/i915/selftests: Exercise CS TLB invalidation Date: Thu, 19 Sep 2019 16:40:15 +0300 Message-ID: <87lfukpfpc.fsf@gaia.fi.intel.com> References: <20190915163749.19540-1-chris@chris-wilson.co.uk> <20190919131414.7495-1-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga18.intel.com (mga18.intel.com [134.134.136.126]) by gabe.freedesktop.org (Postfix) with ESMTPS id 1E2AD6F73A for ; Thu, 19 Sep 2019 13:40:38 +0000 (UTC) In-Reply-To: <20190919131414.7495-1-chris@chris-wilson.co.uk> 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 Q2hyaXMgV2lsc29uIDxjaHJpc0BjaHJpcy13aWxzb24uY28udWs+IHdyaXRlczoKCj4gQ2hlY2sg dGhhdCB3ZSBhcmUgY29ycmVjdGx5IGludmFsaWRhdGluZyB0aGUgVExCIGF0IHRoZSBzdGFydCBv ZiBhCj4gYmF0Y2ggYWZ0ZXIgdXBkYXRpbmcgdGhlIEdUVC4KPgo+IHYyOiBDb21tZW50cyBhbmQg aG9sZCB0aGUgcmVxdWVzdCByZWZlcmVuY2Ugd2hpbGUgc3Bpbm5pbmcKPgo+IFNpZ25lZC1vZmYt Ynk6IENocmlzIFdpbHNvbiA8Y2hyaXNAY2hyaXMtd2lsc29uLmNvLnVrPgo+IENjOiBNaWthIEt1 b3BwYWxhIDxtaWthLmt1b3BwYWxhQGxpbnV4LmludGVsLmNvbT4KPiBDYzogRGFuaWVsZSBDZXJh b2xvIFNwdXJpbyA8ZGFuaWVsZS5jZXJhb2xvc3B1cmlvQGludGVsLmNvbT4KClJldmlld2VkLWJ5 OiBNaWthIEt1b3BwYWxhIDxtaWthLmt1b3BwYWxhQGxpbnV4LmludGVsLmNvbT4KCj4gLS0tCj4g IGRyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2dlbV9ndHQuYyB8IDMwOCArKysr KysrKysrKysrKysrKysKPiAgMSBmaWxlIGNoYW5nZWQsIDMwOCBpbnNlcnRpb25zKCspCj4KPiBk aWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2d0dC5j IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2d0dC5jCj4gaW5kZXgg NTk4YzE4ZDEwNjQwLi5hYTdiZTkwODllMmQgMTAwNjQ0Cj4gLS0tIGEvZHJpdmVycy9ncHUvZHJt L2k5MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2d0dC5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5 MTUvc2VsZnRlc3RzL2k5MTVfZ2VtX2d0dC5jCj4gQEAgLTI1LDEzICsyNSwxNiBAQAo+ICAjaW5j bHVkZSA8bGludXgvbGlzdF9zb3J0Lmg+Cj4gICNpbmNsdWRlIDxsaW51eC9wcmltZV9udW1iZXJz Lmg+Cj4gIAo+ICsjaW5jbHVkZSAiZ2VtL2k5MTVfZ2VtX2NvbnRleHQuaCIKPiAgI2luY2x1ZGUg ImdlbS9zZWxmdGVzdHMvbW9ja19jb250ZXh0LmgiCj4gKyNpbmNsdWRlICJndC9pbnRlbF9jb250 ZXh0LmgiCj4gIAo+ICAjaW5jbHVkZSAiaTkxNV9yYW5kb20uaCIKPiAgI2luY2x1ZGUgImk5MTVf c2VsZnRlc3QuaCIKPiAgCj4gICNpbmNsdWRlICJtb2NrX2RybS5oIgo+ICAjaW5jbHVkZSAibW9j a19nZW1fZGV2aWNlLmgiCj4gKyNpbmNsdWRlICJpZ3RfZmx1c2hfdGVzdC5oIgo+ICAKPiAgc3Rh dGljIHZvaWQgY2xlYW51cF9mcmVlZF9vYmplY3RzKHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICpp OTE1KQo+ICB7Cj4gQEAgLTE3MDUsNiArMTcwOCwzMTAgQEAgaW50IGk5MTVfZ2VtX2d0dF9tb2Nr X3NlbGZ0ZXN0cyh2b2lkKQo+ICAJcmV0dXJuIGVycjsKPiAgfQo+ICAKPiArc3RhdGljIGludCBj b250ZXh0X3N5bmMoc3RydWN0IGludGVsX2NvbnRleHQgKmNlKQo+ICt7Cj4gKwlzdHJ1Y3QgaTkx NV9yZXF1ZXN0ICpycTsKPiArCWxvbmcgdGltZW91dDsKPiArCj4gKwlycSA9IGludGVsX2NvbnRl eHRfY3JlYXRlX3JlcXVlc3QoY2UpOwo+ICsJaWYgKElTX0VSUihycSkpCj4gKwkJcmV0dXJuIFBU Ul9FUlIocnEpOwo+ICsKPiArCWk5MTVfcmVxdWVzdF9nZXQocnEpOwo+ICsJaTkxNV9yZXF1ZXN0 X2FkZChycSk7Cj4gKwo+ICsJdGltZW91dCA9IGk5MTVfcmVxdWVzdF93YWl0KHJxLCAwLCBIWiAv IDUpOwo+ICsJaTkxNV9yZXF1ZXN0X3B1dChycSk7Cj4gKwo+ICsJcmV0dXJuIHRpbWVvdXQgPCAw ID8gLUVJTyA6IDA7Cj4gK30KPiArCj4gK3N0YXRpYyBzdHJ1Y3QgaTkxNV9yZXF1ZXN0ICoKPiAr c3VibWl0X2JhdGNoKHN0cnVjdCBpbnRlbF9jb250ZXh0ICpjZSwgdTY0IGFkZHIpCj4gK3sKPiAr CXN0cnVjdCBpOTE1X3JlcXVlc3QgKnJxOwo+ICsJaW50IGVycjsKPiArCj4gKwlycSA9IGludGVs X2NvbnRleHRfY3JlYXRlX3JlcXVlc3QoY2UpOwo+ICsJaWYgKElTX0VSUihycSkpCj4gKwkJcmV0 dXJuIHJxOwo+ICsKPiArCWVyciA9IDA7Cj4gKwlpZiAocnEtPmVuZ2luZS0+ZW1pdF9pbml0X2Jy ZWFkY3J1bWIpIC8qIGRldGVjdCBhIGhhbmcgKi8KPiArCQllcnIgPSBycS0+ZW5naW5lLT5lbWl0 X2luaXRfYnJlYWRjcnVtYihycSk7Cj4gKwlpZiAoZXJyID09IDApCj4gKwkJZXJyID0gcnEtPmVu Z2luZS0+ZW1pdF9iYl9zdGFydChycSwgYWRkciwgMCwgMCk7Cj4gKwo+ICsJaWYgKGVyciA9PSAw KQo+ICsJCWk5MTVfcmVxdWVzdF9nZXQocnEpOwo+ICsJaTkxNV9yZXF1ZXN0X2FkZChycSk7Cj4g Kwo+ICsJcmV0dXJuIGVyciA/IEVSUl9QVFIoZXJyKSA6IHJxOwo+ICt9Cj4gKwo+ICtzdGF0aWMg dTMyICpzcGlubmVyKHUzMiAqYmF0Y2gsIGludCBpKQo+ICt7Cj4gKwlyZXR1cm4gYmF0Y2ggKyBp ICogNjQgLyBzaXplb2YoKmJhdGNoKSArIDQ7Cj4gK30KPiArCj4gK3N0YXRpYyB2b2lkIGVuZF9z cGluKHUzMiAqYmF0Y2gsIGludCBpKQo+ICt7Cj4gKwkqc3Bpbm5lcihiYXRjaCwgaSkgPSBNSV9C QVRDSF9CVUZGRVJfRU5EOwo+ICsJd21iKCk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X2Nz X3RsYih2b2lkICphcmcpCj4gK3sKPiArCWNvbnN0IHVuc2lnbmVkIGludCBjb3VudCA9IFBBR0Vf U0laRSAvIDY0Owo+ICsJY29uc3QgdW5zaWduZWQgaW50IGNodW5rX3NpemUgPSBjb3VudCAqIFBB R0VfU0laRTsKPiArCXN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1ID0gYXJnOwo+ICsJc3Ry dWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKmJiZSwgKmFjdCwgKm91dDsKPiArCXN0cnVjdCBpOTE1 X2dlbV9lbmdpbmVzX2l0ZXIgaXQ7Cj4gKwlzdHJ1Y3QgaTkxNV9hZGRyZXNzX3NwYWNlICp2bTsK PiArCXN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHg7Cj4gKwlzdHJ1Y3QgaW50ZWxfY29udGV4 dCAqY2U7Cj4gKwlzdHJ1Y3QgZHJtX2ZpbGUgKmZpbGU7Cj4gKwlzdHJ1Y3QgaTkxNV92bWEgKnZt YTsKPiArCXVuc2lnbmVkIGludCBpOwo+ICsJdTMyICpyZXN1bHQ7Cj4gKwl1MzIgKmJhdGNoOwo+ ICsJaW50IGVyciA9IDA7Cj4gKwo+ICsJLyoKPiArCSAqIE91ciBtaXNzaW9uIGhlcmUgaXMgdG8g Zm9vbCB0aGUgaGFyZHdhcmUgdG8gZXhlY3V0ZSBzb21ldGhpbmcKPiArCSAqIGZyb20gc2NyYXRj aCBhcyBpdCBoYXMgbm90IHNlZW4gdGhlIGJhdGNoIG1vdmUgKGR1ZSB0byBtaXNzaW5nCj4gKwkg KiB0aGUgVExCIGludmFsaWRhdGUpLgo+ICsJICovCj4gKwo+ICsJZmlsZSA9IG1vY2tfZmlsZShp OTE1KTsKPiArCWlmIChJU19FUlIoZmlsZSkpCj4gKwkJcmV0dXJuIFBUUl9FUlIoZmlsZSk7Cj4g Kwo+ICsJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwljdHggPSBsaXZl X2NvbnRleHQoaTkxNSwgZmlsZSk7Cj4gKwlpZiAoSVNfRVJSKGN0eCkpIHsKPiArCQllcnIgPSBQ VFJfRVJSKGN0eCk7Cj4gKwkJZ290byBvdXRfdW5sb2NrOwo+ICsJfQo+ICsKPiArCXZtID0gY3R4 LT52bTsKPiArCWlmICghdm0pCj4gKwkJZ290byBvdXRfdW5sb2NrOwo+ICsKPiArCS8qIENyZWF0 ZSB0d28gcGFnZXM7IGR1bW15IHdlIHByZWZpbGwgdGhlIFRMQiwgYW5kIGludGVuZGVkICovCj4g KwliYmUgPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKGk5MTUsIFBBR0VfU0laRSk7 Cj4gKwlpZiAoSVNfRVJSKGJiZSkpIHsKPiArCQllcnIgPSBQVFJfRVJSKGJiZSk7Cj4gKwkJZ290 byBvdXRfdW5sb2NrOwo+ICsJfQo+ICsKPiArCWJhdGNoID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9t YXAoYmJlLCBJOTE1X01BUF9XQyk7Cj4gKwlpZiAoSVNfRVJSKGJhdGNoKSkgewo+ICsJCWVyciA9 IFBUUl9FUlIoYmF0Y2gpOwo+ICsJCWdvdG8gb3V0X2JiZTsKPiArCX0KPiArCW1lbXNldDMyKGJh dGNoLCBNSV9CQVRDSF9CVUZGRVJfRU5ELCBQQUdFX1NJWkUgLyBzaXplb2YodTMyKSk7Cj4gKwlp OTE1X2dlbV9vYmplY3RfZmx1c2hfbWFwKGJiZSk7Cj4gKwlpOTE1X2dlbV9vYmplY3RfdW5waW5f bWFwKGJiZSk7Cj4gKwo+ICsJYWN0ID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9pbnRlcm5hbChp OTE1LCBQQUdFX1NJWkUpOwo+ICsJaWYgKElTX0VSUihhY3QpKSB7Cj4gKwkJZXJyID0gUFRSX0VS UihhY3QpOwo+ICsJCWdvdG8gb3V0X2JiZTsKPiArCX0KPiArCj4gKwkvKiBUcmFjayB0aGUgZXhl Y3V0aW9uIG9mIGVhY2ggcmVxdWVzdCBieSB3cml0aW5nIGludG8gZGlmZmVyZW50IHNsb3QgKi8K PiArCWJhdGNoID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoYWN0LCBJOTE1X01BUF9XQyk7Cj4g KwlpZiAoSVNfRVJSKGJhdGNoKSkgewo+ICsJCWVyciA9IFBUUl9FUlIoYmF0Y2gpOwo+ICsJCWdv dG8gb3V0X2FjdDsKPiArCX0KPiArCWZvciAoaSA9IDA7IGkgPCBjb3VudDsgaSsrKSB7Cj4gKwkJ dTMyICpjcyA9IGJhdGNoICsgaSAqIDY0IC8gc2l6ZW9mKCpjcyk7Cj4gKwkJdTY0IGFkZHIgPSAo dm0tPnRvdGFsIC0gUEFHRV9TSVpFKSArIGkgKiBzaXplb2YodTMyKTsKPiArCj4gKwkJR0VNX0JV R19PTihJTlRFTF9HRU4oaTkxNSkgPCA2KTsKPiArCQljc1swXSA9IE1JX1NUT1JFX0RXT1JEX0lN TV9HRU40Owo+ICsJCWlmIChJTlRFTF9HRU4oaTkxNSkgPj0gOCkgewo+ICsJCQljc1sxXSA9IGxv d2VyXzMyX2JpdHMoYWRkcik7Cj4gKwkJCWNzWzJdID0gdXBwZXJfMzJfYml0cyhhZGRyKTsKPiAr CQkJY3NbM10gPSBpOwo+ICsJCQljc1s0XSA9IE1JX05PT1A7Cj4gKwkJCWNzWzVdID0gTUlfQkFU Q0hfQlVGRkVSX1NUQVJUX0dFTjg7Cj4gKwkJfSBlbHNlIHsKPiArCQkJY3NbMV0gPSAwOwo+ICsJ CQljc1syXSA9IGxvd2VyXzMyX2JpdHMoYWRkcik7Cj4gKwkJCWNzWzNdID0gaTsKPiArCQkJY3Nb NF0gPSBNSV9OT09QOwo+ICsJCQljc1s1XSA9IE1JX0JBVENIX0JVRkZFUl9TVEFSVDsKPiArCQl9 Cj4gKwl9Cj4gKwo+ICsJb3V0ID0gaTkxNV9nZW1fb2JqZWN0X2NyZWF0ZV9pbnRlcm5hbChpOTE1 LCBQQUdFX1NJWkUpOwo+ICsJaWYgKElTX0VSUihvdXQpKSB7Cj4gKwkJZXJyID0gUFRSX0VSUihv dXQpOwo+ICsJCWdvdG8gb3V0X2JhdGNoOwo+ICsJfQo+ICsJaTkxNV9nZW1fb2JqZWN0X3NldF9j YWNoZV9jb2hlcmVuY3kob3V0LCBJOTE1X0NBQ0hJTkdfQ0FDSEVEKTsKPiArCj4gKwl2bWEgPSBp OTE1X3ZtYV9pbnN0YW5jZShvdXQsIHZtLCBOVUxMKTsKPiArCWlmIChJU19FUlIodm1hKSkgewo+ ICsJCWVyciA9IFBUUl9FUlIodm1hKTsKPiArCQlnb3RvIG91dF9iYXRjaDsKPiArCX0KPiArCj4g KwllcnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLAo+ICsJCQkgICBQSU5fVVNFUiB8Cj4gKwkJ CSAgIFBJTl9PRkZTRVRfRklYRUQgfAo+ICsJCQkgICAodm0tPnRvdGFsIC0gUEFHRV9TSVpFKSk7 Cj4gKwlpZiAoZXJyKQo+ICsJCWdvdG8gb3V0X291dDsKPiArCUdFTV9CVUdfT04odm1hLT5ub2Rl LnN0YXJ0ICE9IHZtLT50b3RhbCAtIFBBR0VfU0laRSk7Cj4gKwo+ICsJcmVzdWx0ID0gaTkxNV9n ZW1fb2JqZWN0X3Bpbl9tYXAob3V0LCBJOTE1X01BUF9XQik7Cj4gKwlpZiAoSVNfRVJSKHJlc3Vs dCkpIHsKPiArCQllcnIgPSBQVFJfRVJSKHJlc3VsdCk7Cj4gKwkJZ290byBvdXRfb3V0Owo+ICsJ fQo+ICsKPiArCWZvcl9lYWNoX2dlbV9lbmdpbmUoY2UsIGk5MTVfZ2VtX2NvbnRleHRfbG9ja19l bmdpbmVzKGN0eCksIGl0KSB7Cj4gKwkJSUdUX1RJTUVPVVQoZW5kX3RpbWUpOwo+ICsJCXVuc2ln bmVkIGxvbmcgcGFzcyA9IDA7Cj4gKwo+ICsJCWlmICghaW50ZWxfZW5naW5lX2Nhbl9zdG9yZV9k d29yZChjZS0+ZW5naW5lKSkKPiArCQkJY29udGludWU7Cj4gKwo+ICsJCXdoaWxlICghX19pZ3Rf dGltZW91dChlbmRfdGltZSwgTlVMTCkpIHsKPiArCQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7 Cj4gKwkJCXU2NCBvZmZzZXQ7Cj4gKwo+ICsJCQlvZmZzZXQgPSByYW5kb21fb2Zmc2V0KDAsIHZt LT50b3RhbCAtIFBBR0VfU0laRSwKPiArCQkJCQkgICAgICAgY2h1bmtfc2l6ZSwgUEFHRV9TSVpF KTsKPiArCj4gKwkJCWVyciA9IHZtLT5hbGxvY2F0ZV92YV9yYW5nZSh2bSwgb2Zmc2V0LCBjaHVu a19zaXplKTsKPiArCQkJaWYgKGVycikKPiArCQkJCWdvdG8gZW5kOwo+ICsKPiArCQkJbWVtc2V0 MzIocmVzdWx0LCBTVEFDS19NQUdJQywgUEFHRV9TSVpFIC8gc2l6ZW9mKHUzMikpOwo+ICsKPiAr CQkJdm1hID0gaTkxNV92bWFfaW5zdGFuY2UoYmJlLCB2bSwgTlVMTCk7Cj4gKwkJCWlmIChJU19F UlIodm1hKSkgewo+ICsJCQkJZXJyID0gUFRSX0VSUih2bWEpOwo+ICsJCQkJZ290byBlbmQ7Cj4g KwkJCX0KPiArCj4gKwkJCWVyciA9IHZtYS0+b3BzLT5zZXRfcGFnZXModm1hKTsKPiArCQkJaWYg KGVycikKPiArCQkJCWdvdG8gZW5kOwo+ICsKPiArCQkJLyogUHJpbWUgdGhlIFRMQiB3aXRoIHRo ZSBkdW1teSBwYWdlcyAqLwo+ICsJCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7IGkrKykgewo+ICsJ CQkJdm1hLT5ub2RlLnN0YXJ0ID0gb2Zmc2V0ICsgaSAqIFBBR0VfU0laRTsKPiArCQkJCXZtLT5p bnNlcnRfZW50cmllcyh2bSwgdm1hLCBJOTE1X0NBQ0hFX05PTkUsIDApOwo+ICsKPiArCQkJCXJx ID0gc3VibWl0X2JhdGNoKGNlLCB2bWEtPm5vZGUuc3RhcnQpOwo+ICsJCQkJaWYgKElTX0VSUihy cSkpIHsKPiArCQkJCQllcnIgPSBQVFJfRVJSKHJxKTsKPiArCQkJCQlnb3RvIGVuZDsKPiArCQkJ CX0KPiArCQkJCWk5MTVfcmVxdWVzdF9wdXQocnEpOwo+ICsJCQl9Cj4gKwo+ICsJCQl2bWEtPm9w cy0+Y2xlYXJfcGFnZXModm1hKTsKPiArCj4gKwkJCWVyciA9IGNvbnRleHRfc3luYyhjZSk7Cj4g KwkJCWlmIChlcnIpIHsKPiArCQkJCXByX2VycigiJXM6IGR1bW15IHNldHVwIHRpbWVkIG91dFxu IiwKPiArCQkJCSAgICAgICBjZS0+ZW5naW5lLT5uYW1lKTsKPiArCQkJCWdvdG8gZW5kOwo+ICsJ CQl9Cj4gKwo+ICsJCQl2bWEgPSBpOTE1X3ZtYV9pbnN0YW5jZShhY3QsIHZtLCBOVUxMKTsKPiAr CQkJaWYgKElTX0VSUih2bWEpKSB7Cj4gKwkJCQllcnIgPSBQVFJfRVJSKHZtYSk7Cj4gKwkJCQln b3RvIGVuZDsKPiArCQkJfQo+ICsKPiArCQkJZXJyID0gdm1hLT5vcHMtPnNldF9wYWdlcyh2bWEp Owo+ICsJCQlpZiAoZXJyKQo+ICsJCQkJZ290byBlbmQ7Cj4gKwo+ICsJCQkvKiBSZXBsYWNlIHRo ZSBUTEIgd2l0aCB0YXJnZXQgYmF0Y2hlcyAqLwo+ICsJCQlmb3IgKGkgPSAwOyBpIDwgY291bnQ7 IGkrKykgewo+ICsJCQkJc3RydWN0IGk5MTVfcmVxdWVzdCAqcnE7Cj4gKwkJCQl1MzIgKmNzID0g YmF0Y2ggKyBpICogNjQgLyBzaXplb2YoKmNzKTsKPiArCQkJCXU2NCBhZGRyOwo+ICsKPiArCQkJ CXZtYS0+bm9kZS5zdGFydCA9IG9mZnNldCArIGkgKiBQQUdFX1NJWkU7Cj4gKwkJCQl2bS0+aW5z ZXJ0X2VudHJpZXModm0sIHZtYSwgSTkxNV9DQUNIRV9OT05FLCAwKTsKPiArCj4gKwkJCQlhZGRy ID0gdm1hLT5ub2RlLnN0YXJ0ICsgaSAqIDY0Owo+ICsJCQkJY3NbNF0gPSBNSV9OT09QOwo+ICsJ CQkJY3NbNl0gPSBsb3dlcl8zMl9iaXRzKGFkZHIpOwo+ICsJCQkJY3NbN10gPSB1cHBlcl8zMl9i aXRzKGFkZHIpOwo+ICsJCQkJd21iKCk7Cj4gKwo+ICsJCQkJcnEgPSBzdWJtaXRfYmF0Y2goY2Us IGFkZHIpOwo+ICsJCQkJaWYgKElTX0VSUihycSkpIHsKPiArCQkJCQllcnIgPSBQVFJfRVJSKHJx KTsKPiArCQkJCQlnb3RvIGVuZDsKPiArCQkJCX0KPiArCj4gKwkJCQkvKiBXYWl0IHVudGlsIHRo ZSBjb250ZXh0IGNoYWluIGhhcyBzdGFydGVkICovCj4gKwkJCQlpZiAoaSA9PSAwKSB7Cj4gKwkJ CQkJd2hpbGUgKFJFQURfT05DRShyZXN1bHRbaV0pICYmCj4gKwkJCQkJICAgICAgICFpOTE1X3Jl cXVlc3RfY29tcGxldGVkKHJxKSkKPiArCQkJCQkJY29uZF9yZXNjaGVkKCk7Cj4gKwkJCQl9IGVs c2Ugewo+ICsJCQkJCWVuZF9zcGluKGJhdGNoLCBpIC0gMSk7Cj4gKwkJCQl9Cj4gKwo+ICsJCQkJ aTkxNV9yZXF1ZXN0X3B1dChycSk7Cj4gKwkJCX0KPiArCQkJZW5kX3NwaW4oYmF0Y2gsIGNvdW50 IC0gMSk7Cj4gKwo+ICsJCQl2bWEtPm9wcy0+Y2xlYXJfcGFnZXModm1hKTsKPiArCj4gKwkJCWVy ciA9IGNvbnRleHRfc3luYyhjZSk7Cj4gKwkJCWlmIChlcnIpIHsKPiArCQkJCXByX2VycigiJXM6 IHdyaXRlcyB0aW1lZCBvdXRcbiIsCj4gKwkJCQkgICAgICAgY2UtPmVuZ2luZS0+bmFtZSk7Cj4g KwkJCQlnb3RvIGVuZDsKPiArCQkJfQo+ICsKPiArCQkJZm9yIChpID0gMDsgaSA8IGNvdW50OyBp KyspIHsKPiArCQkJCWlmIChyZXN1bHRbaV0gIT0gaSkgewo+ICsJCQkJCXByX2VycigiJXM6IFdy aXRlIGxvc3Qgb24gcGFzcyAlbHUsIGF0IG9mZnNldCAlbGx4LCBpbmRleCAlZCwgZm91bmQgJXgs IGV4cGVjdGVkICV4XG4iLAo+ICsJCQkJCSAgICAgICBjZS0+ZW5naW5lLT5uYW1lLCBwYXNzLAo+ ICsJCQkJCSAgICAgICBvZmZzZXQsIGksIHJlc3VsdFtpXSwgaSk7Cj4gKwkJCQkJZXJyID0gLUVJ TlZBTDsKPiArCQkJCQlnb3RvIGVuZDsKPiArCQkJCX0KPiArCQkJfQo+ICsKPiArCQkJdm0tPmNs ZWFyX3JhbmdlKHZtLCBvZmZzZXQsIGNodW5rX3NpemUpOwo+ICsJCQlwYXNzKys7Cj4gKwkJfQo+ ICsJfQo+ICtlbmQ6Cj4gKwlpZiAoaWd0X2ZsdXNoX3Rlc3QoaTkxNSwgSTkxNV9XQUlUX0xPQ0tF RCkpCj4gKwkJZXJyID0gLUVJTzsKPiArCWk5MTVfZ2VtX2NvbnRleHRfdW5sb2NrX2VuZ2luZXMo Y3R4KTsKPiArCWk5MTVfZ2VtX29iamVjdF91bnBpbl9tYXAob3V0KTsKPiArb3V0X291dDoKPiAr CWk5MTVfZ2VtX29iamVjdF9wdXQob3V0KTsKPiArb3V0X2JhdGNoOgo+ICsJaTkxNV9nZW1fb2Jq ZWN0X3VucGluX21hcChhY3QpOwo+ICtvdXRfYWN0Ogo+ICsJaTkxNV9nZW1fb2JqZWN0X3B1dChh Y3QpOwo+ICtvdXRfYmJlOgo+ICsJaTkxNV9nZW1fb2JqZWN0X3B1dChiYmUpOwo+ICtvdXRfdW5s b2NrOgo+ICsJbXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCW1vY2tf ZmlsZV9mcmVlKGk5MTUsIGZpbGUpOwo+ICsJcmV0dXJuIGVycjsKPiArfQo+ICsKPiAgaW50IGk5 MTVfZ2VtX2d0dF9saXZlX3NlbGZ0ZXN0cyhzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkK PiAgewo+ICAJc3RhdGljIGNvbnN0IHN0cnVjdCBpOTE1X3N1YnRlc3QgdGVzdHNbXSA9IHsKPiBA QCAtMTcyMiw2ICsyMDI5LDcgQEAgaW50IGk5MTVfZ2VtX2d0dF9saXZlX3NlbGZ0ZXN0cyhzdHJ1 Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSkKPiAgCQlTVUJURVNUKGlndF9nZ3R0X3BvdCksCj4g IAkJU1VCVEVTVChpZ3RfZ2d0dF9maWxsKSwKPiAgCQlTVUJURVNUKGlndF9nZ3R0X3BhZ2UpLAo+ ICsJCVNVQlRFU1QoaWd0X2NzX3RsYiksCj4gIAl9Owo+ICAKPiAgCUdFTV9CVUdfT04ob2Zmc2V0 X2luX3BhZ2UoaTkxNS0+Z2d0dC52bS50b3RhbCkpOwo+IC0tIAo+IDIuMjMuMApfX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGluZyBs aXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZng=