From mboxrd@z Thu Jan 1 00:00:00 1970 From: Peter Antoine Subject: [PATCH v3] test/gem_mocs_settings: Testing MOCS register settings Date: Mon, 11 Apr 2016 13:51:25 +0100 Message-ID: <1460379085-2774-1-git-send-email-peter.antoine@intel.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by gabe.freedesktop.org (Postfix) with ESMTP id B8D57898F1 for ; Mon, 11 Apr 2016 12:51:28 +0000 (UTC) List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: intel-gfx-bounces@lists.freedesktop.org Sender: "Intel-gfx" To: intel-gfx@lists.freedesktop.org List-Id: intel-gfx@lists.freedesktop.org VGhlIE1PQ1MgcmVnaXN0ZXJzIHdlcmUgYWRkZWQgaW4gR2VuOSBhbmQgZGVmaW5lIHRoZSBjYWNo aW5nIHBvbGljeS4KVGhlIHJlZ2lzdGVycyBhcmUgc3BsaXQgaW50byB0d28gc2V0cy4gVGhlIGZp cnN0IHNldCBjb250cm9scyB0aGUKRURSQU0gcG9saWN5IGFuZCBoYXZlIGEgc2V0IGZvciBlYWNo IGVuZ2luZSwgdGhlIHNlY29uZCBzZXQgY29udHJvbHMKdGhlIEwzIHBvbGljeS4gVGhlIHR3byBz ZXRzIHVzZSB0aGUgc2FtZSBpbmRleC4KClRoZSBSQ1MgcmVnaXN0ZXJzIGFuZCB0aGUgTDNDQyBy ZWdpc3RlcnMgYXJlIHN0b3JlZCBpbiB0aGUgUkNTIGNvbnRleHQuCgpUaGUgdGVzdCBjaGVja3Mg dGhhdCB0aGUgcmVnaXN0ZXJzIGFyZSBjb3JyZWN0IGJ5IGNoZWNraW5nIHRoZSB2YWx1ZXMgYnkK ZGlyZWN0bHkgcmVhZGluZyB0aGVtIHZpYSBNTUlPLCB0aGVuIGFnYWluIGl0IHRlc3RzIHRoZW0g YnkgcmVhZGluZyB0aGVtCmZyb20gd2l0aGluIGEgYmF0Y2ggYnVmZmVyLiBSQ1MgZW5naW5lIGlz IHRlc3RlZCBsYXN0IGFzIGl0IHByb2dyYW1zIHRoZQpyZWdpc3RlcnMgdmlhIGEgYmF0Y2ggYnVm ZmVyIGFuZCB0aGlzIHdpbGwgaW52YWxpZGF0ZSB0aGUgdGVzdCBmb3IKd29ya2xvYWRzIHRoYXQg ZG9uJ3QgdXNlIHRoZSByZW5kZXIgcmluZyBvciBkb24ndCBydW4gYSByZW5kZXIgYmF0Y2gKZmly c3QuCgp2MjogUmVvcmdhbmlzZWQgdGhlIHN0cnVjdHVyZS4KICAgIEFkZGVkIG1vcmUgdGVzdHMu IChDaHJpcyBXaWxzb24pCnYzOiBGaXhlZCBhIGZldyBidWdzLiAoQ2hyaXMgV2lsc29uKQoKU2ln bmVkLW9mZi1ieTogUGV0ZXIgQW50b2luZSA8cGV0ZXIuYW50b2luZUBpbnRlbC5jb20+Ci0tLQog bGliL2lvY3RsX3dyYXBwZXJzLmMgICAgICB8ICAxMyArKwogbGliL2lvY3RsX3dyYXBwZXJzLmgg ICAgICB8ICAgMSArCiB0ZXN0cy9NYWtlZmlsZS5zb3VyY2VzICAgIHwgICAxICsKIHRlc3RzL2dl bV9tb2NzX3NldHRpbmdzLmMgfCA1NTkgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrKysrKysrKwogNCBmaWxlcyBjaGFuZ2VkLCA1NzQgaW5zZXJ0aW9ucygrKQogY3JlYXRl IG1vZGUgMTAwNjQ0IHRlc3RzL2dlbV9tb2NzX3NldHRpbmdzLmMKCmRpZmYgLS1naXQgYS9saWIv aW9jdGxfd3JhcHBlcnMuYyBiL2xpYi9pb2N0bF93cmFwcGVycy5jCmluZGV4IDA3NmJjZTguLjhk NzQxMjggMTAwNjQ0Ci0tLSBhL2xpYi9pb2N0bF93cmFwcGVycy5jCisrKyBiL2xpYi9pb2N0bF93 cmFwcGVycy5jCkBAIC0xMzgyLDYgKzEzODIsMTkgQEAgdm9pZCBnZW1fcmVxdWlyZV9yaW5nKGlu dCBmZCwgdW5zaWduZWQgcmluZykKIAlpZ3RfcmVxdWlyZShnZW1faGFzX3JpbmcoZmQsIHJpbmcp KTsKIH0KIAorLyoqCisgKiBnZW1faGFzX21vY3M6CisgKiBAZmQ6IG9wZW4gaTkxNSBkcm0gZmls ZSBkZXNjcmlwdG9yCisgKgorICogRmVhdHVyZSB0ZXN0IG1hY3JvIHRvIHF1ZXJ5IHdoZXRoZXIg dGhlIGRldmljZSBoYXMgTU9DUyByZWdpc3RlcnMuCisgKiBUaGVzZSBleGlzdCBnZW4gOSsuCisg Ki8KK3ZvaWQgZ2VtX2hhc19tb2NzKGludCBmZCkKK3sKKwljb25zdCBpbnQgZ2VuID0gaW50ZWxf Z2VuKGludGVsX2dldF9kcm1fZGV2aWQoZmQpKTsKKwlpZ3RfcmVxdWlyZShnZW4gPj0gOSk7Cit9 CisKIC8qIHByaW1lICovCiAKIC8qKgpkaWZmIC0tZ2l0IGEvbGliL2lvY3RsX3dyYXBwZXJzLmgg Yi9saWIvaW9jdGxfd3JhcHBlcnMuaAppbmRleCBkOTg2ZjYxLi5lYmVkZjFlIDEwMDY0NAotLS0g YS9saWIvaW9jdGxfd3JhcHBlcnMuaAorKysgYi9saWIvaW9jdGxfd3JhcHBlcnMuaApAQCAtMTU0 LDYgKzE1NCw3IEBAIGJvb2wgZ2VtX2hhc19zb2Z0cGluKGludCBmZCk7CiB2b2lkIGdlbV9yZXF1 aXJlX2NhY2hpbmcoaW50IGZkKTsKIGJvb2wgZ2VtX2hhc19yaW5nKGludCBmZCwgdW5zaWduZWQg cmluZyk7CiB2b2lkIGdlbV9yZXF1aXJlX3JpbmcoaW50IGZkLCB1bnNpZ25lZCByaW5nKTsKK3Zv aWQgZ2VtX2hhc19tb2NzKGludCBmZCk7CiAKIC8qIHByaW1lICovCiBzdHJ1Y3QgbG9jYWxfZG1h X2J1Zl9zeW5jIHsKZGlmZiAtLWdpdCBhL3Rlc3RzL01ha2VmaWxlLnNvdXJjZXMgYi90ZXN0cy9N YWtlZmlsZS5zb3VyY2VzCmluZGV4IDQzZjIzMmYuLmQ0ODNjOWUgMTAwNjQ0Ci0tLSBhL3Rlc3Rz L01ha2VmaWxlLnNvdXJjZXMKKysrIGIvdGVzdHMvTWFrZWZpbGUuc291cmNlcwpAQCAtMTQ4LDYg KzE0OCw3IEBAIFRFU1RTX3Byb2dzID0gXAogCWdlbV9sdXRfaGFuZGxlIFwKIAlnZW1fbW1hcF9v ZmZzZXRfZXhoYXVzdGlvbiBcCiAJZ2VtX21lZGlhX2ZpbGwgXAorCWdlbV9tb2NzX3NldHRpbmdz IFwKIAlnZW1fZ3BncHVfZmlsbCBcCiAJZ2VtX3BpbiBcCiAJZ2VtX3JlZ19yZWFkIFwKZGlmZiAt LWdpdCBhL3Rlc3RzL2dlbV9tb2NzX3NldHRpbmdzLmMgYi90ZXN0cy9nZW1fbW9jc19zZXR0aW5n cy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjAzYzUwODkKLS0tIC9kZXYv bnVsbAorKysgYi90ZXN0cy9nZW1fbW9jc19zZXR0aW5ncy5jCkBAIC0wLDAgKzEsNTU5IEBACisv KgorICogQ29weXJpZ2h0IMKpIDIwMTYgSW50ZWwgQ29ycG9yYXRpb24KKyAqCisgKiBQZXJtaXNz aW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBlcnNvbiBvYnRh aW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVkIGRvY3VtZW50 YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhlIFNvZnR3YXJl IHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRpb24KKyAqIHRo ZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBkaXN0cmlidXRl LCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0d2FyZSwgYW5k IHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBmdXJuaXNoZWQg dG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgorICoKKyAqIFRo ZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90aWNlIChpbmNs dWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQgaW4gYWxsIGNv cGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJlLgorICoKKyAq IFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFO WSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVE IFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEg UEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFM TAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxFIEZPUiBBTlkg Q0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJ T04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBGUk9NLCBPVVQg T0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SIE9USEVS IERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKgorICovCisKKy8qKiBAZmlsZSBnZW1f bW9jc19zZXR0aW5ncy5jCisgKgorICogQ2hlY2sgdGhhdCB0aGUgTU9DcyBjYWNoZSBzZXR0aW5n cyBhcmUgdmFsaWQuCisgKi8KKworI2luY2x1ZGUgImlndC5oIgorI2luY2x1ZGUgImlndF9ndC5o IgorCisjZGVmaW5lIE1BWF9OVU1CRVJfTU9DU19SRUdJU1RFUlMJKDY0KQorCitlbnVtIHsKKwlO T05FLAorCVJFU0VULAorCVNVU1BFTkQsCisJSElCRVJOQVRFCit9OworCisjZGVmaW5lIEdFTjlf TE5DRkNNT0NTMAkJKDB4QjAyMCkJLyogTDMgQ2FjaGUgQ29udHJvbCBiYXNlICovCisjZGVmaW5l IEdFTjlfR0ZYX01PQ1NfMAkJKDB4YzgwMCkJLyogR3JhcGhpY3MgTU9DUyBiYXNlIHJlZ2lzdGVy Ki8KKyNkZWZpbmUgR0VOOV9NRlgwX01PQ1NfMAkoMHhjOTAwKQkvKiBNZWRpYSAwIE1PQ1MgYmFz ZSByZWdpc3RlciovCisjZGVmaW5lIEdFTjlfTUZYMV9NT0NTXzAJKDB4Y0EwMCkJLyogTWVkaWEg MSBNT0NTIGJhc2UgcmVnaXN0ZXIqLworI2RlZmluZSBHRU45X1ZFQk9YX01PQ1NfMAkoMHhjQjAw KQkvKiBWaWRlbyBNT0NTIGJhc2UgcmVnaXN0ZXIqLworI2RlZmluZSBHRU45X0JMVF9NT0NTXzAJ CSgweGNjMDApCS8qIEJsaXR0ZXIgTU9DUyBiYXNlIHJlZ2lzdGVyKi8KKworI2RlZmluZSBFTkdJ TkVfR0ZYCShJOTE1X0VYRUNfUkVOREVSKQorI2RlZmluZSBFTkdJTkVfTUZYMAkoSTkxNV9FWEVD X0JTRCkKKyNkZWZpbmUgRU5HSU5FX01GWDBfQUxUCShJOTE1X0VYRUNfQlNEIHwgMSA8PCAxMykK KyNkZWZpbmUgRU5HSU5FX01GWDEJKEk5MTVfRVhFQ19CU0QgfCAyIDw8IDEzKQorI2RlZmluZSBF TkdJTkVfQkxUCShJOTE1X0VYRUNfQkxUKQorI2RlZmluZSBFTkdJTkVfVkVCT1gJKEk5MTVfRVhF Q19WRUJPWCkKKworc3RydWN0IG1vY3NfZW50cnkgeworCXVpbnQzMl90CWNvbnRyb2xfdmFsdWU7 CisJdWludDE2X3QJbDNjY192YWx1ZTsKK307CisKK3N0cnVjdCBtb2NzX3RhYmxlIHsKKwl1aW50 MzJfdAkJc2l6ZTsKKwljb25zdCBzdHJ1Y3QgbW9jc19lbnRyeQkqdGFibGU7Cit9OworCitzdGF0 aWMgY29uc3Qgc3RydWN0IG1vY3NfZW50cnkgc2t5bGFrZV9tb2NzX3RhYmxlW10gPSB7CisJeyAw eDAwMDAwMDA5LCAweDAwMTAgfSwKKwl7IDB4MDAwMDAwMzgsIDB4MDAzMCB9LAorCXsgMHgwMDAw MDAzYiwgMHgwMDMwIH0sCit9OworCitzdGF0aWMgY29uc3Qgc3RydWN0IG1vY3NfZW50cnkgYnJv eHRvbl9tb2NzX3RhYmxlW10gPSB7CisJeyAweDAwMDAwMDA5LCAweDAwMTAgfSwKKwl7IDB4MDAw MDAwMzgsIDB4MDAzMCB9LAorCXsgMHgwMDAwMDAzYiwgMHgwMDMwIH0sCit9OworCitzdGF0aWMg Y29uc3Qgc3RydWN0IG1vY3NfZW50cnkgZGlydHlfdGFibGVfbW9jc190YWJsZVtdID0geworCXsg MHgwMDAwN0ZGRiwgMHgwMDNGIH0sCisJeyAweDAwMDA3RkZGLCAweDAwM0YgfSwKKwl7IDB4MDAw MDdGRkYsIDB4MDAzRiB9LAorfTsKKworc3RhdGljIGNvbnN0IHVpbnQzMl90IHdyaXRlX3ZhbHVl c1tdID0geworCTB4RkZGRkZGRkYsCisJMHhGRkZGRkZGRiwKKwkweEZGRkZGRkZGLAorCTB4RkZG RkZGRkYKK307CisKK3N0YXRpYyBib29sIGdldF9tb2NzX3NldHRpbmdzKHVpbnQzMl90IGRldmlk LAorCQkJc3RydWN0IG1vY3NfdGFibGUgKnRhYmxlLAorCQkJYm9vbCBkaXJ0eSkKK3sKKwlib29s IHJlc3VsdCA9IGZhbHNlOworCisJaWYgKGRpcnR5KSB7CisJCXRhYmxlLT5zaXplICA9IEFSUkFZ X1NJWkUoZGlydHlfdGFibGVfbW9jc190YWJsZSk7CisJCXRhYmxlLT50YWJsZSA9IGRpcnR5X3Rh YmxlX21vY3NfdGFibGU7CisJCXJlc3VsdCA9IHRydWU7CisJfSBlbHNlIGlmIChJU19TS1lMQUtF KGRldmlkKSB8fCBJU19LQUJZTEFLRShkZXZpZCkpIHsKKwkJdGFibGUtPnNpemUgID0gQVJSQVlf U0laRShza3lsYWtlX21vY3NfdGFibGUpOworCQl0YWJsZS0+dGFibGUgPSBza3lsYWtlX21vY3Nf dGFibGU7CisJCXJlc3VsdCA9IHRydWU7CisJfSBlbHNlIGlmIChJU19CUk9YVE9OKGRldmlkKSkg eworCQl0YWJsZS0+c2l6ZSAgPSBBUlJBWV9TSVpFKGJyb3h0b25fbW9jc190YWJsZSk7CisJCXRh YmxlLT50YWJsZSA9IGJyb3h0b25fbW9jc190YWJsZTsKKwkJcmVzdWx0ID0gdHJ1ZTsKKwl9CisK KwlyZXR1cm4gcmVzdWx0OworfQorCitzdGF0aWMgdWludDMyX3QgZ2V0X2VuZ2luZV9iYXNlKHVp bnQzMl90IGVuZ2luZSkKK3sKKwl1aW50MzJfdCByZXN1bHQgPSAwOworCisJc3dpdGNoKGVuZ2lu ZSkgeworCWNhc2UgRU5HSU5FX01GWDA6CisJY2FzZSBFTkdJTkVfTUZYMF9BTFQ6CXJlc3VsdCA9 IEdFTjlfTUZYMF9NT0NTXzA7CWJyZWFrOworCWNhc2UgRU5HSU5FX0dGWDogCXJlc3VsdCA9IEdF TjlfR0ZYX01PQ1NfMDsJYnJlYWs7CisJY2FzZSBFTkdJTkVfTUZYMTogCXJlc3VsdCA9IEdFTjlf TUZYMV9NT0NTXzA7CWJyZWFrOworCWNhc2UgRU5HSU5FX0JMVDoJcmVzdWx0ID0gR0VOOV9CTFRf TU9DU18wOwlicmVhazsKKwljYXNlIEVOR0lORV9WRUJPWDoJcmVzdWx0ID0gR0VOOV9WRUJPWF9N T0NTXzA7CWJyZWFrOworCWRlZmF1bHQ6CisJCWlndF9mYWlsKC0xKTsKKwl9CisKKwlyZXR1cm4g cmVzdWx0OworfQorCitzdGF0aWMgdWludDMyX3QgZ2V0X21vY3NfcmVnaXN0ZXJfdmFsdWUoaW50 IGZkLCB1aW50NjRfdCBvZmZzZXQsIHVpbnQzMl90IGluZGV4KQoreworCXVpbnQzMl90IHJlZ2lk ID0gb2Zmc2V0ICsgKGluZGV4ICogNCk7CisKKwlpZ3RfYXNzZXJ0KGluZGV4IDwgTUFYX05VTUJF Ul9NT0NTX1JFR0lTVEVSUyk7CisKKwlyZXR1cm4gaW50ZWxfcmVnaXN0ZXJfcmVhZChyZWdpZCk7 Cit9CisKK3N0YXRpYyB2b2lkIHRlc3RfbW9jc19jb250cm9sX3ZhbHVlcyhpbnQgZmQsIHVpbnQz Ml90IGVuZ2luZSkKK3sKKwlpbnQgaTsKKwl1aW50MzJfdCBkZXZpZCA9IGludGVsX2dldF9kcm1f ZGV2aWQoZmQpOworCXVpbnQzMl90IGVuZ2luZV9iYXNlID0gZ2V0X2VuZ2luZV9iYXNlKGVuZ2lu ZSk7CisJc3RydWN0IG1vY3NfdGFibGUgdGFibGU7CisKKwlpZ3RfYXNzZXJ0KGdldF9tb2NzX3Nl dHRpbmdzKGRldmlkLCAmdGFibGUsIGZhbHNlKSk7CisKKwlmb3IgKGkgPSAwOyBpIDwgdGFibGUu c2l6ZTsgaSsrKQorCQlpZ3RfYXNzZXJ0X2VxKGdldF9tb2NzX3JlZ2lzdGVyX3ZhbHVlKGZkLCBl bmdpbmVfYmFzZSwgaSksCisJCQkJdGFibGUudGFibGVbaV0uY29udHJvbF92YWx1ZSk7Cit9CisK K3N0YXRpYyB2b2lkIHRlc3RfbW9jc19sM2NjX3ZhbHVlcyhpbnQgZmQpCit7CisJaW50IGk7CisJ dWludDMyX3QgcmVnX3ZhbHVlc1tNQVhfTlVNQkVSX01PQ1NfUkVHSVNURVJTLzJdOworCXN0cnVj dCBtb2NzX3RhYmxlIHRhYmxlOworCisJZm9yIChpID0gMDsgaSA8IE1BWF9OVU1CRVJfTU9DU19S RUdJU1RFUlMgLyAyOyBpKyspCisJCXJlZ192YWx1ZXNbaV0gPSBpbnRlbF9yZWdpc3Rlcl9yZWFk KEdFTjlfTE5DRkNNT0NTMCArIChpICogNCkpOworCisJaWd0X2Fzc2VydChnZXRfbW9jc19zZXR0 aW5ncyhpbnRlbF9nZXRfZHJtX2RldmlkKGZkKSwgJnRhYmxlLCBmYWxzZSkpOworCisJZm9yIChp ID0gMDsgaSA8IHRhYmxlLnNpemUgLyAyOyBpKyspIHsKKwkJaWd0X2Fzc2VydF9lcSgocmVnX3Zh bHVlc1tpXSAmIDB4ZmZmZiksCisJCQkJdGFibGUudGFibGVbaSAqIDJdLmwzY2NfdmFsdWUpOwor CQlpZ3RfYXNzZXJ0X2VxKChyZWdfdmFsdWVzW2ldID4+IDE2KSwKKwkJCQl0YWJsZS50YWJsZVtp ICogMiArIDFdLmwzY2NfdmFsdWUpOworCX0KKworCWlmICh0YWJsZS5zaXplICYgMSkKKwkJaWd0 X2Fzc2VydF9lcSgocmVnX3ZhbHVlc1tpXSAmIDB4ZmZmZiksCisJCQkJdGFibGUudGFibGVbaSAq IDJdLmwzY2NfdmFsdWUpOworfQorCitzdGF0aWMgdm9pZCB0ZXN0X21vY3NfdmFsdWVzKGludCBm ZCkKK3sKKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZSAqZTsKKworCWZvciAo ZSA9IGludGVsX2V4ZWN1dGlvbl9lbmdpbmVzOyBlLT5uYW1lOyBlKyspCisJCWlmIChlLT5leGVj X2lkICE9IEk5MTVfRVhFQ19ERUZBVUxUICYmCisJCSAgICBnZW1faGFzX3JpbmcoZmQsIGUtPmV4 ZWNfaWQgfCBlLT5mbGFncykpCisJCQl0ZXN0X21vY3NfY29udHJvbF92YWx1ZXMoZmQsIGUtPmV4 ZWNfaWQgfCBlLT5mbGFncyk7CisKKwl0ZXN0X21vY3NfbDNjY192YWx1ZXMoZmQpOworfQorCisj ZGVmaW5lIE1JX1NUT1JFX1JFR0lTVEVSX01FTV82NF9CSVRfQUREUgkoKDB4MjQgPDwgMjMpIHwg MikKKworc3RhdGljIGludCBjcmVhdGVfcmVhZF9iYXRjaChzdHJ1Y3QgZHJtX2k5MTVfZ2VtX3Jl bG9jYXRpb25fZW50cnkgKnJlbG9jLAorCQkJICAgICB1aW50MzJfdCAqYmF0Y2gsCisJCQkgICAg IHVpbnQzMl90IGRzdF9oYW5kbGUsCisJCQkgICAgIHVpbnQzMl90IHNpemUsCisJCQkgICAgIHVp bnQzMl90IHJlZ19iYXNlKQoreworCXVuc2lnbmVkIGludCBpbmRleDsKKwl1bnNpZ25lZCBpbnQg b2Zmc2V0ID0gMDsKKworCWZvciAoaW5kZXggPSAwLCBvZmZzZXQgPSAwOyBpbmRleCA8IHNpemU7 IGluZGV4KyssIG9mZnNldCArPSA0KQorCXsKKwkJYmF0Y2hbb2Zmc2V0XSAgID0gTUlfU1RPUkVf UkVHSVNURVJfTUVNXzY0X0JJVF9BRERSOworCQliYXRjaFtvZmZzZXQrMV0gPSByZWdfYmFzZSAr IChpbmRleCAqIHNpemVvZih1aW50MzJfdCkpOworCQliYXRjaFtvZmZzZXQrMl0gPSBpbmRleCAq IHNpemVvZih1aW50MzJfdCk7CS8qIHJlbG9jICovCisJCWJhdGNoW29mZnNldCszXSA9IDA7CisK KwkJcmVsb2NbaW5kZXhdLm9mZnNldCA9IChvZmZzZXQgKyAyKSAqIHNpemVvZih1aW50MzJfdCk7 CisJCXJlbG9jW2luZGV4XS5kZWx0YSA9IGluZGV4ICogc2l6ZW9mKHVpbnQzMl90KTsKKwkJcmVs b2NbaW5kZXhdLnRhcmdldF9oYW5kbGUgPSBkc3RfaGFuZGxlOworCQlyZWxvY1tpbmRleF0ud3Jp dGVfZG9tYWluID0gSTkxNV9HRU1fRE9NQUlOX1JFTkRFUjsKKwl9CisKKwliYXRjaFtvZmZzZXQr K10gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCWJhdGNoW29mZnNldCsrXSA9IDA7CisKKwlyZXR1 cm4gb2Zmc2V0ICogc2l6ZW9mKHVpbnQzMl90KTsKK30KKworI2RlZmluZSBOU0VDX1BFUl9TRUMJ MTAwMDAwMDAwMExMCisKK3N0YXRpYyB2b2lkIGRvX3JlYWRfcmVnaXN0ZXJzKGludCBmZCwKKwkJ CSAgICAgIHVpbnQzMl90IGN0eF9pZCwKKwkJCSAgICAgIHVpbnQzMl90IGRzdF9oYW5kbGUsCisJ CQkgICAgICB1aW50MzJfdCByZWdfYmFzZSwKKwkJCSAgICAgIHVpbnQzMl90IHNpemUsCisJCQkg ICAgICB1aW50MzJfdCBlbmdpbmVfaWQpCit7CisJc3RydWN0IGRybV9pOTE1X2dlbV9leGVjYnVm ZmVyMiBleGVjYnVmOworCXN0cnVjdCBkcm1faTkxNV9nZW1fZXhlY19vYmplY3QyIGdlbV9leGVj WzJdOworCXN0cnVjdCBkcm1faTkxNV9nZW1fcmVsb2NhdGlvbl9lbnRyeSByZWxvY1tNQVhfTlVN QkVSX01PQ1NfUkVHSVNURVJTXTsKKwl1aW50MzJfdCBiYXRjaFtNQVhfTlVNQkVSX01PQ1NfUkVH SVNURVJTICogNCArIDRdOworCXVpbnQzMl90IGhhbmRsZSA9IGdlbV9jcmVhdGUoZmQsIDQwOTYp OworCWludDY0X3QgdGltZW91dF9ucyA9IDEwICogTlNFQ19QRVJfU0VDOyAvKiAxMCBzZWNvbmRz ICovCisKKwltZW1zZXQocmVsb2MsIDAsIHNpemVvZihyZWxvYykpOworCW1lbXNldChnZW1fZXhl YywgMCwgc2l6ZW9mKGdlbV9leGVjKSk7CisJbWVtc2V0KCZleGVjYnVmLCAwLCBzaXplb2YoZXhl Y2J1ZikpOworCisJZ2VtX2V4ZWNbMF0uaGFuZGxlID0gZHN0X2hhbmRsZTsKKworCWdlbV9leGVj WzFdLmhhbmRsZSA9IGhhbmRsZTsKKwlnZW1fZXhlY1sxXS5yZWxvY2F0aW9uX2NvdW50ID0gc2l6 ZTsKKwlnZW1fZXhlY1sxXS5yZWxvY3NfcHRyID0gKHVpbnRwdHJfdCkgcmVsb2M7CisKKwlleGVj YnVmLmJ1ZmZlcnNfcHRyID0gKHVpbnRwdHJfdClnZW1fZXhlYzsKKwlleGVjYnVmLmJ1ZmZlcl9j b3VudCA9IDI7CisJZXhlY2J1Zi5iYXRjaF9sZW4gPSBjcmVhdGVfcmVhZF9iYXRjaChyZWxvYywK KwkJCQkJICAgICAgYmF0Y2gsCisJCQkJCSAgICAgIGRzdF9oYW5kbGUsCisJCQkJCSAgICAgIHNp emUsCisJCQkJCSAgICAgIHJlZ19iYXNlKTsKKworCWdlbV93cml0ZShmZCwgaGFuZGxlLCAwLCBi YXRjaCwgZXhlY2J1Zi5iYXRjaF9sZW4pOworCisJaTkxNV9leGVjYnVmZmVyMl9zZXRfY29udGV4 dF9pZChleGVjYnVmLCBjdHhfaWQpOworCisJZXhlY2J1Zi5mbGFncyA9IEk5MTVfRVhFQ19TRUNV UkUgfCBlbmdpbmVfaWQ7CisKKwlnZW1fZXhlY2J1ZihmZCwgJmV4ZWNidWYpOworCWdlbV93YWl0 KGZkLCBkc3RfaGFuZGxlLCAmdGltZW91dF9ucyk7CisJZ2VtX2Nsb3NlKGZkLCBoYW5kbGUpOwor fQorCisjZGVmaW5lIExPQ0FMX01JX0xPQURfUkVHSVNURVJfSU1NCSgweDIyIDw8IDIzKQorCitz dGF0aWMgaW50IGNyZWF0ZV93cml0ZV9iYXRjaCh1aW50MzJfdCAqYmF0Y2gsCisJCQkgICAgICBj b25zdCB1aW50MzJfdCAqdmFsdWVzLAorCQkJICAgICAgdWludDMyX3Qgc2l6ZSwKKwkJCSAgICAg IHVpbnQzMl90IHJlZ19iYXNlKQoreworCXVuc2lnbmVkIGludCBpOworCXVuc2lnbmVkIGludCBv ZmZzZXQgPSAwOworCisJYmF0Y2hbb2Zmc2V0KytdID0gTE9DQUxfTUlfTE9BRF9SRUdJU1RFUl9J TU0gfCAoc2l6ZSAqIDIgLSAxKTsKKworCWZvciAoaSA9IDA7IGkgPCBzaXplOyBpKyspIHsKKwkJ YmF0Y2hbb2Zmc2V0KytdID0gcmVnX2Jhc2UgKyAoaSAqIDQpOworCQliYXRjaFtvZmZzZXQrK10g PSB2YWx1ZXNbaV07CisJfQorCisJYmF0Y2hbb2Zmc2V0KytdID0gMDsKKwliYXRjaFtvZmZzZXQr K10gPSBNSV9CQVRDSF9CVUZGRVJfRU5EOworCWJhdGNoW29mZnNldCsrXSA9IDA7CisKKwlyZXR1 cm4gb2Zmc2V0ICogc2l6ZW9mKHVpbnQzMl90KTsKK30KKworc3RhdGljIHZvaWQgd3JpdGVfcmVn aXN0ZXJzKGludCBmZCwKKwkJCSAgICB1aW50MzJfdCBjdHhfaWQsCisJCQkgICAgdWludDMyX3Qg cmVnX2Jhc2UsCisJCQkgICAgY29uc3QgdWludDMyX3QgKnZhbHVlcywKKwkJCSAgICB1aW50MzJf dCBzaXplLAorCQkJICAgIHVpbnQzMl90IGVuZ2luZV9pZCkKK3sKKwlzdHJ1Y3QgZHJtX2k5MTVf Z2VtX2V4ZWNfb2JqZWN0MiBnZW1fZXhlYzsKKwlzdHJ1Y3QgZHJtX2k5MTVfZ2VtX2V4ZWNidWZm ZXIyIGV4ZWNidWY7CisJdWludDMyX3QgYmF0Y2hbTUFYX05VTUJFUl9NT0NTX1JFR0lTVEVSUyAq IDQgKyA0XTsKKwl1aW50MzJfdCBoYW5kbGUgPSBnZW1fY3JlYXRlKGZkLCA0MDk2KTsKKworCW1l bXNldCgmZ2VtX2V4ZWMsIDAsIHNpemVvZihnZW1fZXhlYykpOworCW1lbXNldCgmZXhlY2J1Ziwg MCwgc2l6ZW9mKGV4ZWNidWYpKTsKKworCWdlbV9leGVjLmhhbmRsZSA9IGhhbmRsZTsKKworCWV4 ZWNidWYuYnVmZmVyc19wdHIgPSAodWludHB0cl90KSZnZW1fZXhlYzsKKwlleGVjYnVmLmJ1ZmZl cl9jb3VudCA9IDE7CisJZXhlY2J1Zi5iYXRjaF9sZW4gPSBjcmVhdGVfd3JpdGVfYmF0Y2goYmF0 Y2gsIHZhbHVlcywgc2l6ZSwgcmVnX2Jhc2UpOworCisJZ2VtX3dyaXRlKGZkLCBoYW5kbGUsIDAs IGJhdGNoLCBleGVjYnVmLmJhdGNoX2xlbik7CisKKwlpZiAoY3R4X2lkICE9IDApCisJCWk5MTVf ZXhlY2J1ZmZlcjJfc2V0X2NvbnRleHRfaWQoZXhlY2J1ZiwgY3R4X2lkKTsKKworCWV4ZWNidWYu ZmxhZ3MgPSBJOTE1X0VYRUNfU0VDVVJFIHwgZW5naW5lX2lkOworCisJZ2VtX2V4ZWNidWYoZmQs ICZleGVjYnVmKTsKKwlnZW1fY2xvc2UoZmQsIGhhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNo ZWNrX2NvbnRyb2xfcmVnaXN0ZXJzKGludCBmZCwKKwkJCQkgICAgY29uc3Qgc3RydWN0IGludGVs X2V4ZWN1dGlvbl9lbmdpbmUgKmVuZ2luZSwKKwkJCQkgICAgdWludDMyX3QgY3R4X2lkLAorCQkJ CSAgICBib29sIGRpcnR5KQoreworCXVpbnQzMl90IGRzdF9oYW5kbGUgPSBnZW1fY3JlYXRlKGZk LCA0MDk2KTsKKwl1aW50MzJfdCByZWdfYmFzZSAgPSBnZXRfZW5naW5lX2Jhc2UoZW5naW5lLT5l eGVjX2lkIHwgZW5naW5lLT5mbGFncyk7CisJdWludDMyX3QgKnJlYWRfcmVnczsKKwlzdHJ1Y3Qg bW9jc190YWJsZSB0YWJsZTsKKworCWlndF9hc3NlcnQoZ2V0X21vY3Nfc2V0dGluZ3MoaW50ZWxf Z2V0X2RybV9kZXZpZChmZCksICZ0YWJsZSwgZGlydHkpKTsKKworCWRvX3JlYWRfcmVnaXN0ZXJz KGZkLAorCQkJICBjdHhfaWQsCisJCQkgIGRzdF9oYW5kbGUsCisJCQkgIHJlZ19iYXNlLAorCQkJ ICB0YWJsZS5zaXplLAorCQkJICBlbmdpbmUtPmV4ZWNfaWQgfCBlbmdpbmUtPmZsYWdzKTsKKwor CXJlYWRfcmVncyA9IGdlbV9tbWFwX19jcHUoZmQsIGRzdF9oYW5kbGUsIDAsIDQwOTYsIFBST1Rf UkVBRCk7CisKKwlmb3IgKGludCBpbmRleCA9IDA7IGluZGV4IDwgdGFibGUuc2l6ZTsgaW5kZXgr KykKKwkJaWd0X2Fzc2VydF9lcShyZWFkX3JlZ3NbaW5kZXhdLAorCQkJCXRhYmxlLnRhYmxlW2lu ZGV4XS5jb250cm9sX3ZhbHVlKTsKKworCW11bm1hcChyZWFkX3JlZ3MsIDQwOTYpOworCWdlbV9j bG9zZShmZCwgZHN0X2hhbmRsZSk7Cit9CisKK3N0YXRpYyB2b2lkIGNoZWNrX2wzY2NfcmVnaXN0 ZXJzKGludCBmZCwKKwkJCQkgY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUgKmVu Z2luZSwKKwkJCQkgdWludDMyX3QgY3R4X2lkLAorCQkJCSBib29sIGRpcnR5KQoreworCXN0cnVj dCBtb2NzX3RhYmxlIHRhYmxlOworCXVpbnQzMl90IGRzdF9oYW5kbGUgPSBnZW1fY3JlYXRlKGZk LCA0MDk2KTsKKwl1aW50MzJfdCAqcmVhZF9yZWdzOworCWludCBpbmRleDsKKworCWlndF9hc3Nl cnQoZ2V0X21vY3Nfc2V0dGluZ3MoaW50ZWxfZ2V0X2RybV9kZXZpZChmZCksICZ0YWJsZSwgZGly dHkpKTsKKworCWRvX3JlYWRfcmVnaXN0ZXJzKGZkLAorCQkJICBjdHhfaWQsCisJCQkgIGRzdF9o YW5kbGUsCisJCQkgIEdFTjlfTE5DRkNNT0NTMCwKKwkJCSAgKHRhYmxlLnNpemUgKyAxKSAvIDIs CisJCQkgIGVuZ2luZS0+ZXhlY19pZCB8IGVuZ2luZS0+ZmxhZ3MpOworCisJcmVhZF9yZWdzID0g Z2VtX21tYXBfX2NwdShmZCwgZHN0X2hhbmRsZSwgMCwgNDA5NiwgUFJPVF9SRUFEKTsKKworCWZv ciAoaW5kZXggPSAwOyBpbmRleCA8IHRhYmxlLnNpemUgLyAyOyBpbmRleCsrKSB7CisJCWlndF9h c3NlcnRfZXEocmVhZF9yZWdzW2luZGV4XSAmIDB4ZmZmZiwKKwkJCQl0YWJsZS50YWJsZVtpbmRl eCAqIDJdLmwzY2NfdmFsdWUpOworCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfcmVnc1tpbmRleF0gPj4g MTYsCisJCQkJdGFibGUudGFibGVbaW5kZXggKiAyICsgMV0ubDNjY192YWx1ZSk7CisJfQorCisJ aWYgKHRhYmxlLnNpemUgJiAweDAxKQorCQlpZ3RfYXNzZXJ0X2VxKHJlYWRfcmVnc1tpbmRleF0g JiAweGZmZmYsCisJCQkJdGFibGUudGFibGVbaW5kZXggKiAyXS5sM2NjX3ZhbHVlKTsKKworCW11 bm1hcChyZWFkX3JlZ3MsIDQwOTYpOworCWdlbV9jbG9zZShmZCwgZHN0X2hhbmRsZSk7Cit9CisK K3N0YXRpYyB2b2lkIHRlc3RfY29udGV4dF9tb2NzX3ZhbHVlcyhpbnQgZmQsCisJCQkJY29uc3Qg c3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUgKmVuZ2luZSwKKwkJCQlib29sIHVzZV9kZWZh dWx0KQoreworCXVpbnQzMl90IGN0eF9pZCA9IDA7CisKKwlpZiAoIXVzZV9kZWZhdWx0KQorCQlj dHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOworCisJY2hlY2tfY29udHJvbF9yZWdpc3Rl cnMoZmQsIGVuZ2luZSwgY3R4X2lkLCBmYWxzZSk7CisJY2hlY2tfbDNjY19yZWdpc3RlcnMoZmQs IGVuZ2luZSwgY3R4X2lkLCBmYWxzZSk7CisKKwlpZiAoIXVzZV9kZWZhdWx0KQorCQlnZW1fY29u dGV4dF9kZXN0cm95KGZkLCBjdHhfaWQpOworfQorCitzdGF0aWMgdm9pZCBub25fY29udGV4dF90 ZXN0cyh1bnNpZ25lZCBtb2RlKQoreworCWludCBmZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIo RFJJVkVSX0lOVEVMKTsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZSAqZTsK KworCWlndF9kZWJ1ZygiVGVzdGluZyBOb24vRGVmYXVsdCBDb250ZXh0IEVuZ2luZXNcbiIpOwor CisJZ2VtX2hhc19tb2NzKGZkKTsKKworCXRlc3RfbW9jc192YWx1ZXMoZmQpOworCisJc3dpdGNo KG1vZGUpIHsKKwljYXNlIE5PTkU6CWJyZWFrOworCWNhc2UgUkVTRVQ6CWlndF9mb3JjZV9ncHVf cmVzZXQoKTsJYnJlYWs7CisJY2FzZSBTVVNQRU5EOglpZ3Rfc3lzdGVtX3N1c3BlbmRfYXV0b3Jl c3VtZSgpOyBicmVhazsKKwljYXNlIEhJQkVSTkFURToJaWd0X3N5c3RlbV9oaWJlcm5hdGVfYXV0 b3Jlc3VtZSgpOyBicmVhazsKKwl9OworCisJZm9yIChlID0gaW50ZWxfZXhlY3V0aW9uX2VuZ2lu ZXM7IGUtPm5hbWU7IGUrKykKKworCQlpZiAoZS0+ZXhlY19pZCAhPSBJOTE1X0VYRUNfREVGQVVM VCAmJgorCQkgICAgZ2VtX2hhc19yaW5nKGZkLCBlLT5leGVjX2lkIHwgZS0+ZmxhZ3MpKSB7CisJ CQlpZ3RfZGVidWcoIiAgICBFbmdpbmU6ICVzXG4iLCBlLT5uYW1lKTsKKwkJCXRlc3RfY29udGV4 dF9tb2NzX3ZhbHVlcyhmZCwgZSwgdHJ1ZSk7CisJCX0KKworCXRlc3RfbW9jc192YWx1ZXMoZmQp OworCWNsb3NlKGZkKTsKK30KKworc3RhdGljIHZvaWQgY29udGV4dF9zYXZlX3Jlc3RvcmVfdGVz dCh1bnNpZ25lZCBtb2RlKQoreworCWludCBmZCA9IGRybV9vcGVuX2RyaXZlcl9tYXN0ZXIoRFJJ VkVSX0lOVEVMKTsKKwljb25zdCBzdHJ1Y3QgaW50ZWxfZXhlY3V0aW9uX2VuZ2luZSAqZTsKKwl1 aW50MzJfdCBjdHhfaWQgPSBnZW1fY29udGV4dF9jcmVhdGUoZmQpOworCisJZ2VtX2hhc19tb2Nz KGZkKTsKKworCWlndF9kZWJ1ZygiVGVzdGluZyBTYXZlIFJlc3RvcmVcbiIpOworCisJZm9yIChl ID0gaW50ZWxfZXhlY3V0aW9uX2VuZ2luZXM7IGUtPm5hbWU7IGUrKykKKwkJaWYgKGUtPmV4ZWNf aWQgPT0gSTkxNV9FWEVDX1JFTkRFUikgeworCQkJY2hlY2tfY29udHJvbF9yZWdpc3RlcnMoZmQs IGUsIGN0eF9pZCwgZmFsc2UpOworCQkJY2hlY2tfbDNjY19yZWdpc3RlcnMoZmQsIGUsIGN0eF9p ZCwgZmFsc2UpOworCQl9CisKKwlzd2l0Y2gobW9kZSkgeworCWNhc2UgTk9ORToJYnJlYWs7CisJ Y2FzZSBSRVNFVDoJaWd0X2ZvcmNlX2dwdV9yZXNldCgpOwlicmVhazsKKwljYXNlIFNVU1BFTkQ6 CWlndF9zeXN0ZW1fc3VzcGVuZF9hdXRvcmVzdW1lKCk7IGJyZWFrOworCWNhc2UgSElCRVJOQVRF OglpZ3Rfc3lzdGVtX2hpYmVybmF0ZV9hdXRvcmVzdW1lKCk7IGJyZWFrOworCX07CisKKwlmb3Ig KGUgPSBpbnRlbF9leGVjdXRpb25fZW5naW5lczsgZS0+bmFtZTsgZSsrKQorCQlpZiAoZS0+ZXhl Y19pZCA9PSBJOTE1X0VYRUNfUkVOREVSKSB7CisJCQljaGVja19jb250cm9sX3JlZ2lzdGVycyhm ZCwgZSwgY3R4X2lkLCBmYWxzZSk7CisJCQljaGVja19sM2NjX3JlZ2lzdGVycyhmZCwgZSwgY3R4 X2lkLCBmYWxzZSk7CisJCX0KKworCWdlbV9jb250ZXh0X2Rlc3Ryb3koZmQsIGN0eF9pZCk7CisJ Y2xvc2UoZmQpOworfQorCitzdGF0aWMgdm9pZCBjb250ZXh0X2RpcnR5X3Rlc3QodW5zaWduZWQg bW9kZSkKK3sKKwlpbnQgZmQgPSBkcm1fb3Blbl9kcml2ZXJfbWFzdGVyKERSSVZFUl9JTlRFTCk7 CisJY29uc3Qgc3RydWN0IGludGVsX2V4ZWN1dGlvbl9lbmdpbmUgKmU7CisJdWludDMyX3QgY3R4 X2lkID0gZ2VtX2NvbnRleHRfY3JlYXRlKGZkKTsKKworCWdlbV9oYXNfbW9jcyhmZCk7CisKKwlp Z3RfZGVidWcoIlRlc3RpbmcgRGlydHkgQ29udGV4dFxuIik7CisKKwlmb3IgKGUgPSBpbnRlbF9l eGVjdXRpb25fZW5naW5lczsgZS0+bmFtZTsgZSsrKQorCQlpZiAoZS0+ZXhlY19pZCA9PSBJOTE1 X0VYRUNfUkVOREVSKSB7CisJCQljaGVja19jb250cm9sX3JlZ2lzdGVycyhmZCwgZSwgY3R4X2lk LCBmYWxzZSk7CisJCQljaGVja19sM2NjX3JlZ2lzdGVycyhmZCwgZSwgY3R4X2lkLCBmYWxzZSk7 CisJCX0KKworCXdyaXRlX3JlZ2lzdGVycyhmZCwKKwkJCWN0eF9pZCwKKwkJCUdFTjlfR0ZYX01P Q1NfMCwKKwkJCXdyaXRlX3ZhbHVlcywKKwkJCUFSUkFZX1NJWkUod3JpdGVfdmFsdWVzKSwKKwkJ CUk5MTVfRVhFQ19SRU5ERVIpOworCisJd3JpdGVfcmVnaXN0ZXJzKGZkLAorCQkJY3R4X2lkLAor CQkJR0VOOV9MTkNGQ01PQ1MwLAorCQkJd3JpdGVfdmFsdWVzLAorCQkJQVJSQVlfU0laRSh3cml0 ZV92YWx1ZXMpLAorCQkJSTkxNV9FWEVDX1JFTkRFUik7CisKKwlmb3IgKGUgPSBpbnRlbF9leGVj dXRpb25fZW5naW5lczsgZS0+bmFtZTsgZSsrKQorCQlpZiAoZS0+ZXhlY19pZCA9PSBJOTE1X0VY RUNfUkVOREVSKSB7CisJCQljaGVja19jb250cm9sX3JlZ2lzdGVycyhmZCwgZSwgY3R4X2lkLCB0 cnVlKTsKKwkJCWNoZWNrX2wzY2NfcmVnaXN0ZXJzKGZkLCBlLCBjdHhfaWQsIHRydWUpOworCQl9 CisKKwlzd2l0Y2gobW9kZSkgeworCWNhc2UgTk9ORToJYnJlYWs7CisJY2FzZSBSRVNFVDoJaWd0 X2ZvcmNlX2dwdV9yZXNldCgpOwlicmVhazsKKwljYXNlIFNVU1BFTkQ6CWlndF9zeXN0ZW1fc3Vz cGVuZF9hdXRvcmVzdW1lKCk7IGJyZWFrOworCWNhc2UgSElCRVJOQVRFOglpZ3Rfc3lzdGVtX2hp YmVybmF0ZV9hdXRvcmVzdW1lKCk7IGJyZWFrOworCX07CisKKwlmb3IgKGUgPSBpbnRlbF9leGVj dXRpb25fZW5naW5lczsgZS0+bmFtZTsgZSsrKQorCQlpZiAoZS0+ZXhlY19pZCA9PSBJOTE1X0VY RUNfUkVOREVSKSB7CisJCQljaGVja19jb250cm9sX3JlZ2lzdGVycyhmZCwgZSwgY3R4X2lkLCB0 cnVlKTsKKwkJCWNoZWNrX2wzY2NfcmVnaXN0ZXJzKGZkLCBlLCBjdHhfaWQsIHRydWUpOworCQl9 CisKKwlnZW1fY29udGV4dF9kZXN0cm95KGZkLCBjdHhfaWQpOworCWNsb3NlKGZkKTsKKworCWZk ID0gZHJtX29wZW5fZHJpdmVyX21hc3RlcihEUklWRVJfSU5URUwpOworCisJZm9yIChlID0gaW50 ZWxfZXhlY3V0aW9uX2VuZ2luZXM7IGUtPm5hbWU7IGUrKykKKwkJaWYgKGUtPmV4ZWNfaWQgPT0g STkxNV9FWEVDX1JFTkRFUikKKwkJCXRlc3RfY29udGV4dF9tb2NzX3ZhbHVlcyhmZCwgZSwgZmFs c2UpOworCisJY2xvc2UoZmQpOworfQorCitzdGF0aWMgdm9pZCBydW5fdGVzdHModW5zaWduZWQg bW9kZSkKK3sKKwlub25fY29udGV4dF90ZXN0cyhtb2RlKTsKKwljb250ZXh0X3NhdmVfcmVzdG9y ZV90ZXN0KG1vZGUpOworCWNvbnRleHRfZGlydHlfdGVzdChtb2RlKTsKK30KKworaWd0X21haW4K K3sKKwlzdHJ1Y3QgcGNpX2RldmljZSAqcGNpX2RldjsKKworCWlndF9maXh0dXJlIHsKKwkJcGNp X2RldiA9IGludGVsX2dldF9wY2lfZGV2aWNlKCk7CisJCWlndF9yZXF1aXJlKHBjaV9kZXYpOwor CQlpbnRlbF9yZWdpc3Rlcl9hY2Nlc3NfaW5pdChwY2lfZGV2LCAwKTsKKwl9CisKKwlpZ3Rfc3Vi dGVzdCgibW9jcy1zZXR0aW5ncyIpCisJCXJ1bl90ZXN0cyhOT05FKTsKKworCWlndF9zdWJ0ZXN0 KCJtb2NzLXJlc2V0IikKKwkJcnVuX3Rlc3RzKFJFU0VUKTsKKworCWlndF9zdWJ0ZXN0KCJtb2Nz LXN1c3BlbmQiKQorCQlydW5fdGVzdHMoU1VTUEVORCk7CisKKwlpZ3Rfc3VidGVzdCgibW9jcy1o aWJlcm5hdGUiKQorCQlydW5fdGVzdHMoSElCRVJOQVRFKTsKKworCWlndF9maXh0dXJlIHsKKwkJ aW50ZWxfcmVnaXN0ZXJfYWNjZXNzX2ZpbmkoKTsKKwl9Cit9CisKLS0gCjEuOS4xCgpfX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpJbnRlbC1nZnggbWFpbGlu ZyBsaXN0CkludGVsLWdmeEBsaXN0cy5mcmVlZGVza3RvcC5vcmcKaHR0cHM6Ly9saXN0cy5mcmVl ZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0aW5mby9pbnRlbC1nZngK