From mboxrd@z Thu Jan 1 00:00:00 1970 From: Mika Kuoppala Subject: Re: [PATCH v2 38/38] drm/i915: Add initial selftests for hang detection and resets Date: Wed, 01 Feb 2017 13:43:41 +0200 Message-ID: <87o9ym87bm.fsf@gaia.fi.intel.com> References: <20170119114158.17941-1-chris@chris-wilson.co.uk> <20170119114158.17941-39-chris@chris-wilson.co.uk> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga01.intel.com (mga01.intel.com [192.55.52.88]) by gabe.freedesktop.org (Postfix) with ESMTPS id 7181C6E79D for ; Wed, 1 Feb 2017 11:45:02 +0000 (UTC) In-Reply-To: <20170119114158.17941-39-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 dGhhdCB3ZSBjYW4gcmVzZXQgdGhlIEdQVSBhbmQgY29udGludWUgZXhlY3V0aW5nIGZyb20gdGhl IG5leHQKPiByZXF1ZXN0Lgo+Cj4gU2lnbmVkLW9mZi1ieTogQ2hyaXMgV2lsc29uIDxjaHJpc0Bj aHJpcy13aWxzb24uY28udWs+Cj4gLS0tCj4gIGRyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVsX2hh bmdjaGVjay5jICAgICAgICAgICAgIHwgICA0ICsKPiAgLi4uL2dwdS9kcm0vaTkxNS9zZWxmdGVz dHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oICAgfCAgIDEgKwo+ICBkcml2ZXJzL2dwdS9kcm0vaTkx NS9zZWxmdGVzdHMvaW50ZWxfaGFuZ2NoZWNrLmMgICB8IDQ2MyArKysrKysrKysrKysrKysrKysr KysKPiAgMyBmaWxlcyBjaGFuZ2VkLCA0NjggaW5zZXJ0aW9ucygrKQo+ICBjcmVhdGUgbW9kZSAx MDA2NDQgZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2hhbmdjaGVjay5jCj4K PiBkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGFuZ2NoZWNrLmMgYi9k cml2ZXJzL2dwdS9kcm0vaTkxNS9pbnRlbF9oYW5nY2hlY2suYwo+IGluZGV4IGYwNTk3MWY1NTg2 Zi4uZGNlNzQyMjQzYmE2IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L2ludGVs X2hhbmdjaGVjay5jCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvaW50ZWxfaGFuZ2NoZWNr LmMKPiBAQCAtNDgwLDMgKzQ4MCw3IEBAIHZvaWQgaW50ZWxfaGFuZ2NoZWNrX2luaXQoc3RydWN0 IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUpCj4gIAlJTklUX0RFTEFZRURfV09SSygmaTkxNS0+Z3B1 X2Vycm9yLmhhbmdjaGVja193b3JrLAo+ICAJCQkgIGk5MTVfaGFuZ2NoZWNrX2VsYXBzZWQpOwo+ ICB9Cj4gKwo+ICsjaWYgSVNfRU5BQkxFRChDT05GSUdfRFJNX0k5MTVfU0VMRlRFU1QpCj4gKyNp bmNsdWRlICJzZWxmdGVzdHMvaW50ZWxfaGFuZ2NoZWNrLmMiCj4gKyNlbmRpZgo+IGRpZmYgLS1n aXQgYS9kcml2ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5o IGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2k5MTVfbGl2ZV9zZWxmdGVzdHMuaAo+ IGluZGV4IDBjOTI1ZjE3YjQ0NS4uZTY2OTljNTlmMjQ0IDEwMDY0NAo+IC0tLSBhL2RyaXZlcnMv Z3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pOTE1X2xpdmVfc2VsZnRlc3RzLmgKPiArKysgYi9kcml2 ZXJzL2dwdS9kcm0vaTkxNS9zZWxmdGVzdHMvaTkxNV9saXZlX3NlbGZ0ZXN0cy5oCj4gQEAgLTE1 LDMgKzE1LDQgQEAgc2VsZnRlc3Qob2JqZWN0LCBpOTE1X2dlbV9vYmplY3RfbGl2ZV9zZWxmdGVz dHMpCj4gIHNlbGZ0ZXN0KGNvaGVyZW5jeSwgaTkxNV9nZW1fY29oZXJlbmN5X2xpdmVfc2VsZnRl c3RzKQo+ICBzZWxmdGVzdChndHQsIGk5MTVfZ2VtX2d0dF9saXZlX3NlbGZ0ZXN0cykKPiAgc2Vs ZnRlc3QoY29udGV4dCwgaTkxNV9nZW1fY29udGV4dF9saXZlX3NlbGZ0ZXN0cykKPiArc2VsZnRl c3QoaGFuZ2NoZWNrLCBpbnRlbF9oYW5nY2hlY2tfbGl2ZV9zZWxmdGVzdHMpCj4gZGlmZiAtLWdp dCBhL2RyaXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9oYW5nY2hlY2suYyBiL2Ry aXZlcnMvZ3B1L2RybS9pOTE1L3NlbGZ0ZXN0cy9pbnRlbF9oYW5nY2hlY2suYwo+IG5ldyBmaWxl IG1vZGUgMTAwNjQ0Cj4gaW5kZXggMDAwMDAwMDAwMDAwLi5kMzA2ODkwYmE3ZWIKPiAtLS0gL2Rl di9udWxsCj4gKysrIGIvZHJpdmVycy9ncHUvZHJtL2k5MTUvc2VsZnRlc3RzL2ludGVsX2hhbmdj aGVjay5jCj4gQEAgLTAsMCArMSw0NjMgQEAKPiArLyoKPiArICogQ29weXJpZ2h0IMKpIDIwMTYg SW50ZWwgQ29ycG9yYXRpb24KPiArICoKPiArICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRl ZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5nIGEKPiArICogY29weSBv ZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAi U29mdHdhcmUiKSwKPiArICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmlj dGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgo+ICsgKiB0aGUgcmlnaHRzIHRvIHVz ZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwK PiArICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBw ZXJzb25zIHRvIHdob20gdGhlCj4gKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywg c3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6Cj4gKyAqCj4gKyAqIFRoZSBhYm92 ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcg dGhlIG5leHQKPiArICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVz IG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQo+ICsgKiBTb2Z0d2FyZS4KPiArICoKPiAr ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKPiArICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCj4gKyAqIEZJVE5FU1Mg Rk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVO VCBTSEFMTAo+ICsgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUg Rk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgo+ICsgKiBMSUFCSUxJVFksIFdIRVRIRVIg SU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwo+ICsg KiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUg VVNFIE9SIE9USEVSIERFQUxJTkdTCj4gKyAqIElOIFRIRSBTT0ZUV0FSRS4KPiArICoKPiArICov Cj4gKwo+ICsjaW5jbHVkZSAiaTkxNV9zZWxmdGVzdC5oIgo+ICsKPiArc3RydWN0IGhhbmcgewo+ ICsJc3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTU7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2Vt X29iamVjdCAqaHdzOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9vYmplY3QgKm9iajsKPiArCXUz MiAqc2Vxbm87Cj4gKwl1MzIgKmJhdGNoOwo+ICt9Owo+ICsKPiArc3RhdGljIGludCBoYW5nX2lu aXQoc3RydWN0IGhhbmcgKmgsIHN0cnVjdCBkcm1faTkxNV9wcml2YXRlICppOTE1KQo+ICt7Cj4g Kwl2b2lkICp2YWRkcjsKPiArCj4gKwltZW1zZXQoaCwgMCwgc2l6ZW9mKCpoKSk7Cj4gKwloLT5p OTE1ID0gaTkxNTsKPiArCj4gKwloLT5od3MgPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRlX2ludGVy bmFsKGk5MTUsIFBBR0VfU0laRSk7Cj4gKwlpZiAoSVNfRVJSKGgtPmh3cykpCj4gKwkJcmV0dXJu IFBUUl9FUlIoaC0+aHdzKTsKPiArCj4gKwloLT5vYmogPSBpOTE1X2dlbV9vYmplY3RfY3JlYXRl X2ludGVybmFsKGk5MTUsIFBBR0VfU0laRSk7Cj4gKwlpZiAoSVNfRVJSKGgtPm9iaikpIHsKPiAr CQlpOTE1X2dlbV9vYmplY3RfcHV0KGgtPm9iaik7CgppOTE1X2dlbV9vYmplY3RfcHV0KGgtPmh3 cyk7Cgo+ICsJCXJldHVybiBQVFJfRVJSKGgtPm9iaik7Cj4gKwl9Cj4gKwo+ICsJaTkxNV9nZW1f b2JqZWN0X3NldF9jYWNoZV9sZXZlbChoLT5od3MsIEk5MTVfQ0FDSEVfTExDKTsKPiArCXZhZGRy ID0gaTkxNV9nZW1fb2JqZWN0X3Bpbl9tYXAoaC0+aHdzLCBJOTE1X01BUF9XQik7Cj4gKwlpZiAo SVNfRVJSKHZhZGRyKSkgewo+ICsJCWk5MTVfZ2VtX29iamVjdF9wdXQoaC0+aHdzKTsKPiArCQlp OTE1X2dlbV9vYmplY3RfcHV0KGgtPm9iaik7Cj4gKwkJcmV0dXJuIFBUUl9FUlIodmFkZHIpOwo+ ICsJfQo+ICsJaC0+c2Vxbm8gPSBtZW1zZXQodmFkZHIsIDB4ZmYsIFBBR0VfU0laRSk7Cj4gKwo+ ICsJdmFkZHIgPSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChoLT5vYmosCj4gKwkJCQkJSEFTX0xM QyhpOTE1KSA/IEk5MTVfTUFQX1dCIDogSTkxNV9NQVBfV0MpOwo+ICsJaWYgKElTX0VSUih2YWRk cikpIHsKPiArCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKGgtPmh3cyk7Cj4gKwkJaTkxNV9n ZW1fb2JqZWN0X3B1dChoLT5od3MpOwo+ICsJCWk5MTVfZ2VtX29iamVjdF9wdXQoaC0+b2JqKTsK PiArCQlyZXR1cm4gUFRSX0VSUih2YWRkcik7Cj4gKwl9Cj4gKwloLT5iYXRjaCA9IHZhZGRyOwo+ ICsKPiArCXJldHVybiAwOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdTY0IGh3c19hZGRyZXNzKGNvbnN0 IHN0cnVjdCBpOTE1X3ZtYSAqaHdzLAo+ICsJCSAgICAgICBjb25zdCBzdHJ1Y3QgZHJtX2k5MTVf Z2VtX3JlcXVlc3QgKnJxKQo+ICt7Cj4gKwlyZXR1cm4gaHdzLT5ub2RlLnN0YXJ0ICsgb2Zmc2V0 X2luX3BhZ2Uoc2l6ZW9mKHUzMikqcnEtPmZlbmNlLmNvbnRleHQpOwoKZmVuY2UuY29udGV4dCBp cyBzb21ldGhpbmcgdW5pcXVlIHJldHVybmVkIGJ5IGRtYV9mZW5jZV9jb250ZXh0X2FsbG9jKCkK YW5kIHdlIGFzc3VtZSB3ZSBkb24ndCBjb2xsaWRlIGluIHRoZSBzY29wZSBvZiB0aGlzIHRlc3Q/ Cgo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGVtaXRfcmVjdXJzZV9iYXRjaChzdHJ1Y3QgaGFuZyAq aCwKPiArCQkJICAgICAgc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0ICpycSkKPiArewo+ICsJ c3RydWN0IGRybV9pOTE1X3ByaXZhdGUgKmk5MTUgPSBoLT5pOTE1Owo+ICsJc3RydWN0IGk5MTVf YWRkcmVzc19zcGFjZSAqdm0gPSBycS0+Y3R4LT5wcGd0dCA/ICZycS0+Y3R4LT5wcGd0dC0+YmFz ZSA6ICZpOTE1LT5nZ3R0LmJhc2U7Cj4gKwlzdHJ1Y3QgaTkxNV92bWEgKmh3cywgKnZtYTsKPiAr CXUzMiAqYmF0Y2g7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCXZtYSA9IGk5MTVfdm1hX2luc3RhbmNl KGgtPm9iaiwgdm0sIE5VTEwpOwo+ICsJaWYgKElTX0VSUih2bWEpKQo+ICsJCXJldHVybiBQVFJf RVJSKHZtYSk7Cj4gKwo+ICsJaHdzID0gaTkxNV92bWFfaW5zdGFuY2UoaC0+aHdzLCB2bSwgTlVM TCk7Cj4gKwlpZiAoSVNfRVJSKGh3cykpCj4gKwkJcmV0dXJuIFBUUl9FUlIoaHdzKTsKPiArCj4g KwllcnIgPSBpOTE1X3ZtYV9waW4odm1hLCAwLCAwLCBQSU5fVVNFUik7Cj4gKwlpZiAoZXJyKQo+ ICsJCXJldHVybiBlcnI7Cj4gKwo+ICsJZXJyID0gaTkxNV92bWFfcGluKGh3cywgMCwgMCwgUElO X1VTRVIpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIHVucGluX3ZtYTsKPiArCj4gKwlpOTE1X3Zt YV9tb3ZlX3RvX2FjdGl2ZSh2bWEsIHJxLCAwKTsKPiArCWk5MTVfdm1hX21vdmVfdG9fYWN0aXZl KGh3cywgcnEsIDApOwo+ICsKPiArCWJhdGNoID0gaC0+YmF0Y2g7Cj4gKwlpZiAoSU5URUxfR0VO KGk5MTUpID49IDgpIHsKPiArCQkqYmF0Y2grKyA9IE1JX1NUT1JFX0RXT1JEX0lNTV9HRU40Owo+ ICsJCSpiYXRjaCsrID0gbG93ZXJfMzJfYml0cyhod3NfYWRkcmVzcyhod3MsIHJxKSk7Cj4gKwkJ KmJhdGNoKysgPSB1cHBlcl8zMl9iaXRzKGh3c19hZGRyZXNzKGh3cywgcnEpKTsKPiArCQkqYmF0 Y2grKyA9IHJxLT5mZW5jZS5zZXFubzsKPiArCQkqYmF0Y2grKyA9IE1JX0JBVENIX0JVRkZFUl9T VEFSVCB8IDEgPDwgOCB8IDE7Cj4gKwkJKmJhdGNoKysgPSBsb3dlcl8zMl9iaXRzKHZtYS0+bm9k ZS5zdGFydCk7Cj4gKwkJKmJhdGNoKysgPSB1cHBlcl8zMl9iaXRzKHZtYS0+bm9kZS5zdGFydCk7 Cj4gKwl9IGVsc2UgaWYgKElOVEVMX0dFTihpOTE1KSA+PSA2KSB7Cj4gKwkJKmJhdGNoKysgPSBN SV9TVE9SRV9EV09SRF9JTU1fR0VONDsKPiArCQkqYmF0Y2grKyA9IDA7Cj4gKwkJKmJhdGNoKysg PSBsb3dlcl8zMl9iaXRzKGh3c19hZGRyZXNzKGh3cywgcnEpKTsKPiArCQkqYmF0Y2grKyA9IHJx LT5mZW5jZS5zZXFubzsKPiArCQkqYmF0Y2grKyA9IE1JX0JBVENIX0JVRkZFUl9TVEFSVCB8IDEg PDwgODsKPiArCQkqYmF0Y2grKyA9IGxvd2VyXzMyX2JpdHModm1hLT5ub2RlLnN0YXJ0KTsKPiAr CX0gZWxzZSBpZiAoSU5URUxfR0VOKGk5MTUpID49IDQpIHsKPiArCQkqYmF0Y2grKyA9IE1JX1NU T1JFX0RXT1JEX0lNTV9HRU40Owo+ICsJCSpiYXRjaCsrID0gMDsKPiArCQkqYmF0Y2grKyA9IGxv d2VyXzMyX2JpdHMoaHdzX2FkZHJlc3MoaHdzLCBycSkpOwo+ICsJCSpiYXRjaCsrID0gcnEtPmZl bmNlLnNlcW5vOwo+ICsJCSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMiA8PCA2 Owo+ICsJCSpiYXRjaCsrID0gbG93ZXJfMzJfYml0cyh2bWEtPm5vZGUuc3RhcnQpOwo+ICsJfSBl bHNlIHsKPiArCQkqYmF0Y2grKyA9IE1JX1NUT1JFX0RXT1JEX0lNTTsKPiArCQkqYmF0Y2grKyA9 IGxvd2VyXzMyX2JpdHMoaHdzX2FkZHJlc3MoaHdzLCBycSkpOwo+ICsJCSpiYXRjaCsrID0gcnEt PmZlbmNlLnNlcW5vOwo+ICsJCSpiYXRjaCsrID0gTUlfQkFUQ0hfQlVGRkVSX1NUQVJUIHwgMiA8 PCA2IHwgMTsKPiArCQkqYmF0Y2grKyA9IGxvd2VyXzMyX2JpdHModm1hLT5ub2RlLnN0YXJ0KTsK PiArCX0KPiArCj4gKwllcnIgPSBycS0+ZW5naW5lLT5lbWl0X2JiX3N0YXJ0KHJxLCB2bWEtPm5v ZGUuc3RhcnQsIFBBR0VfU0laRSwgMCk7Cj4gKwo+ICsJaTkxNV92bWFfdW5waW4oaHdzKTsKPiAr dW5waW5fdm1hOgo+ICsJaTkxNV92bWFfdW5waW4odm1hKTsKPiArCXJldHVybiBlcnI7Cj4gK30K PiArCj4gK3N0YXRpYyBzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKgo+ICtoYW5nX2NyZWF0 ZV9yZXF1ZXN0KHN0cnVjdCBoYW5nICpoLAo+ICsJCSAgICBzdHJ1Y3QgaW50ZWxfZW5naW5lX2Nz ICplbmdpbmUsCj4gKwkJICAgIHN0cnVjdCBpOTE1X2dlbV9jb250ZXh0ICpjdHgpCj4gK3sKPiAr CXN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnE7Cj4gKwlpbnQgZXJyOwo+ICsKPiArCWlm IChpOTE1X2dlbV9vYmplY3RfaXNfYWN0aXZlKGgtPm9iaikpIHsKPiArCQlzdHJ1Y3QgZHJtX2k5 MTVfZ2VtX29iamVjdCAqb2JqOwo+ICsJCXZvaWQgKnZhZGRyOwo+ICsKPiArCQlvYmogPSBpOTE1 X2dlbV9vYmplY3RfY3JlYXRlX2ludGVybmFsKGgtPmk5MTUsIFBBR0VfU0laRSk7Cj4gKwkJaWYg KElTX0VSUihvYmopKQo+ICsJCQlyZXR1cm4gRVJSX0NBU1Qob2JqKTsKPiArCj4gKwkJdmFkZHIg PSBpOTE1X2dlbV9vYmplY3RfcGluX21hcChvYmosCj4gKwkJCQkJCUhBU19MTEMoaC0+aTkxNSkg PyBJOTE1X01BUF9XQiA6IEk5MTVfTUFQX1dDKTsKPiArCQlpZiAoSVNfRVJSKHZhZGRyKSkgewo+ ICsJCQlpOTE1X2dlbV9vYmplY3RfcHV0KG9iaik7Cj4gKwkJCXJldHVybiBFUlJfQ0FTVCh2YWRk cik7Cj4gKwkJfQo+ICsKPiArCQlpOTE1X2dlbV9vYmplY3RfdW5waW5fbWFwKGgtPm9iaik7Cj4g KwkJX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV91bmxlc3NfYWN0aXZlKGgtPm9iaik7Cj4gKwo+ ICsJCWgtPm9iaiA9IG9iajsKPiArCQloLT5iYXRjaCA9IHZhZGRyOwoKVGhpcyB3aG9sZSBibG9j ayBjb25mdXNlcyBtZS4gSXMgaXQgYWJvdXQgdGhlIHJlc2V0IHF1ZXVlIHRlc3QKaWYgc29tZXRo aW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgcHJldmlvdXMgcmVxdWVzdD8KCj4gKwl9Cj4gKwo+ICsJ cnEgPSBpOTE1X2dlbV9yZXF1ZXN0X2FsbG9jKGVuZ2luZSwgY3R4KTsKPiArCWlmIChJU19FUlIo cnEpKQo+ICsJCXJldHVybiBycTsKPiArCj4gKwllcnIgPSBlbWl0X3JlY3Vyc2VfYmF0Y2goaCwg cnEpOwo+ICsJaWYgKGVycikgewo+ICsJCV9faTkxNV9hZGRfcmVxdWVzdChycSwgZmFsc2UpOwo+ ICsJCXJldHVybiBFUlJfUFRSKGVycik7Cj4gKwl9Cj4gKwo+ICsJcmV0dXJuIHJxOwo+ICt9Cj4g Kwo+ICtzdGF0aWMgdTMyIGh3c19zZXFubyhjb25zdCBzdHJ1Y3QgaGFuZyAqaCwKPiArCQkgICAg IGNvbnN0IHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gK3sKPiArCXJldHVybiBS RUFEX09OQ0UoaC0+c2Vxbm9bcnEtPmZlbmNlLmNvbnRleHQgJSAoUEFHRV9TSVpFL3NpemVvZih1 MzIpKV0pOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdm9pZCBoYW5nX2Zpbmkoc3RydWN0IGhhbmcgKmgp Cj4gK3sKPiArCSpoLT5iYXRjaCA9IE1JX0JBVENIX0JVRkZFUl9FTkQ7Cj4gKwo+ICsJaTkxNV9n ZW1fb2JqZWN0X3VucGluX21hcChoLT5vYmopOwo+ICsJX19pOTE1X2dlbV9vYmplY3RfcmVsZWFz ZV91bmxlc3NfYWN0aXZlKGgtPm9iaik7Cj4gKwo+ICsJaTkxNV9nZW1fb2JqZWN0X3VucGluX21h cChoLT5od3MpOwo+ICsJX19pOTE1X2dlbV9vYmplY3RfcmVsZWFzZV91bmxlc3NfYWN0aXZlKGgt Pmh3cyk7Cj4gK30KPiArCj4gK3N0YXRpYyBpbnQgaWd0X2hhbmdfc2FuaXR5Y2hlY2sodm9pZCAq YXJnKQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsKPiArCXN0 cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnE7Cj4gKwlzdHJ1Y3QgaGFuZyBoOwo+ICsJaW50 IGVycjsKPiArCj4gKwkvKiBCYXNpYyBjaGVjayB0aGF0IHdlIGNhbiBleGVjdXRlIG91ciBoYW5n aW5nIGJhdGNoICovCj4gKwo+ICsJbXV0ZXhfbG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7 Cj4gKwllcnIgPSBoYW5nX2luaXQoJmgsIGk5MTUpOwo+ICsJaWYgKGVycikKPiArCQlnb3RvIHVu bG9jazsKPiArCj4gKwlycSA9IGhhbmdfY3JlYXRlX3JlcXVlc3QoJmgsIGk5MTUtPmVuZ2luZVtS Q1NdLCBpOTE1LT5rZXJuZWxfY29udGV4dCk7Cj4gKwlpZiAoSVNfRVJSKHJxKSkgewo+ICsJCWVy ciA9IFBUUl9FUlIocnEpOwo+ICsJCWdvdG8gZmluaTsKPiArCX0KPiArCj4gKwlpOTE1X2dlbV9y ZXF1ZXN0X2dldChycSk7Cj4gKwo+ICsJKmguYmF0Y2ggPSBNSV9CQVRDSF9CVUZGRVJfRU5EOwo+ ICsJX19pOTE1X2FkZF9yZXF1ZXN0KHJxLCB0cnVlKTsKPiArCj4gKwlpOTE1X3dhaXRfcmVxdWVz dChycSwgSTkxNV9XQUlUX0xPQ0tFRCwgTUFYX1NDSEVEVUxFX1RJTUVPVVQpOwo+ICsJaTkxNV9n ZW1fcmVxdWVzdF9wdXQocnEpOwo+ICsKPiArZmluaToKPiArCWhhbmdfZmluaSgmaCk7Cj4gK3Vu bG9jazoKPiArCW11dGV4X3VubG9jaygmaTkxNS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwlyZXR1 cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9nbG9iYWxfcmVzZXQodm9pZCAqYXJn KQo+ICt7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfcHJpdmF0ZSAqaTkxNSA9IGFyZzsKPiArCXVuc2ln bmVkIGludCByZXNldF9jb3VudDsKPiArCWludCBlcnIgPSAwOwo+ICsKPiArCS8qIENoZWNrIHRo YXQgd2UgY2FuIGlzc3VlIGEgZ2xvYmFsIEdQVSByZXNldCAqLwo+ICsKPiArCWlmICghaW50ZWxf aGFzX2dwdV9yZXNldChpOTE1KSkKPiArCQlyZXR1cm4gMDsKPiArCj4gKwlzZXRfYml0KEk5MTVf UkVTRVRfSU5fUFJPR1JFU1MsICZpOTE1LT5ncHVfZXJyb3IuZmxhZ3MpOwo+ICsKPiArCW11dGV4 X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgpOwo+ICsJcmVzZXRfY291bnQgPSBpOTE1X3Jl c2V0X2NvdW50KCZpOTE1LT5ncHVfZXJyb3IpOwo+ICsKPiArCWk5MTVfcmVzZXQoaTkxNSk7Cj4g Kwo+ICsJaWYgKGk5MTVfcmVzZXRfY291bnQoJmk5MTUtPmdwdV9lcnJvcikgPT0gcmVzZXRfY291 bnQpIHsKPiArCQlwcl9lcnIoIk5vIEdQVSByZXNldCByZWNvcmRlZCFcbiIpOwo+ICsJCWVyciA9 IC1FSU5WQUw7Cj4gKwl9Cj4gKwltdXRleF91bmxvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0ZXgp Owo+ICsKPiArCUdFTV9CVUdfT04odGVzdF9iaXQoSTkxNV9SRVNFVF9JTl9QUk9HUkVTUywgJmk5 MTUtPmdwdV9lcnJvci5mbGFncykpOwo+ICsJaWYgKGk5MTVfdGVybWluYWxseV93ZWRnZWQoJmk5 MTUtPmdwdV9lcnJvcikpCj4gKwkJZXJyID0gLUVJTzsKPiArCj4gKwlyZXR1cm4gZXJyOwo+ICt9 Cj4gKwo+ICtzdGF0aWMgdTMyIGZha2VfaGFuZ2NoZWNrKHN0cnVjdCBkcm1faTkxNV9nZW1fcmVx dWVzdCAqcnEpCj4gK3sKPiArCXUzMiByZXNldF9jb3VudDsKPiArCj4gKwlycS0+ZW5naW5lLT5o YW5nY2hlY2suc3RhbGxlZCA9IHRydWU7Cj4gKwlycS0+ZW5naW5lLT5oYW5nY2hlY2suc2Vxbm8g PSBpbnRlbF9lbmdpbmVfZ2V0X3NlcW5vKHJxLT5lbmdpbmUpOwo+ICsKPiArCXJlc2V0X2NvdW50 ID0gaTkxNV9yZXNldF9jb3VudCgmcnEtPmk5MTUtPmdwdV9lcnJvcik7Cj4gKwo+ICsJc2V0X2Jp dChJOTE1X1JFU0VUX0lOX1BST0dSRVNTLCAmcnEtPmk5MTUtPmdwdV9lcnJvci5mbGFncyk7Cj4g Kwl3YWtlX3VwX2FsbCgmcnEtPmk5MTUtPmdwdV9lcnJvci53YWl0X3F1ZXVlKTsKPiArCj4gKwly ZXR1cm4gcmVzZXRfY291bnQ7Cj4gK30KPiArCj4gK3N0YXRpYyBib29sIHdhaXRfZm9yX2hhbmco c3RydWN0IGhhbmcgKmgsIHN0cnVjdCBkcm1faTkxNV9nZW1fcmVxdWVzdCAqcnEpCj4gK3sKPiAr CXJldHVybiAhKHdhaXRfZm9yX3VzKGk5MTVfc2Vxbm9fcGFzc2VkKGh3c19zZXFubyhoLCBycSks Cj4gKwkJCQkJICAgICAgIHJxLT5mZW5jZS5zZXFubyksCj4gKwkJCSAgICAgMTApICYmCj4gKwkJ IHdhaXRfZm9yKGk5MTVfc2Vxbm9fcGFzc2VkKGh3c19zZXFubyhoLCBycSksCj4gKwkJCQkJICAg IHJxLT5mZW5jZS5zZXFubyksCj4gKwkJCSAgMTAwMCkpOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50 IGlndF93YWl0X3Jlc2V0KHZvaWQgKmFyZykKPiArewo+ICsJc3RydWN0IGRybV9pOTE1X3ByaXZh dGUgKmk5MTUgPSBhcmc7Cj4gKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3JlcXVlc3QgKnJxOwo+ICsJ dW5zaWduZWQgaW50IHJlc2V0X2NvdW50Owo+ICsJc3RydWN0IGhhbmcgaDsKPiArCWxvbmcgdGlt ZW91dDsKPiArCWludCBlcnI7Cj4gKwo+ICsJLyogQ2hlY2sgdGhhdCB3ZSBkZXRlY3QgYSBzdHVj ayB3YWl0ZXIgYW5kIGlzc3VlIGEgcmVzZXQgKi8KPiArCj4gKwlpZiAoIWludGVsX2hhc19ncHVf cmVzZXQoaTkxNSkpCj4gKwkJcmV0dXJuIDA7Cj4gKwo+ICsJc2V0X2JpdChJOTE1X1JFU0VUX0lO X1BST0dSRVNTLCAmaTkxNS0+Z3B1X2Vycm9yLmZsYWdzKTsKCk5vdGljZWQgdGhhdCB5b3UgZG8g dGhpcyBlYXJseS4gSW4gdGhpcyB0ZXN0IHRoZSBmYWtlX2hhbmdjaGVjawp3b3VsZCBkbyBpdCBm b3IgeW91IGFsc28gYnV0IEkgc3VzcGVjdCB5b3Ugd2FudCB0aGlzIHRvIGdhaW4KZXhjbHVzaXZl IGFjY2VzcyBhZnRlciB0aGlzIHBvaW50PwoKLU1pa2EKCj4gKwo+ICsJbXV0ZXhfbG9jaygmaTkx NS0+ZHJtLnN0cnVjdF9tdXRleCk7Cj4gKwllcnIgPSBoYW5nX2luaXQoJmgsIGk5MTUpOwo+ICsJ aWYgKGVycikKPiArCQlnb3RvIHVubG9jazsKPiArCj4gKwlycSA9IGhhbmdfY3JlYXRlX3JlcXVl c3QoJmgsIGk5MTUtPmVuZ2luZVtSQ1NdLCBpOTE1LT5rZXJuZWxfY29udGV4dCk7Cj4gKwlpZiAo SVNfRVJSKHJxKSkgewo+ICsJCWVyciA9IFBUUl9FUlIocnEpOwo+ICsJCWdvdG8gZmluaTsKPiAr CX0KPiArCj4gKwlpOTE1X2dlbV9yZXF1ZXN0X2dldChycSk7Cj4gKwlfX2k5MTVfYWRkX3JlcXVl c3QocnEsIHRydWUpOwo+ICsKPiArCWlmICghd2FpdF9mb3JfaGFuZygmaCwgcnEpKSB7Cj4gKwkJ cHJfZXJyKCJGYWlsZWQgdG8gc3RhcnQgcmVxdWVzdCAleFxuIiwgcnEtPmZlbmNlLnNlcW5vKTsK PiArCQllcnIgPSAtRUlPOwo+ICsJCWdvdG8gZmluaTsKPiArCX0KPiArCj4gKwlyZXNldF9jb3Vu dCA9IGZha2VfaGFuZ2NoZWNrKHJxKTsKPiArCj4gKwl0aW1lb3V0ID0gaTkxNV93YWl0X3JlcXVl c3QocnEsIEk5MTVfV0FJVF9MT0NLRUQsIDEwKTsKPiArCWlmICh0aW1lb3V0IDwgMCkgewo+ICsJ CXByX2VycigiaTkxNV93YWl0X3JlcXVlc3QgZmFpbGVkIG9uIGEgc3R1Y2sgcmVxdWVzdDogZXJy PSVsZFxuIiwKPiArCQkgICAgICAgdGltZW91dCk7Cj4gKwkJZXJyID0gdGltZW91dDsKPiArCQln b3RvIGZpbmk7Cj4gKwl9Cj4gKwlHRU1fQlVHX09OKHRlc3RfYml0KEk5MTVfUkVTRVRfSU5fUFJP R1JFU1MsICZpOTE1LT5ncHVfZXJyb3IuZmxhZ3MpKTsKPiArCj4gKwlpZiAoaTkxNV9yZXNldF9j b3VudCgmaTkxNS0+Z3B1X2Vycm9yKSA9PSByZXNldF9jb3VudCkgewo+ICsJCXByX2VycigiTm8g R1BVIHJlc2V0IHJlY29yZGVkIVxuIik7Cj4gKwkJZXJyID0gLUVJTlZBTDsKPiArCQlnb3RvIGZp bmk7Cj4gKwl9Cj4gKwo+ICtmaW5pOgo+ICsJaGFuZ19maW5pKCZoKTsKPiArdW5sb2NrOgo+ICsJ bXV0ZXhfdW5sb2NrKCZpOTE1LT5kcm0uc3RydWN0X211dGV4KTsKPiArCj4gKwlpZiAoaTkxNV90 ZXJtaW5hbGx5X3dlZGdlZCgmaTkxNS0+Z3B1X2Vycm9yKSkKPiArCQlyZXR1cm4gLUVJTzsKPiAr Cj4gKwlyZXR1cm4gZXJyOwo+ICt9Cj4gKwo+ICtzdGF0aWMgaW50IGlndF9yZXNldF9xdWV1ZSh2 b2lkICphcmcpCj4gK3sKPiArCUlHVF9USU1FT1VUKGVuZF90aW1lKTsKPiArCXN0cnVjdCBkcm1f aTkxNV9wcml2YXRlICppOTE1ID0gYXJnOwo+ICsJc3RydWN0IGRybV9pOTE1X2dlbV9yZXF1ZXN0 ICpwcmV2Owo+ICsJdW5zaWduZWQgaW50IGNvdW50Owo+ICsJc3RydWN0IGhhbmcgaDsKPiArCWlu dCBlcnI7Cj4gKwo+ICsJLyogQ2hlY2sgdGhhdCB3ZSByZXBsYXkgcGVuZGluZyByZXF1ZXN0cyBm b2xsb3dpbmcgYSBoYW5nICovCj4gKwo+ICsJaWYgKCFpbnRlbF9oYXNfZ3B1X3Jlc2V0KGk5MTUp KQo+ICsJCXJldHVybiAwOwo+ICsKPiArCW11dGV4X2xvY2soJmk5MTUtPmRybS5zdHJ1Y3RfbXV0 ZXgpOwo+ICsJZXJyID0gaGFuZ19pbml0KCZoLCBpOTE1KTsKPiArCWlmIChlcnIpCj4gKwkJZ290 byB1bmxvY2s7Cj4gKwo+ICsJcHJldiA9IGhhbmdfY3JlYXRlX3JlcXVlc3QoJmgsIGk5MTUtPmVu Z2luZVtSQ1NdLCBpOTE1LT5rZXJuZWxfY29udGV4dCk7Cj4gKwlpZiAoSVNfRVJSKHByZXYpKSB7 Cj4gKwkJZXJyID0gUFRSX0VSUihwcmV2KTsKPiArCQlnb3RvIGZpbmk7Cj4gKwl9Cj4gKwo+ICsJ aTkxNV9nZW1fcmVxdWVzdF9nZXQocHJldik7Cj4gKwlfX2k5MTVfYWRkX3JlcXVlc3QocHJldiwg dHJ1ZSk7Cj4gKwo+ICsJY291bnQgPSAwOwo+ICsJZG8gewo+ICsJCXN0cnVjdCBkcm1faTkxNV9n ZW1fcmVxdWVzdCAqcnE7Cj4gKwkJdW5zaWduZWQgaW50IHJlc2V0X2NvdW50Owo+ICsKPiArCQly cSA9IGhhbmdfY3JlYXRlX3JlcXVlc3QoJmgsIGk5MTUtPmVuZ2luZVtSQ1NdLCBpOTE1LT5rZXJu ZWxfY29udGV4dCk7Cj4gKwkJaWYgKElTX0VSUihycSkpIHsKPiArCQkJZXJyID0gUFRSX0VSUihy cSk7Cj4gKwkJCWdvdG8gZmluaTsKPiArCQl9Cj4gKwo+ICsJCWk5MTVfZ2VtX3JlcXVlc3RfZ2V0 KHJxKTsKPiArCQlfX2k5MTVfYWRkX3JlcXVlc3QocnEsIHRydWUpOwo+ICsKPiArCQlpZiAoIXdh aXRfZm9yX2hhbmcoJmgsIHByZXYpKSB7Cj4gKwkJCXByX2VycigiRmFpbGVkIHRvIHN0YXJ0IHJl cXVlc3QgJXhcbiIsCj4gKwkJCSAgICAgICBwcmV2LT5mZW5jZS5zZXFubyk7Cj4gKwkJCWVyciA9 IC1FSU87Cj4gKwkJCWdvdG8gZmluaTsKPiArCQl9Cj4gKwo+ICsJCXJlc2V0X2NvdW50ID0gZmFr ZV9oYW5nY2hlY2socHJldik7Cj4gKwo+ICsJCWk5MTVfcmVzZXQoaTkxNSk7Cj4gKwo+ICsJCUdF TV9CVUdfT04odGVzdF9iaXQoSTkxNV9SRVNFVF9JTl9QUk9HUkVTUywgJmk5MTUtPmdwdV9lcnJv ci5mbGFncykpOwo+ICsJCWlmIChwcmV2LT5mZW5jZS5lcnJvciAhPSAtRUlPKSB7Cj4gKwkJCXBy X2VycigiR1BVIHJlc2V0IG5vdCByZWNvcmRlZCBvbiBoYW5naW5nIHJlcXVlc3QgW2ZlbmNlLmVy cm9yPSVkXSFcbiIsCj4gKwkJCSAgICAgICBwcmV2LT5mZW5jZS5lcnJvcik7Cj4gKwkJCWVyciA9 IC1FSU5WQUw7Cj4gKwkJCWdvdG8gZmluaTsKPiArCQl9Cj4gKwo+ICsJCWlmIChycS0+ZmVuY2Uu ZXJyb3IpIHsKPiArCQkJcHJfZXJyKCJGZW5jZSBlcnJvciBzdGF0dXMgbm90IHplcm8gWyVkXSBh ZnRlciB1bnJlbGF0ZWQgcmVzZXRcbiIsCj4gKwkJCSAgICAgICBycS0+ZmVuY2UuZXJyb3IpOwo+ ICsJCQllcnIgPSAtRUlOVkFMOwo+ICsJCQlnb3RvIGZpbmk7Cj4gKwkJfQo+ICsKPiArCQlpZiAo aTkxNV9yZXNldF9jb3VudCgmaTkxNS0+Z3B1X2Vycm9yKSA9PSByZXNldF9jb3VudCkgewo+ICsJ CQlwcl9lcnIoIk5vIEdQVSByZXNldCByZWNvcmRlZCFcbiIpOwo+ICsJCQllcnIgPSAtRUlOVkFM Owo+ICsJCQlnb3RvIGZpbmk7Cj4gKwkJfQo+ICsKPiArCQlpOTE1X2dlbV9yZXF1ZXN0X3B1dChw cmV2KTsKPiArCQlwcmV2ID0gcnE7Cj4gKwkJY291bnQrKzsKPiArCX0gd2hpbGUgKHRpbWVfYmVm b3JlKGppZmZpZXMsIGVuZF90aW1lKSk7Cj4gKwlwcl9pbmZvKCJDb21wbGV0ZWQgJWQgcmVzZXRz XG4iLCBjb3VudCk7Cj4gKwlpOTE1X2dlbV9yZXF1ZXN0X3B1dChwcmV2KTsKPiArCj4gK2Zpbmk6 Cj4gKwloYW5nX2ZpbmkoJmgpOwo+ICt1bmxvY2s6Cj4gKwltdXRleF91bmxvY2soJmk5MTUtPmRy bS5zdHJ1Y3RfbXV0ZXgpOwo+ICsKPiArCWlmIChpOTE1X3Rlcm1pbmFsbHlfd2VkZ2VkKCZpOTE1 LT5ncHVfZXJyb3IpKQo+ICsJCXJldHVybiAtRUlPOwo+ICsKPiArCXJldHVybiBlcnI7Cj4gK30K PiArCj4gK2ludCBpbnRlbF9oYW5nY2hlY2tfbGl2ZV9zZWxmdGVzdHMoc3RydWN0IGRybV9pOTE1 X3ByaXZhdGUgKmk5MTUpCj4gK3sKPiArCXN0YXRpYyBjb25zdCBzdHJ1Y3QgaTkxNV9zdWJ0ZXN0 IHRlc3RzW10gPSB7Cj4gKwkJU1VCVEVTVChpZ3RfaGFuZ19zYW5pdHljaGVjayksCj4gKwkJU1VC VEVTVChpZ3RfZ2xvYmFsX3Jlc2V0KSwKPiArCQlTVUJURVNUKGlndF93YWl0X3Jlc2V0KSwKPiAr CQlTVUJURVNUKGlndF9yZXNldF9xdWV1ZSksCj4gKwl9Owo+ICsJcmV0dXJuIGk5MTVfc3VidGVz dHModGVzdHMsIGk5MTUpOwo+ICt9Cj4gLS0gCj4gMi4xMS4wCj4KPiBfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwo+IEludGVsLWdmeCBtYWlsaW5nIGxpc3QK PiBJbnRlbC1nZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCj4gaHR0cHM6Ly9saXN0cy5mcmVlZGVz a3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngKX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX18KSW50ZWwtZ2Z4IG1haWxpbmcgbGlzdApJbnRlbC1n ZnhAbGlzdHMuZnJlZWRlc2t0b3Aub3JnCmh0dHBzOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21h aWxtYW4vbGlzdGluZm8vaW50ZWwtZ2Z4Cg==