From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH libdrm 09/11] tests: Add libkms-test library Date: Fri, 23 Jan 2015 17:08:22 +0100 Message-ID: <1422029304-1926-10-git-send-email-thierry.reding@gmail.com> References: <1422029304-1926-1-git-send-email-thierry.reding@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-pa0-f48.google.com (mail-pa0-f48.google.com [209.85.220.48]) by gabe.freedesktop.org (Postfix) with ESMTP id 3304B6E951 for ; Fri, 23 Jan 2015 08:09:10 -0800 (PST) Received: by mail-pa0-f48.google.com with SMTP id ey11so9426964pad.7 for ; Fri, 23 Jan 2015 08:09:10 -0800 (PST) In-Reply-To: <1422029304-1926-1-git-send-email-thierry.reding@gmail.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: dri-devel-bounces@lists.freedesktop.org Sender: "dri-devel" To: dri-devel@lists.freedesktop.org Cc: Laurent Pinchart List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KClRoaXMgbGlicmFyeSBj b250YWlucyBhYnN0cmFjdGlvbnMgZm9yIEtNUyB0aGF0IGhlbHAgcmVtb3ZlIHRoZSBuZWVkIGZv cgphIGxvdCBvZiBib2lsZXJwbGF0ZSBpbiBLTVMgdGVzdCBwcm9ncmFtcy4KClNpZ25lZC1vZmYt Ynk6IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+Ci0tLQogY29uZmlndXJlLmFj ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogdGVzdHMvTWFrZWZpbGUuYW0gICAgICAg ICAgICAgICAgICAgfCAgIDIgKy0KIHRlc3RzL2ttcy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAg IHwgIDE5ICsrKysKIHRlc3RzL2ttcy9saWJrbXMtdGVzdC1jcnRjLmMgICAgICAgIHwgIDQ3ICsr KysrKysrCiB0ZXN0cy9rbXMvbGlia21zLXRlc3QtZGV2aWNlLmMgICAgICB8IDIxOCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL2ttcy9saWJrbXMtdGVzdC1mcmFt ZWJ1ZmZlci5jIHwgMTU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9rbXMvbGli a21zLXRlc3QtcGxhbmUuYyAgICAgICB8IDEzOSArKysrKysrKysrKysrKysrKysrKysrKwogdGVz dHMva21zL2xpYmttcy10ZXN0LXNjcmVlbi5jICAgICAgfCAgOTIgKysrKysrKysrKysrKysrCiB0 ZXN0cy9rbXMvbGlia21zLXRlc3QuaCAgICAgICAgICAgICB8IDEyMCArKysrKysrKysrKysrKysr KysrKwogOSBmaWxlcyBjaGFuZ2VkLCA3OTQgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttcy9NYWtlZmlsZS5hbQogY3JlYXRlIG1vZGUgMTAw NjQ0IHRlc3RzL2ttcy9saWJrbXMtdGVzdC1jcnRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0 cy9rbXMvbGlia21zLXRlc3QtZGV2aWNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXMv bGlia21zLXRlc3QtZnJhbWVidWZmZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttcy9s aWJrbXMtdGVzdC1wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zL2xpYmttcy10 ZXN0LXNjcmVlbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zL2xpYmttcy10ZXN0LmgK CmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggNTg0MTFiNzli NjgyLi4wYTZjNDE0YmY5ZWIgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1 cmUuYWMKQEAgLTQzNSw2ICs0MzUsNyBAQCBBQ19DT05GSUdfRklMRVMoWwogCXRlc3RzL01ha2Vm aWxlCiAJdGVzdHMvbW9kZXByaW50L01ha2VmaWxlCiAJdGVzdHMvbW9kZXRlc3QvTWFrZWZpbGUK Kwl0ZXN0cy9rbXMvTWFrZWZpbGUKIAl0ZXN0cy9rbXN0ZXN0L01ha2VmaWxlCiAJdGVzdHMvcHJv cHRlc3QvTWFrZWZpbGUKIAl0ZXN0cy9yYWRlb24vTWFrZWZpbGUKZGlmZiAtLWdpdCBhL3Rlc3Rz L01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KaW5kZXggMzEwMDMyNzMyZjZlLi5lMTRj YzNkMjRhMjIgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKyBiL3Rlc3RzL01ha2Vm aWxlLmFtCkBAIC0xMCw3ICsxMCw3IEBAIGNoZWNrX1BST0dSQU1TID0gXAogCWRyaXN0YXQgXAog CWRybXN0YXQKIAotU1VCRElSUyA9IHV0aWwgbW9kZXByaW50IHByb3B0ZXN0CitTVUJESVJTID0g dXRpbCBrbXMgbW9kZXByaW50IHByb3B0ZXN0CiAKIGlmIEhBVkVfTElCS01TCiBTVUJESVJTICs9 IGttc3Rlc3QgbW9kZXRlc3QKZGlmZiAtLWdpdCBhL3Rlc3RzL2ttcy9NYWtlZmlsZS5hbSBiL3Rl c3RzL2ttcy9NYWtlZmlsZS5hbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw MDAuLmM4NGJhZTA1ZDg2OQotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ttcy9NYWtlZmlsZS5h bQpAQCAtMCwwICsxLDE5IEBACitBTV9DUFBGTEFHUyA9IFwKKwktSSQodG9wX3NyY2RpcikvaW5j bHVkZS9kcm0gXAorCS1JJCh0b3Bfc3JjZGlyKS90ZXN0cyBcCisJLUkkKHRvcF9zcmNkaXIpCisK K0FNX0NGTEFHUyA9IFwKKwkkKFdBUk5fQ0ZMQUdTKQorCitub2luc3RfTFRMSUJSQVJJRVMgPSBs aWJrbXMtdGVzdC5sYQorCitsaWJrbXNfdGVzdF9sYV9TT1VSQ0VTID0gXAorCWxpYmttcy10ZXN0 LWNydGMuYyBcCisJbGlia21zLXRlc3QtZGV2aWNlLmMgXAorCWxpYmttcy10ZXN0LWZyYW1lYnVm ZmVyLmMgXAorCWxpYmttcy10ZXN0LXBsYW5lLmMgXAorCWxpYmttcy10ZXN0LXNjcmVlbi5jCisK K2xpYmttc190ZXN0X2xhX0xJQkFERCA9IFwKKwkkKHRvcF9idWlsZGRpcikvbGliZHJtLmxhCmRp ZmYgLS1naXQgYS90ZXN0cy9rbXMvbGlia21zLXRlc3QtY3J0Yy5jIGIvdGVzdHMva21zL2xpYmtt cy10ZXN0LWNydGMuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjNh ZGI0OTAzOTE5ZgotLS0gL2Rldi9udWxsCisrKyBiL3Rlc3RzL2ttcy9saWJrbXMtdGVzdC1jcnRj LmMKQEAgLTAsMCArMSw0NyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IE5WSURJQSBDb3Jw b3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hh cmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUg YW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICog dG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdp dGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVy Z2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3Bp ZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAq IFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5n IGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMg cGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFs bCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRo ZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIs IFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElO Q0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM SVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdF TUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9M REVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklM SVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0Us IEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRX QVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAq LworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisK KyNpbmNsdWRlICJsaWJrbXMtdGVzdC5oIgorCitzdHJ1Y3Qga21zX2NydGMgKmttc19jcnRjX2Ny ZWF0ZShzdHJ1Y3Qga21zX2RldmljZSAqZGV2aWNlLCB1aW50MzJfdCBpZCkKK3sKKwlzdHJ1Y3Qg a21zX2NydGMgKmNydGM7CisKKwljcnRjID0gY2FsbG9jKDEsIHNpemVvZigqY3J0YykpOworCWlm ICghY3J0YykKKwkJcmV0dXJuIE5VTEw7CisKKwljcnRjLT5kZXZpY2UgPSBkZXZpY2U7CisJY3J0 Yy0+aWQgPSBpZDsKKworCXJldHVybiBjcnRjOworfQorCit2b2lkIGttc19jcnRjX2ZyZWUoc3Ry dWN0IGttc19jcnRjICpjcnRjKQoreworCWZyZWUoY3J0Yyk7Cit9CmRpZmYgLS1naXQgYS90ZXN0 cy9rbXMvbGlia21zLXRlc3QtZGV2aWNlLmMgYi90ZXN0cy9rbXMvbGlia21zLXRlc3QtZGV2aWNl LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi41M2M3MzQ5Yjg5YWIK LS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9rbXMvbGlia21zLXRlc3QtZGV2aWNlLmMKQEAgLTAs MCArMSwyMTggQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNCBOVklESUEgQ29ycG9yYXRpb24K KyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8g YW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3Nv Y2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwg aW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxp bWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJs aXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRo ZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2Fy ZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRp b25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Np b24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5j bHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNv ZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VU IFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcg QlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAq IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJ TiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUg TElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hF VEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5H CisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBU SEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lm ZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVk ZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDx1bmlzdGQuaD4KKwor I2luY2x1ZGUgInV0aWwvY29tbW9uLmgiCisjaW5jbHVkZSAibGlia21zLXRlc3QuaCIKKworc3Rh dGljIGNvbnN0IGNoYXIgKmNvbnN0IGNvbm5lY3Rvcl9uYW1lc1tdID0geworCSJVbmtub3duIiwK KwkiVkdBIiwKKwkiRFZJLUkiLAorCSJEVkktRCIsCisJIkRWSS1BIiwKKwkiQ29tcG9zaXRlIiwK KwkiU1ZJREVPIiwKKwkiTFZEUyIsCisJIkNvbXBvbmVudCIsCisJIjlQaW5ESU4iLAorCSJEaXNw bGF5UG9ydCIsCisJIkhETUktQSIsCisJIkhETUktQiIsCisJIlRWIiwKKwkiZURQIiwKKwkiVmly dHVhbCIsCisJIkRTSSIsCit9OworCitzdGF0aWMgdm9pZCBrbXNfZGV2aWNlX3Byb2JlX3NjcmVl bnMoc3RydWN0IGttc19kZXZpY2UgKmRldmljZSkKK3sKKwl1bnNpZ25lZCBpbnQgY291bnRzW0FS UkFZX1NJWkUoY29ubmVjdG9yX25hbWVzKV07CisJc3RydWN0IGttc19zY3JlZW4gKnNjcmVlbjsK Kwlkcm1Nb2RlUmVzICpyZXM7CisJaW50IGk7CisKKwltZW1zZXQoY291bnRzLCAwLCBzaXplb2Yo Y291bnRzKSk7CisKKwlyZXMgPSBkcm1Nb2RlR2V0UmVzb3VyY2VzKGRldmljZS0+ZmQpOworCWlm ICghcmVzKQorCQlyZXR1cm47CisKKwlkZXZpY2UtPnNjcmVlbnMgPSBjYWxsb2MocmVzLT5jb3Vu dF9jb25uZWN0b3JzLCBzaXplb2Yoc2NyZWVuKSk7CisJaWYgKCFkZXZpY2UtPnNjcmVlbnMpCisJ CXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCByZXMtPmNvdW50X2Nvbm5lY3RvcnM7IGkrKykg eworCQl1bnNpZ25lZCBpbnQgKmNvdW50OworCQljb25zdCBjaGFyICp0eXBlOworCQlpbnQgbGVu OworCisJCXNjcmVlbiA9IGttc19zY3JlZW5fY3JlYXRlKGRldmljZSwgcmVzLT5jb25uZWN0b3Jz W2ldKTsKKwkJaWYgKCFzY3JlZW4pCisJCQljb250aW51ZTsKKworCQkvKiBhc3NpZ24gYSB1bmlx dWUgbmFtZSB0byB0aGlzIHNjcmVlbiAqLworCQl0eXBlID0gY29ubmVjdG9yX25hbWVzW3NjcmVl bi0+dHlwZV07CisJCWNvdW50ID0gJmNvdW50c1tzY3JlZW4tPnR5cGVdOworCisJCWxlbiA9IHNu cHJpbnRmKE5VTEwsIDAsICIlcy0ldSIsIHR5cGUsICpjb3VudCk7CisKKwkJc2NyZWVuLT5uYW1l ID0gbWFsbG9jKGxlbiArIDEpOworCQlpZiAoIXNjcmVlbi0+bmFtZSkgeworCQkJZnJlZShzY3Jl ZW4pOworCQkJY29udGludWU7CisJCX0KKworCQlzbnByaW50ZihzY3JlZW4tPm5hbWUsIGxlbiAr IDEsICIlcy0ldSIsIHR5cGUsICpjb3VudCk7CisJCSgqY291bnQpKys7CisKKwkJZGV2aWNlLT5z Y3JlZW5zW2ldID0gc2NyZWVuOworCQlkZXZpY2UtPm51bV9zY3JlZW5zKys7CisJfQorCisJZHJt TW9kZUZyZWVSZXNvdXJjZXMocmVzKTsKK30KKworc3RhdGljIHZvaWQga21zX2RldmljZV9wcm9i ZV9jcnRjcyhzdHJ1Y3Qga21zX2RldmljZSAqZGV2aWNlKQoreworCXN0cnVjdCBrbXNfY3J0YyAq Y3J0YzsKKwlkcm1Nb2RlUmVzICpyZXM7CisJaW50IGk7CisKKwlyZXMgPSBkcm1Nb2RlR2V0UmVz b3VyY2VzKGRldmljZS0+ZmQpOworCWlmICghcmVzKQorCQlyZXR1cm47CisKKwlkZXZpY2UtPmNy dGNzID0gY2FsbG9jKHJlcy0+Y291bnRfY3J0Y3MsIHNpemVvZihjcnRjKSk7CisJaWYgKCFkZXZp Y2UtPmNydGNzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVzLT5jb3VudF9jcnRj czsgaSsrKSB7CisJCWNydGMgPSBrbXNfY3J0Y19jcmVhdGUoZGV2aWNlLCByZXMtPmNydGNzW2ld KTsKKwkJaWYgKCFjcnRjKQorCQkJY29udGludWU7CisKKwkJZGV2aWNlLT5jcnRjc1tpXSA9IGNy dGM7CisJCWRldmljZS0+bnVtX2NydGNzKys7CisJfQorCisJZHJtTW9kZUZyZWVSZXNvdXJjZXMo cmVzKTsKK30KKworc3RhdGljIHZvaWQga21zX2RldmljZV9wcm9iZV9wbGFuZXMoc3RydWN0IGtt c19kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3Qga21zX3BsYW5lICpwbGFuZTsKKwlkcm1Nb2Rl UGxhbmVSZXMgKnJlczsKKwl1bnNpZ25lZCBpbnQgaTsKKworCXJlcyA9IGRybU1vZGVHZXRQbGFu ZVJlc291cmNlcyhkZXZpY2UtPmZkKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuOworCisJZGV2aWNl LT5wbGFuZXMgPSBjYWxsb2MocmVzLT5jb3VudF9wbGFuZXMsIHNpemVvZihwbGFuZSkpOworCWlm ICghZGV2aWNlLT5wbGFuZXMpCisJCXJldHVybjsKKworCWZvciAoaSA9IDA7IGkgPCByZXMtPmNv dW50X3BsYW5lczsgaSsrKSB7CisJCXBsYW5lID0ga21zX3BsYW5lX2NyZWF0ZShkZXZpY2UsIHJl cy0+cGxhbmVzW2ldKTsKKwkJaWYgKCFwbGFuZSkKKwkJCWNvbnRpbnVlOworCisJCWRldmljZS0+ cGxhbmVzW2ldID0gcGxhbmU7CisJCWRldmljZS0+bnVtX3BsYW5lcysrOworCX0KKworCWRybU1v ZGVGcmVlUGxhbmVSZXNvdXJjZXMocmVzKTsKK30KKworc3RhdGljIHZvaWQga21zX2RldmljZV9w cm9iZShzdHJ1Y3Qga21zX2RldmljZSAqZGV2aWNlKQoreworCWttc19kZXZpY2VfcHJvYmVfc2Ny ZWVucyhkZXZpY2UpOworCWttc19kZXZpY2VfcHJvYmVfY3J0Y3MoZGV2aWNlKTsKKwlrbXNfZGV2 aWNlX3Byb2JlX3BsYW5lcyhkZXZpY2UpOworfQorCitzdHJ1Y3Qga21zX2RldmljZSAqa21zX2Rl dmljZV9vcGVuKGludCBmZCkKK3sKKwlzdHJ1Y3Qga21zX2RldmljZSAqZGV2aWNlOworCisJZGV2 aWNlID0gY2FsbG9jKDEsIHNpemVvZigqZGV2aWNlKSk7CisJaWYgKCFkZXZpY2UpCisJCXJldHVy biBOVUxMOworCisJZGV2aWNlLT5mZCA9IGZkOworCisJa21zX2RldmljZV9wcm9iZShkZXZpY2Up OworCisJcmV0dXJuIGRldmljZTsKK30KKwordm9pZCBrbXNfZGV2aWNlX2Nsb3NlKHN0cnVjdCBr bXNfZGV2aWNlICpkZXZpY2UpCit7CisJdW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBp IDwgZGV2aWNlLT5udW1fcGxhbmVzOyBpKyspCisJCWttc19wbGFuZV9mcmVlKGRldmljZS0+cGxh bmVzW2ldKTsKKworCWZyZWUoZGV2aWNlLT5wbGFuZXMpOworCisJZm9yIChpID0gMDsgaSA8IGRl dmljZS0+bnVtX2NydGNzOyBpKyspCisJCWttc19jcnRjX2ZyZWUoZGV2aWNlLT5jcnRjc1tpXSk7 CisKKwlmcmVlKGRldmljZS0+Y3J0Y3MpOworCisJZm9yIChpID0gMDsgaSA8IGRldmljZS0+bnVt X3NjcmVlbnM7IGkrKykKKwkJa21zX3NjcmVlbl9mcmVlKGRldmljZS0+c2NyZWVuc1tpXSk7CisK KwlmcmVlKGRldmljZS0+c2NyZWVucyk7CisKKwlpZiAoZGV2aWNlLT5mZCA+PSAwKQorCQljbG9z ZShkZXZpY2UtPmZkKTsKKworCWZyZWUoZGV2aWNlKTsKK30KKworc3RydWN0IGttc19wbGFuZSAq a21zX2RldmljZV9maW5kX3BsYW5lX2J5X3R5cGUoc3RydWN0IGttc19kZXZpY2UgKmRldmljZSwK KwkJCQkJCXVpbnQzMl90IHR5cGUsCisJCQkJCQl1bnNpZ25lZCBpbnQgaW5kZXgpCit7CisJdW5z aWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2aWNlLT5udW1fcGxhbmVzOyBpKysp IHsKKwkJaWYgKGRldmljZS0+cGxhbmVzW2ldLT50eXBlID09IHR5cGUpIHsKKwkJCWlmIChpbmRl eCA9PSAwKQorCQkJCXJldHVybiBkZXZpY2UtPnBsYW5lc1tpXTsKKworCQkJaW5kZXgtLTsKKwkJ fQorCX0KKworCXJldHVybiBOVUxMOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMva21zL2xpYmttcy10 ZXN0LWZyYW1lYnVmZmVyLmMgYi90ZXN0cy9rbXMvbGlia21zLXRlc3QtZnJhbWVidWZmZXIuYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLmM5ZTVhZDNjMjUwZAotLS0g L2Rldi9udWxsCisrKyBiL3Rlc3RzL2ttcy9saWJrbXMtdGVzdC1mcmFtZWJ1ZmZlci5jCkBAIC0w LDAgKzEsMTU3IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgTlZJRElBIENvcnBvcmF0aW9u CisgKgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRv IGFueSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNz b2NpYXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFs IGluIHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBs aW1pdGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVi bGlzaCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0 aGUgU29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdh cmUgaXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0 aW9uczoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNz aW9uIG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGlu Y2x1ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBT b2Z0d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9V VCBXQVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5H IEJVVCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisg KiBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAg SU4gTk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJF IExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdI RVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lO RworICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1Ig VEhFIFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNp ZmRlZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1 ZGUgPGVycm5vLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlIDxzeXMvbW1hbi5o PgorCisjaW5jbHVkZSA8ZHJtX2ZvdXJjYy5oPgorCisjaW5jbHVkZSAieGY4NmRybS5oIgorCisj aW5jbHVkZSAibGlia21zLXRlc3QuaCIKKworc3RydWN0IGttc19mcmFtZWJ1ZmZlciAqa21zX2Zy YW1lYnVmZmVyX2NyZWF0ZShzdHJ1Y3Qga21zX2RldmljZSAqZGV2aWNlLAorCQkJCQkgICAgICAg dW5zaWduZWQgaW50IHdpZHRoLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGhlaWdodCwKKwkJ CQkJICAgICAgIHVpbnQzMl90IGZvcm1hdCkKK3sKKwl1aW50MzJfdCBoYW5kbGVzWzRdLCBwaXRj aGVzWzRdLCBvZmZzZXRzWzRdOworCXN0cnVjdCBkcm1fbW9kZV9jcmVhdGVfZHVtYiBhcmdzOwor CXN0cnVjdCBrbXNfZnJhbWVidWZmZXIgKmZiOworCWludCBlcnI7CisKKwlmYiA9IGNhbGxvYygx LCBzaXplb2YoKmZiKSk7CisJaWYgKCFmYikKKwkJcmV0dXJuIE5VTEw7CisKKwlmYi0+ZGV2aWNl ID0gZGV2aWNlOworCWZiLT53aWR0aCA9IHdpZHRoOworCWZiLT5oZWlnaHQgPSBoZWlnaHQ7CisJ ZmItPmZvcm1hdCA9IGZvcm1hdDsKKworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsK KwlhcmdzLndpZHRoID0gd2lkdGg7CisJYXJncy5oZWlnaHQgPSBoZWlnaHQ7CisKKwlzd2l0Y2gg KGZvcm1hdCkgeworCWNhc2UgRFJNX0ZPUk1BVF9YUkdCODg4ODoKKwljYXNlIERSTV9GT1JNQVRf WEJHUjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1JHQkE4ODg4OgorCQlhcmdzLmJwcCA9IDMyOwor CQlicmVhazsKKworCWRlZmF1bHQ6CisJCWZyZWUoZmIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisK KwllcnIgPSBkcm1Jb2N0bChkZXZpY2UtPmZkLCBEUk1fSU9DVExfTU9ERV9DUkVBVEVfRFVNQiwg JmFyZ3MpOworCWlmIChlcnIgPCAwKSB7CisJCWZyZWUoZmIpOworCQlyZXR1cm4gTlVMTDsKKwl9 CisKKwlmYi0+aGFuZGxlID0gYXJncy5oYW5kbGU7CisJZmItPnBpdGNoID0gYXJncy5waXRjaDsK KwlmYi0+c2l6ZSA9IGFyZ3Muc2l6ZTsKKworCWhhbmRsZXNbMF0gPSBmYi0+aGFuZGxlOworCXBp dGNoZXNbMF0gPSBmYi0+cGl0Y2g7CisJb2Zmc2V0c1swXSA9IDA7CisKKwllcnIgPSBkcm1Nb2Rl QWRkRkIyKGRldmljZS0+ZmQsIHdpZHRoLCBoZWlnaHQsIGZvcm1hdCwgaGFuZGxlcywKKwkJCSAg ICBwaXRjaGVzLCBvZmZzZXRzLCAmZmItPmlkLCAwKTsKKwlpZiAoZXJyIDwgMCkgeworCQlrbXNf ZnJhbWVidWZmZXJfZnJlZShmYik7CisJCXJldHVybiBOVUxMOworCX0KKworCXJldHVybiBmYjsK K30KKwordm9pZCBrbXNfZnJhbWVidWZmZXJfZnJlZShzdHJ1Y3Qga21zX2ZyYW1lYnVmZmVyICpm YikKK3sKKwlzdHJ1Y3Qga21zX2RldmljZSAqZGV2aWNlID0gZmItPmRldmljZTsKKwlzdHJ1Y3Qg ZHJtX21vZGVfZGVzdHJveV9kdW1iIGFyZ3M7CisJaW50IGVycjsKKworCWlmIChmYi0+aWQpIHsK KwkJZXJyID0gZHJtTW9kZVJtRkIoZGV2aWNlLT5mZCwgZmItPmlkKTsKKwkJaWYgKGVyciA8IDAp IHsKKwkJCS8qIG5vdCBtdWNoIHdlIGNhbiBkbyBub3cgKi8KKwkJfQorCX0KKworCW1lbXNldCgm YXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwlhcmdzLmhhbmRsZSA9IGZiLT5oYW5kbGU7CisKKwll cnIgPSBkcm1Jb2N0bChkZXZpY2UtPmZkLCBEUk1fSU9DVExfTU9ERV9ERVNUUk9ZX0RVTUIsICZh cmdzKTsKKwlpZiAoZXJyIDwgMCkgeworCQkvKiBub3QgbXVjaCB3ZSBjYW4gZG8gbm93ICovCisJ fQorCisJZnJlZShmYik7Cit9CisKK2ludCBrbXNfZnJhbWVidWZmZXJfbWFwKHN0cnVjdCBrbXNf ZnJhbWVidWZmZXIgKmZiLCB2b2lkICoqcHRycCkKK3sKKwlzdHJ1Y3Qga21zX2RldmljZSAqZGV2 aWNlID0gZmItPmRldmljZTsKKwlzdHJ1Y3QgZHJtX21vZGVfbWFwX2R1bWIgYXJnczsKKwl2b2lk ICpwdHI7CisJaW50IGVycjsKKworCWlmIChmYi0+cHRyKSB7CisJCSpwdHJwID0gZmItPnB0cjsK KwkJcmV0dXJuIDA7CisJfQorCisJbWVtc2V0KCZhcmdzLCAwLCBzaXplb2YoYXJncykpOworCWFy Z3MuaGFuZGxlID0gZmItPmhhbmRsZTsKKworCWVyciA9IGRybUlvY3RsKGRldmljZS0+ZmQsIERS TV9JT0NUTF9NT0RFX01BUF9EVU1CLCAmYXJncyk7CisJaWYgKGVyciA8IDApCisJCXJldHVybiAt ZXJybm87CisKKwlwdHIgPSBtbWFwKDAsIGZiLT5zaXplLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRF LCBNQVBfU0hBUkVELAorCQkgICBkZXZpY2UtPmZkLCBhcmdzLm9mZnNldCk7CisJaWYgKHB0ciA9 PSBNQVBfRkFJTEVEKQorCQlyZXR1cm4gLWVycm5vOworCisJKnB0cnAgPSBmYi0+cHRyID0gcHRy OworCisJcmV0dXJuIDA7Cit9CisKK3ZvaWQga21zX2ZyYW1lYnVmZmVyX3VubWFwKHN0cnVjdCBr bXNfZnJhbWVidWZmZXIgKmZiKQoreworCWlmIChmYi0+cHRyKSB7CisJCW11bm1hcChmYi0+cHRy LCBmYi0+c2l6ZSk7CisJCWZiLT5wdHIgPSBOVUxMOworCX0KK30KZGlmZiAtLWdpdCBhL3Rlc3Rz L2ttcy9saWJrbXMtdGVzdC1wbGFuZS5jIGIvdGVzdHMva21zL2xpYmttcy10ZXN0LXBsYW5lLmMK bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi44ZWI3OGFmMWRjYzcKLS0t IC9kZXYvbnVsbAorKysgYi90ZXN0cy9rbXMvbGlia21zLXRlc3QtcGxhbmUuYwpAQCAtMCwwICsx LDEzOSBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IE5WSURJQSBDb3Jwb3JhdGlvbgorICoK KyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkg cGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0 ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0 aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRh dGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gs IGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNv ZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlz IGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6 CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBu b3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRl ZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdh cmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FS UkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQg Tk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklU TkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5P IEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFC TEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVS IElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAq IEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBV U0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZkZWYg SEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxl cnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSAibGlia21zLXRlc3QuaCIK Kworc3RhdGljIGludCBrbXNfcGxhbmVfcHJvYmUoc3RydWN0IGttc19wbGFuZSAqcGxhbmUpCit7 CisJc3RydWN0IGttc19kZXZpY2UgKmRldmljZSA9IHBsYW5lLT5kZXZpY2U7CisJZHJtTW9kZU9i amVjdFByb3BlcnRpZXNQdHIgcHJvcHM7CisJZHJtTW9kZVBsYW5lICpwOworCXVuc2lnbmVkIGlu dCBpOworCisJcCA9IGRybU1vZGVHZXRQbGFuZShkZXZpY2UtPmZkLCBwbGFuZS0+aWQpOworCWlm ICghcCkKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwkvKiBUT0RPOiBhbGxvdyBkeW5hbWljIGFzc2ln bm1lbnQgdG8gQ1JUQ3MgKi8KKwlpZiAocC0+Y3J0Y19pZCA9PSAwKSB7CisJCWZvciAoaSA9IDA7 IGkgPCBkZXZpY2UtPm51bV9jcnRjczsgaSsrKSB7CisJCQlpZiAocC0+cG9zc2libGVfY3J0Y3Mg JiAoMSA8PCBpKSkgeworCQkJCXAtPmNydGNfaWQgPSBkZXZpY2UtPmNydGNzW2ldLT5pZDsKKwkJ CQlicmVhazsKKwkJCX0KKwkJfQorCX0KKworCWZvciAoaSA9IDA7IGkgPCBkZXZpY2UtPm51bV9j cnRjczsgaSsrKSB7CisJCWlmIChkZXZpY2UtPmNydGNzW2ldLT5pZCA9PSBwLT5jcnRjX2lkKSB7 CisJCQlwbGFuZS0+Y3J0YyA9IGRldmljZS0+Y3J0Y3NbaV07CisJCQlicmVhazsKKwkJfQorCX0K KworCXBsYW5lLT5mb3JtYXRzID0gY2FsbG9jKHAtPmNvdW50X2Zvcm1hdHMsIHNpemVvZih1aW50 MzJfdCkpOworCWlmICghcGxhbmUtPmZvcm1hdHMpCisJCXJldHVybiAtRU5PTUVNOworCisJZm9y IChpID0gMDsgaSA8IHAtPmNvdW50X2Zvcm1hdHM7IGkrKykKKwkJcGxhbmUtPmZvcm1hdHNbaV0g PSBwLT5mb3JtYXRzW2ldOworCisJcGxhbmUtPm51bV9mb3JtYXRzID0gcC0+Y291bnRfZm9ybWF0 czsKKworCWRybU1vZGVGcmVlUGxhbmUocCk7CisKKwlwcm9wcyA9IGRybU1vZGVPYmplY3RHZXRQ cm9wZXJ0aWVzKGRldmljZS0+ZmQsIHBsYW5lLT5pZCwKKwkJCQkJICAgRFJNX01PREVfT0JKRUNU X1BMQU5FKTsKKwlpZiAoIXByb3BzKQorCQlyZXR1cm4gLUVOT0RFVjsKKworCWZvciAoaSA9IDA7 IGkgPCBwcm9wcy0+Y291bnRfcHJvcHM7IGkrKykgeworCQlkcm1Nb2RlUHJvcGVydHlQdHIgcHJv cDsKKworCQlwcm9wID0gZHJtTW9kZUdldFByb3BlcnR5KGRldmljZS0+ZmQsIHByb3BzLT5wcm9w c1tpXSk7CisJCWlmIChwcm9wKSB7CisJCQlpZiAoc3RyY21wKHByb3AtPm5hbWUsICJ0eXBlIikg PT0gMCkKKwkJCQlwbGFuZS0+dHlwZSA9IHByb3BzLT5wcm9wX3ZhbHVlc1tpXTsKKworCQkJZHJt TW9kZUZyZWVQcm9wZXJ0eShwcm9wKTsKKwkJfQorCX0KKworCWRybU1vZGVGcmVlT2JqZWN0UHJv cGVydGllcyhwcm9wcyk7CisKKwlyZXR1cm4gMDsKK30KKworc3RydWN0IGttc19wbGFuZSAqa21z X3BsYW5lX2NyZWF0ZShzdHJ1Y3Qga21zX2RldmljZSAqZGV2aWNlLCB1aW50MzJfdCBpZCkKK3sK KwlzdHJ1Y3Qga21zX3BsYW5lICpwbGFuZTsKKworCXBsYW5lID0gY2FsbG9jKDEsIHNpemVvZigq cGxhbmUpKTsKKwlpZiAoIXBsYW5lKQorCQlyZXR1cm4gTlVMTDsKKworCXBsYW5lLT5kZXZpY2Ug PSBkZXZpY2U7CisJcGxhbmUtPmlkID0gaWQ7CisKKwlrbXNfcGxhbmVfcHJvYmUocGxhbmUpOwor CisJcmV0dXJuIHBsYW5lOworfQorCit2b2lkIGttc19wbGFuZV9mcmVlKHN0cnVjdCBrbXNfcGxh bmUgKnBsYW5lKQoreworCWZyZWUocGxhbmUpOworfQorCitpbnQga21zX3BsYW5lX3NldChzdHJ1 Y3Qga21zX3BsYW5lICpwbGFuZSwgc3RydWN0IGttc19mcmFtZWJ1ZmZlciAqZmIsCisJCSAgdW5z aWduZWQgaW50IHgsIHVuc2lnbmVkIGludCB5KQoreworCXN0cnVjdCBrbXNfZGV2aWNlICpkZXZp Y2UgPSBwbGFuZS0+ZGV2aWNlOworCWludCBlcnI7CisKKwllcnIgPSBkcm1Nb2RlU2V0UGxhbmUo ZGV2aWNlLT5mZCwgcGxhbmUtPmlkLCBwbGFuZS0+Y3J0Yy0+aWQsIGZiLT5pZCwKKwkJCSAgICAg IDAsIHgsIHksIGZiLT53aWR0aCwgZmItPmhlaWdodCwgMCA8PCAxNiwKKwkJCSAgICAgIDAgPDwg MTYsIGZiLT53aWR0aCA8PCAxNiwgZmItPmhlaWdodCA8PCAxNik7CisJaWYgKGVyciA8IDApCisJ CXJldHVybiAtZXJybm87CisKKwlyZXR1cm4gMDsKK30KKworYm9vbCBrbXNfcGxhbmVfc3VwcG9y dHNfZm9ybWF0KHN0cnVjdCBrbXNfcGxhbmUgKnBsYW5lLCB1aW50MzJfdCBmb3JtYXQpCit7CisJ dW5zaWduZWQgaW50IGk7CisKKwlmb3IgKGkgPSAwOyBpIDwgcGxhbmUtPm51bV9mb3JtYXRzOyBp KyspCisJCWlmIChwbGFuZS0+Zm9ybWF0c1tpXSA9PSBmb3JtYXQpCisJCQlyZXR1cm4gdHJ1ZTsK KworCXJldHVybiBmYWxzZTsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2ttcy9saWJrbXMtdGVzdC1z Y3JlZW4uYyBiL3Rlc3RzL2ttcy9saWJrbXMtdGVzdC1zY3JlZW4uYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjMzNjkwMjIyODA5MAotLS0gL2Rldi9udWxsCisrKyBi L3Rlc3RzL2ttcy9saWJrbXMtdGVzdC1zY3JlZW4uYwpAQCAtMCwwICsxLDkyIEBACisvKgorICog Q29weXJpZ2h0IMKpIDIwMTQgTlZJRElBIENvcnBvcmF0aW9uCisgKgorICogUGVybWlzc2lvbiBp cyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24gb2J0YWluaW5n IGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1bWVudGF0aW9u IGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0d2FyZSB3aXRo b3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisgKiB0aGUgcmln aHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJpYnV0ZSwgc3Vi bGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUsIGFuZCB0byBw ZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlzaGVkIHRvIGRv IHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisgKiBUaGUgYWJv dmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAoaW5jbHVkaW5n IHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFsbCBjb3BpZXMg b3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAqCisgKiBUSEUg U09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBPRiBBTlkgS0lO RCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElNSVRFRCBUTyBU SEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQgU0hBTEwKKyAq IFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlN LCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9G IENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwgT1VUIE9GIE9S IElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBPVEhFUiBERUFM SU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZmRlZiBIQVZFX0NPTkZJR19ICisj aW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPGVycm5vLmg+CisjaW5jbHVk ZSA8c3RyaW5nLmg+CisKKyNpbmNsdWRlICJsaWJrbXMtdGVzdC5oIgorCitzdGF0aWMgdm9pZCBr bXNfc2NyZWVuX3Byb2JlKHN0cnVjdCBrbXNfc2NyZWVuICpzY3JlZW4pCit7CisJc3RydWN0IGtt c19kZXZpY2UgKmRldmljZSA9IHNjcmVlbi0+ZGV2aWNlOworCWRybU1vZGVDb25uZWN0b3IgKmNv bjsKKworCWNvbiA9IGRybU1vZGVHZXRDb25uZWN0b3IoZGV2aWNlLT5mZCwgc2NyZWVuLT5pZCk7 CisJaWYgKCFjb24pCisJCXJldHVybjsKKworCXNjcmVlbi0+dHlwZSA9IGNvbi0+Y29ubmVjdG9y X3R5cGU7CisKKwlpZiAoY29uLT5jb25uZWN0aW9uID09IERSTV9NT0RFX0NPTk5FQ1RFRCkKKwkJ c2NyZWVuLT5jb25uZWN0ZWQgPSB0cnVlOworCWVsc2UKKwkJc2NyZWVuLT5jb25uZWN0ZWQgPSBm YWxzZTsKKworCW1lbWNweSgmc2NyZWVuLT5tb2RlLCAmY29uLT5tb2Rlc1swXSwgc2l6ZW9mKGRy bU1vZGVNb2RlSW5mbykpOworCXNjcmVlbi0+d2lkdGggPSBzY3JlZW4tPm1vZGUuaGRpc3BsYXk7 CisJc2NyZWVuLT5oZWlnaHQgPSBzY3JlZW4tPm1vZGUudmRpc3BsYXk7CisKKwlkcm1Nb2RlRnJl ZUNvbm5lY3Rvcihjb24pOworfQorCitzdHJ1Y3Qga21zX3NjcmVlbiAqa21zX3NjcmVlbl9jcmVh dGUoc3RydWN0IGttc19kZXZpY2UgKmRldmljZSwgdWludDMyX3QgaWQpCit7CisJc3RydWN0IGtt c19zY3JlZW4gKnNjcmVlbjsKKworCXNjcmVlbiA9IGNhbGxvYygxLCBzaXplb2YoKnNjcmVlbikp OworCWlmICghc2NyZWVuKQorCQlyZXR1cm4gTlVMTDsKKworCXNjcmVlbi0+ZGV2aWNlID0gZGV2 aWNlOworCXNjcmVlbi0+aWQgPSBpZDsKKworCWttc19zY3JlZW5fcHJvYmUoc2NyZWVuKTsKKwor CXJldHVybiBzY3JlZW47Cit9CisKK3ZvaWQga21zX3NjcmVlbl9mcmVlKHN0cnVjdCBrbXNfc2Ny ZWVuICpzY3JlZW4pCit7CisJaWYgKHNjcmVlbikKKwkJZnJlZShzY3JlZW4tPm5hbWUpOworCisJ ZnJlZShzY3JlZW4pOworfQorCitpbnQga21zX3NjcmVlbl9zZXQoc3RydWN0IGttc19zY3JlZW4g KnNjcmVlbiwgc3RydWN0IGttc19jcnRjICpjcnRjLAorCQkgICBzdHJ1Y3Qga21zX2ZyYW1lYnVm ZmVyICpmYikKK3sKKwlzdHJ1Y3Qga21zX2RldmljZSAqZGV2aWNlID0gc2NyZWVuLT5kZXZpY2U7 CisJaW50IGVycjsKKworCWVyciA9IGRybU1vZGVTZXRDcnRjKGRldmljZS0+ZmQsIGNydGMtPmlk LCBmYi0+aWQsIDAsIDAsICZzY3JlZW4tPmlkLAorCQkJICAgICAxLCAmc2NyZWVuLT5tb2RlKTsK KwlpZiAoZXJyIDwgMCkKKwkJcmV0dXJuIC1lcnJubzsKKworCXJldHVybiAwOworfQpkaWZmIC0t Z2l0IGEvdGVzdHMva21zL2xpYmttcy10ZXN0LmggYi90ZXN0cy9rbXMvbGlia21zLXRlc3QuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAuLjdiMWQwMmU5YWEwYQotLS0g L2Rldi9udWxsCisrKyBiL3Rlc3RzL2ttcy9saWJrbXMtdGVzdC5oCkBAIC0wLDAgKzEsMTIwIEBA CisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgTlZJRElBIENvcnBvcmF0aW9uCisgKgorICogUGVy bWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBwZXJzb24g b2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRlZCBkb2N1 bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRoZSBTb2Z0 d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0aW9uCisg KiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwgZGlzdHJp YnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29mdHdhcmUs IGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMgZnVybmlz aGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKKyAqCisg KiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5vdGljZSAo aW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1ZGVkIGluIGFs bCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0d2FyZS4KKyAq CisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBXQVJSQU5UWSBP RiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJVVCBOT1QgTElN SVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBGSVRORVNTIEZP UiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4gTk8gRVZFTlQg U0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJQUJMRSBGT1Ig QU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4g QUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORworICogRlJPTSwg T1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUiBP VEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZm5kZWYgTElCS01T X1RFU1RfSAorI2RlZmluZSBMSUJLTVNfVEVTVF9ICisKKyNpbmNsdWRlIDxzdGRib29sLmg+Cisj aW5jbHVkZSA8c3RkaW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisKKyNpbmNsdWRlIDx4Zjg2 ZHJtTW9kZS5oPgorCitzdHJ1Y3Qga21zX2RldmljZSB7CisJaW50IGZkOworCisJc3RydWN0IGtt c19zY3JlZW4gKipzY3JlZW5zOworCXVuc2lnbmVkIGludCBudW1fc2NyZWVuczsKKworCXN0cnVj dCBrbXNfY3J0YyAqKmNydGNzOworCXVuc2lnbmVkIGludCBudW1fY3J0Y3M7CisKKwlzdHJ1Y3Qg a21zX3BsYW5lICoqcGxhbmVzOworCXVuc2lnbmVkIGludCBudW1fcGxhbmVzOworfTsKKworc3Ry dWN0IGttc19kZXZpY2UgKmttc19kZXZpY2Vfb3BlbihpbnQgZmQpOwordm9pZCBrbXNfZGV2aWNl X2Nsb3NlKHN0cnVjdCBrbXNfZGV2aWNlICpkZXZpY2UpOworCitzdHJ1Y3Qga21zX3BsYW5lICpr bXNfZGV2aWNlX2ZpbmRfcGxhbmVfYnlfdHlwZShzdHJ1Y3Qga21zX2RldmljZSAqZGV2aWNlLAor CQkJCQkJdWludDMyX3QgdHlwZSwKKwkJCQkJCXVuc2lnbmVkIGludCBpbmRleCk7CisKK3N0cnVj dCBrbXNfY3J0YyB7CisJc3RydWN0IGttc19kZXZpY2UgKmRldmljZTsKKwl1aW50MzJfdCBpZDsK K307CisKK3N0cnVjdCBrbXNfY3J0YyAqa21zX2NydGNfY3JlYXRlKHN0cnVjdCBrbXNfZGV2aWNl ICpkZXZpY2UsIHVpbnQzMl90IGlkKTsKK3ZvaWQga21zX2NydGNfZnJlZShzdHJ1Y3Qga21zX2Ny dGMgKmNydGMpOworCitzdHJ1Y3Qga21zX2ZyYW1lYnVmZmVyIHsKKwlzdHJ1Y3Qga21zX2Rldmlj ZSAqZGV2aWNlOworCisJdW5zaWduZWQgaW50IHdpZHRoOworCXVuc2lnbmVkIGludCBoZWlnaHQ7 CisJdW5zaWduZWQgaW50IHBpdGNoOworCXVpbnQzMl90IGZvcm1hdDsKKwlzaXplX3Qgc2l6ZTsK KworCXVpbnQzMl90IGhhbmRsZTsKKwl1aW50MzJfdCBpZDsKKworCXZvaWQgKnB0cjsKK307CisK K3N0cnVjdCBrbXNfZnJhbWVidWZmZXIgKmttc19mcmFtZWJ1ZmZlcl9jcmVhdGUoc3RydWN0IGtt c19kZXZpY2UgKmRldmljZSwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCB3aWR0aCwKKwkJCQkJ ICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCQkJCSAgICAgICB1aW50MzJfdCBmb3JtYXQp Owordm9pZCBrbXNfZnJhbWVidWZmZXJfZnJlZShzdHJ1Y3Qga21zX2ZyYW1lYnVmZmVyICpmYik7 CitpbnQga21zX2ZyYW1lYnVmZmVyX21hcChzdHJ1Y3Qga21zX2ZyYW1lYnVmZmVyICpmYiwgdm9p ZCAqKnB0cnApOwordm9pZCBrbXNfZnJhbWVidWZmZXJfdW5tYXAoc3RydWN0IGttc19mcmFtZWJ1 ZmZlciAqZmIpOworCitzdHJ1Y3Qga21zX3NjcmVlbiB7CisJc3RydWN0IGttc19kZXZpY2UgKmRl dmljZTsKKwlib29sIGNvbm5lY3RlZDsKKwl1aW50MzJfdCB0eXBlOworCXVpbnQzMl90IGlkOwor CisJdW5zaWduZWQgaW50IHdpZHRoOworCXVuc2lnbmVkIGludCBoZWlnaHQ7CisJY2hhciAqbmFt ZTsKKworCWRybU1vZGVNb2RlSW5mbyBtb2RlOworfTsKKworc3RydWN0IGttc19zY3JlZW4gKmtt c19zY3JlZW5fY3JlYXRlKHN0cnVjdCBrbXNfZGV2aWNlICpkZXZpY2UsIHVpbnQzMl90IGlkKTsK K3ZvaWQga21zX3NjcmVlbl9mcmVlKHN0cnVjdCBrbXNfc2NyZWVuICpzY3JlZW4pOworCitpbnQg a21zX3NjcmVlbl9zZXQoc3RydWN0IGttc19zY3JlZW4gKnNjcmVlbiwgc3RydWN0IGttc19jcnRj ICpjcnRjLAorCQkgICBzdHJ1Y3Qga21zX2ZyYW1lYnVmZmVyICpmYik7CisKK3N0cnVjdCBrbXNf cGxhbmUgeworCXN0cnVjdCBrbXNfZGV2aWNlICpkZXZpY2U7CisJc3RydWN0IGttc19jcnRjICpj cnRjOworCXVuc2lnbmVkIGludCB0eXBlOworCXVpbnQzMl90IGlkOworCisJdWludDMyX3QgKmZv cm1hdHM7CisJdW5zaWduZWQgaW50IG51bV9mb3JtYXRzOworfTsKKworc3RydWN0IGttc19wbGFu ZSAqa21zX3BsYW5lX2NyZWF0ZShzdHJ1Y3Qga21zX2RldmljZSAqZGV2aWNlLCB1aW50MzJfdCBp ZCk7Cit2b2lkIGttc19wbGFuZV9mcmVlKHN0cnVjdCBrbXNfcGxhbmUgKnBsYW5lKTsKKworaW50 IGttc19wbGFuZV9zZXQoc3RydWN0IGttc19wbGFuZSAqcGxhbmUsIHN0cnVjdCBrbXNfZnJhbWVi dWZmZXIgKmZiLAorCQkgIHVuc2lnbmVkIGludCB4LCB1bnNpZ25lZCBpbnQgeSk7Citib29sIGtt c19wbGFuZV9zdXBwb3J0c19mb3JtYXQoc3RydWN0IGttc19wbGFuZSAqcGxhbmUsIHVpbnQzMl90 IGZvcm1hdCk7CisKKyNlbmRpZgotLSAKMi4xLjMKCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmRyaS1kZXZlbCBtYWlsaW5nIGxpc3QKZHJpLWRldmVsQGxp c3RzLmZyZWVkZXNrdG9wLm9yZwpodHRwOi8vbGlzdHMuZnJlZWRlc2t0b3Aub3JnL21haWxtYW4v bGlzdGluZm8vZHJpLWRldmVsCg==