From mboxrd@z Thu Jan 1 00:00:00 1970 From: Thierry Reding Subject: [PATCH libdrm 04/10] tests: Add libkms-test library Date: Wed, 9 Dec 2015 18:37:42 +0100 Message-ID: <1449682668-22487-4-git-send-email-thierry.reding@gmail.com> References: <1449682668-22487-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-pf0-f177.google.com (mail-pf0-f177.google.com [209.85.192.177]) by gabe.freedesktop.org (Postfix) with ESMTPS id E0BA96E2A6 for ; Wed, 9 Dec 2015 09:38:03 -0800 (PST) Received: by pfdd184 with SMTP id d184so33209500pfd.3 for ; Wed, 09 Dec 2015 09:38:03 -0800 (PST) In-Reply-To: <1449682668-22487-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: Emil Velikov , Hyungwon Hwang List-Id: dri-devel@lists.freedesktop.org RnJvbTogVGhpZXJyeSBSZWRpbmcgPHRyZWRpbmdAbnZpZGlhLmNvbT4KClRoaXMgbGlicmFyeSBj b250YWlucyBhYnN0cmFjdGlvbnMgZm9yIEtNUyB0aGF0IGhlbHAgcmVtb3ZlIHRoZSBuZWVkIGZv cgphIGxvdCBvZiBib2lsZXJwbGF0ZSBpbiBLTVMgdGVzdCBwcm9ncmFtcy4KClNpZ25lZC1vZmYt Ynk6IFRoaWVycnkgUmVkaW5nIDx0cmVkaW5nQG52aWRpYS5jb20+Ci0tLQogY29uZmlndXJlLmFj ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDEgKwogdGVzdHMvTWFrZWZpbGUuYW0gICAgICAg ICAgICAgICAgICAgfCAgIDIgKy0KIHRlc3RzL2ttcy9NYWtlZmlsZS5hbSAgICAgICAgICAgICAg IHwgIDIwICsrKysKIHRlc3RzL2ttcy9saWJrbXMtdGVzdC1jcnRjLmMgICAgICAgIHwgIDQ3ICsr KysrKysrCiB0ZXN0cy9rbXMvbGlia21zLXRlc3QtZGV2aWNlLmMgICAgICB8IDIxOCArKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHRlc3RzL2ttcy9saWJrbXMtdGVzdC1mcmFt ZWJ1ZmZlci5jIHwgMTU3ICsrKysrKysrKysrKysrKysrKysrKysrKysrCiB0ZXN0cy9rbXMvbGli a21zLXRlc3QtcGxhbmUuYyAgICAgICB8IDEzOSArKysrKysrKysrKysrKysrKysrKysrKwogdGVz dHMva21zL2xpYmttcy10ZXN0LXNjcmVlbi5jICAgICAgfCAgOTIgKysrKysrKysrKysrKysrCiB0 ZXN0cy9rbXMvbGlia21zLXRlc3QuaCAgICAgICAgICAgICB8IDEyMCArKysrKysrKysrKysrKysr KysrKwogOSBmaWxlcyBjaGFuZ2VkLCA3OTUgaW5zZXJ0aW9ucygrKSwgMSBkZWxldGlvbigtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttcy9NYWtlZmlsZS5hbQogY3JlYXRlIG1vZGUgMTAw NjQ0IHRlc3RzL2ttcy9saWJrbXMtdGVzdC1jcnRjLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0 cy9rbXMvbGlia21zLXRlc3QtZGV2aWNlLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCB0ZXN0cy9rbXMv bGlia21zLXRlc3QtZnJhbWVidWZmZXIuYwogY3JlYXRlIG1vZGUgMTAwNjQ0IHRlc3RzL2ttcy9s aWJrbXMtdGVzdC1wbGFuZS5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zL2xpYmttcy10 ZXN0LXNjcmVlbi5jCiBjcmVhdGUgbW9kZSAxMDA2NDQgdGVzdHMva21zL2xpYmttcy10ZXN0LmgK CmRpZmYgLS1naXQgYS9jb25maWd1cmUuYWMgYi9jb25maWd1cmUuYWMKaW5kZXggY2E2Y2JmNGVh YTYyLi4wYzY2ZGZjNjJhNGMgMTAwNjQ0Ci0tLSBhL2NvbmZpZ3VyZS5hYworKysgYi9jb25maWd1 cmUuYWMKQEAgLTQ5OSw2ICs0OTksNyBAQCBBQ19DT05GSUdfRklMRVMoWwogCXRlc3RzL01ha2Vm aWxlCiAJdGVzdHMvbW9kZXByaW50L01ha2VmaWxlCiAJdGVzdHMvbW9kZXRlc3QvTWFrZWZpbGUK Kwl0ZXN0cy9rbXMvTWFrZWZpbGUKIAl0ZXN0cy9rbXN0ZXN0L01ha2VmaWxlCiAJdGVzdHMvcHJv cHRlc3QvTWFrZWZpbGUKIAl0ZXN0cy9yYWRlb24vTWFrZWZpbGUKZGlmZiAtLWdpdCBhL3Rlc3Rz L01ha2VmaWxlLmFtIGIvdGVzdHMvTWFrZWZpbGUuYW0KaW5kZXggN2ZmYzA3NmYxNmQ3Li41OGZl YjEyMzZiNjYgMTAwNjQ0Ci0tLSBhL3Rlc3RzL01ha2VmaWxlLmFtCisrKyBiL3Rlc3RzL01ha2Vm aWxlLmFtCkBAIC0xLDQgKzEsNCBAQAotU1VCRElSUyA9IHV0aWwgbW9kZXByaW50IHByb3B0ZXN0 IG1vZGV0ZXN0IHZibHRlc3QKK1NVQkRJUlMgPSB1dGlsIGttcyBtb2RlcHJpbnQgcHJvcHRlc3Qg bW9kZXRlc3QgdmJsdGVzdAogCiBpZiBIQVZFX0xJQktNUwogU1VCRElSUyArPSBrbXN0ZXN0CmRp ZmYgLS1naXQgYS90ZXN0cy9rbXMvTWFrZWZpbGUuYW0gYi90ZXN0cy9rbXMvTWFrZWZpbGUuYW0K bmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5kYTQ2NDIxODQ1MDQKLS0t IC9kZXYvbnVsbAorKysgYi90ZXN0cy9rbXMvTWFrZWZpbGUuYW0KQEAgLTAsMCArMSwyMCBAQAor QU1fQ1BQRkxBR1MgPSBcCisJLUkkKHRvcF9zcmNkaXIpL2luY2x1ZGUvZHJtIFwKKwktSSQodG9w X3NyY2RpcikvdGVzdHMgXAorCS1JJCh0b3Bfc3JjZGlyKQorCitBTV9DRkxBR1MgPSBcCisJJChX QVJOX0NGTEFHUykKKworbm9pbnN0X0xUTElCUkFSSUVTID0gbGlia21zLXRlc3QubGEKKworbGli a21zX3Rlc3RfbGFfU09VUkNFUyA9IFwKKwlsaWJrbXMtdGVzdC5oIFwKKwlsaWJrbXMtdGVzdC1j cnRjLmMgXAorCWxpYmttcy10ZXN0LWRldmljZS5jIFwKKwlsaWJrbXMtdGVzdC1mcmFtZWJ1ZmZl ci5jIFwKKwlsaWJrbXMtdGVzdC1wbGFuZS5jIFwKKwlsaWJrbXMtdGVzdC1zY3JlZW4uYworCits aWJrbXNfdGVzdF9sYV9MSUJBREQgPSBcCisJJCh0b3BfYnVpbGRkaXIpL2xpYmRybS5sYQpkaWZm IC0tZ2l0IGEvdGVzdHMva21zL2xpYmttcy10ZXN0LWNydGMuYyBiL3Rlc3RzL2ttcy9saWJrbXMt dGVzdC1jcnRjLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zYWRi NDkwMzkxOWYKLS0tIC9kZXYvbnVsbAorKysgYi90ZXN0cy9rbXMvbGlia21zLXRlc3QtY3J0Yy5j CkBAIC0wLDAgKzEsNDcgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNCBOVklESUEgQ29ycG9y YXRpb24KKyAqCisgKiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJn ZSwgdG8gYW55IHBlcnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFu ZCBhc3NvY2lhdGVkIGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRv IGRlYWwgaW4gdGhlIFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRo b3V0IGxpbWl0YXRpb24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdl LCBwdWJsaXNoLCBkaXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVz IG9mIHRoZSBTb2Z0d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBT b2Z0d2FyZSBpcyBmdXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBj b25kaXRpb25zOgorICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBl cm1pc3Npb24gbm90aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwg YmUgaW5jbHVkZWQgaW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUK KyAqIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBX SVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNM VURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU WSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1F TlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERF UlMgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElU WSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBB UklTSU5HCisgKiBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FS RSBPUiBUSEUgVVNFIE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8K KworI2lmZGVmIEhBVkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisj aW5jbHVkZSAibGlia21zLXRlc3QuaCIKKworc3RydWN0IGttc19jcnRjICprbXNfY3J0Y19jcmVh dGUoc3RydWN0IGttc19kZXZpY2UgKmRldmljZSwgdWludDMyX3QgaWQpCit7CisJc3RydWN0IGtt c19jcnRjICpjcnRjOworCisJY3J0YyA9IGNhbGxvYygxLCBzaXplb2YoKmNydGMpKTsKKwlpZiAo IWNydGMpCisJCXJldHVybiBOVUxMOworCisJY3J0Yy0+ZGV2aWNlID0gZGV2aWNlOworCWNydGMt PmlkID0gaWQ7CisKKwlyZXR1cm4gY3J0YzsKK30KKwordm9pZCBrbXNfY3J0Y19mcmVlKHN0cnVj dCBrbXNfY3J0YyAqY3J0YykKK3sKKwlmcmVlKGNydGMpOworfQpkaWZmIC0tZ2l0IGEvdGVzdHMv a21zL2xpYmttcy10ZXN0LWRldmljZS5jIGIvdGVzdHMva21zL2xpYmttcy10ZXN0LWRldmljZS5j Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uNTNjNzM0OWI4OWFiCi0t LSAvZGV2L251bGwKKysrIGIvdGVzdHMva21zL2xpYmttcy10ZXN0LWRldmljZS5jCkBAIC0wLDAg KzEsMjE4IEBACisvKgorICogQ29weXJpZ2h0IMKpIDIwMTQgTlZJRElBIENvcnBvcmF0aW9uCisg KgorICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFu eSBwZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2Np YXRlZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGlu IHRoZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1p dGF0aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlz aCwgZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUg U29mdHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUg aXMgZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u czoKKyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9u IG5vdGljZSAoaW5jbHVkaW5nIHRoZSBuZXh0CisgKiBwYXJhZ3JhcGgpIHNoYWxsIGJlIGluY2x1 ZGVkIGluIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRpYWwgcG9ydGlvbnMgb2YgdGhlCisgKiBTb2Z0 d2FyZS4KKyAqCisgKiBUSEUgU09GVFdBUkUgSVMgUFJPVklERUQgIkFTIElTIiwgV0lUSE9VVCBX QVJSQU5UWSBPRiBBTlkgS0lORCwgRVhQUkVTUyBPUgorICogSU1QTElFRCwgSU5DTFVESU5HIEJV VCBOT1QgTElNSVRFRCBUTyBUSEUgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFksCisgKiBG SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBTkQgTk9OSU5GUklOR0VNRU5ULiAgSU4g Tk8gRVZFTlQgU0hBTEwKKyAqIFRIRSBBVVRIT1JTIE9SIENPUFlSSUdIVCBIT0xERVJTIEJFIExJ QUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9SIE9USEVSCisgKiBMSUFCSUxJVFksIFdIRVRI RVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBUT1JUIE9SIE9USEVSV0lTRSwgQVJJU0lORwor ICogRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJT04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhF IFVTRSBPUiBPVEhFUiBERUFMSU5HUworICogSU4gVEhFIFNPRlRXQVJFLgorICovCisKKyNpZmRl ZiBIQVZFX0NPTkZJR19ICisjaW5jbHVkZSAiY29uZmlnLmgiCisjZW5kaWYKKworI2luY2x1ZGUg PHN0ZGlvLmg+CisjaW5jbHVkZSA8c3RyaW5nLmg+CisjaW5jbHVkZSA8dW5pc3RkLmg+CisKKyNp bmNsdWRlICJ1dGlsL2NvbW1vbi5oIgorI2luY2x1ZGUgImxpYmttcy10ZXN0LmgiCisKK3N0YXRp YyBjb25zdCBjaGFyICpjb25zdCBjb25uZWN0b3JfbmFtZXNbXSA9IHsKKwkiVW5rbm93biIsCisJ IlZHQSIsCisJIkRWSS1JIiwKKwkiRFZJLUQiLAorCSJEVkktQSIsCisJIkNvbXBvc2l0ZSIsCisJ IlNWSURFTyIsCisJIkxWRFMiLAorCSJDb21wb25lbnQiLAorCSI5UGluRElOIiwKKwkiRGlzcGxh eVBvcnQiLAorCSJIRE1JLUEiLAorCSJIRE1JLUIiLAorCSJUViIsCisJImVEUCIsCisJIlZpcnR1 YWwiLAorCSJEU0kiLAorfTsKKworc3RhdGljIHZvaWQga21zX2RldmljZV9wcm9iZV9zY3JlZW5z KHN0cnVjdCBrbXNfZGV2aWNlICpkZXZpY2UpCit7CisJdW5zaWduZWQgaW50IGNvdW50c1tBUlJB WV9TSVpFKGNvbm5lY3Rvcl9uYW1lcyldOworCXN0cnVjdCBrbXNfc2NyZWVuICpzY3JlZW47CisJ ZHJtTW9kZVJlcyAqcmVzOworCWludCBpOworCisJbWVtc2V0KGNvdW50cywgMCwgc2l6ZW9mKGNv dW50cykpOworCisJcmVzID0gZHJtTW9kZUdldFJlc291cmNlcyhkZXZpY2UtPmZkKTsKKwlpZiAo IXJlcykKKwkJcmV0dXJuOworCisJZGV2aWNlLT5zY3JlZW5zID0gY2FsbG9jKHJlcy0+Y291bnRf Y29ubmVjdG9ycywgc2l6ZW9mKHNjcmVlbikpOworCWlmICghZGV2aWNlLT5zY3JlZW5zKQorCQly ZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVzLT5jb3VudF9jb25uZWN0b3JzOyBpKyspIHsK KwkJdW5zaWduZWQgaW50ICpjb3VudDsKKwkJY29uc3QgY2hhciAqdHlwZTsKKwkJaW50IGxlbjsK KworCQlzY3JlZW4gPSBrbXNfc2NyZWVuX2NyZWF0ZShkZXZpY2UsIHJlcy0+Y29ubmVjdG9yc1tp XSk7CisJCWlmICghc2NyZWVuKQorCQkJY29udGludWU7CisKKwkJLyogYXNzaWduIGEgdW5pcXVl IG5hbWUgdG8gdGhpcyBzY3JlZW4gKi8KKwkJdHlwZSA9IGNvbm5lY3Rvcl9uYW1lc1tzY3JlZW4t PnR5cGVdOworCQljb3VudCA9ICZjb3VudHNbc2NyZWVuLT50eXBlXTsKKworCQlsZW4gPSBzbnBy aW50ZihOVUxMLCAwLCAiJXMtJXUiLCB0eXBlLCAqY291bnQpOworCisJCXNjcmVlbi0+bmFtZSA9 IG1hbGxvYyhsZW4gKyAxKTsKKwkJaWYgKCFzY3JlZW4tPm5hbWUpIHsKKwkJCWZyZWUoc2NyZWVu KTsKKwkJCWNvbnRpbnVlOworCQl9CisKKwkJc25wcmludGYoc2NyZWVuLT5uYW1lLCBsZW4gKyAx LCAiJXMtJXUiLCB0eXBlLCAqY291bnQpOworCQkoKmNvdW50KSsrOworCisJCWRldmljZS0+c2Ny ZWVuc1tpXSA9IHNjcmVlbjsKKwkJZGV2aWNlLT5udW1fc2NyZWVucysrOworCX0KKworCWRybU1v ZGVGcmVlUmVzb3VyY2VzKHJlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGttc19kZXZpY2VfcHJvYmVf Y3J0Y3Moc3RydWN0IGttc19kZXZpY2UgKmRldmljZSkKK3sKKwlzdHJ1Y3Qga21zX2NydGMgKmNy dGM7CisJZHJtTW9kZVJlcyAqcmVzOworCWludCBpOworCisJcmVzID0gZHJtTW9kZUdldFJlc291 cmNlcyhkZXZpY2UtPmZkKTsKKwlpZiAoIXJlcykKKwkJcmV0dXJuOworCisJZGV2aWNlLT5jcnRj cyA9IGNhbGxvYyhyZXMtPmNvdW50X2NydGNzLCBzaXplb2YoY3J0YykpOworCWlmICghZGV2aWNl LT5jcnRjcykKKwkJcmV0dXJuOworCisJZm9yIChpID0gMDsgaSA8IHJlcy0+Y291bnRfY3J0Y3M7 IGkrKykgeworCQljcnRjID0ga21zX2NydGNfY3JlYXRlKGRldmljZSwgcmVzLT5jcnRjc1tpXSk7 CisJCWlmICghY3J0YykKKwkJCWNvbnRpbnVlOworCisJCWRldmljZS0+Y3J0Y3NbaV0gPSBjcnRj OworCQlkZXZpY2UtPm51bV9jcnRjcysrOworCX0KKworCWRybU1vZGVGcmVlUmVzb3VyY2VzKHJl cyk7Cit9CisKK3N0YXRpYyB2b2lkIGttc19kZXZpY2VfcHJvYmVfcGxhbmVzKHN0cnVjdCBrbXNf ZGV2aWNlICpkZXZpY2UpCit7CisJc3RydWN0IGttc19wbGFuZSAqcGxhbmU7CisJZHJtTW9kZVBs YW5lUmVzICpyZXM7CisJdW5zaWduZWQgaW50IGk7CisKKwlyZXMgPSBkcm1Nb2RlR2V0UGxhbmVS ZXNvdXJjZXMoZGV2aWNlLT5mZCk7CisJaWYgKCFyZXMpCisJCXJldHVybjsKKworCWRldmljZS0+ cGxhbmVzID0gY2FsbG9jKHJlcy0+Y291bnRfcGxhbmVzLCBzaXplb2YocGxhbmUpKTsKKwlpZiAo IWRldmljZS0+cGxhbmVzKQorCQlyZXR1cm47CisKKwlmb3IgKGkgPSAwOyBpIDwgcmVzLT5jb3Vu dF9wbGFuZXM7IGkrKykgeworCQlwbGFuZSA9IGttc19wbGFuZV9jcmVhdGUoZGV2aWNlLCByZXMt PnBsYW5lc1tpXSk7CisJCWlmICghcGxhbmUpCisJCQljb250aW51ZTsKKworCQlkZXZpY2UtPnBs YW5lc1tpXSA9IHBsYW5lOworCQlkZXZpY2UtPm51bV9wbGFuZXMrKzsKKwl9CisKKwlkcm1Nb2Rl RnJlZVBsYW5lUmVzb3VyY2VzKHJlcyk7Cit9CisKK3N0YXRpYyB2b2lkIGttc19kZXZpY2VfcHJv YmUoc3RydWN0IGttc19kZXZpY2UgKmRldmljZSkKK3sKKwlrbXNfZGV2aWNlX3Byb2JlX3NjcmVl bnMoZGV2aWNlKTsKKwlrbXNfZGV2aWNlX3Byb2JlX2NydGNzKGRldmljZSk7CisJa21zX2Rldmlj ZV9wcm9iZV9wbGFuZXMoZGV2aWNlKTsKK30KKworc3RydWN0IGttc19kZXZpY2UgKmttc19kZXZp Y2Vfb3BlbihpbnQgZmQpCit7CisJc3RydWN0IGttc19kZXZpY2UgKmRldmljZTsKKworCWRldmlj ZSA9IGNhbGxvYygxLCBzaXplb2YoKmRldmljZSkpOworCWlmICghZGV2aWNlKQorCQlyZXR1cm4g TlVMTDsKKworCWRldmljZS0+ZmQgPSBmZDsKKworCWttc19kZXZpY2VfcHJvYmUoZGV2aWNlKTsK KworCXJldHVybiBkZXZpY2U7Cit9CisKK3ZvaWQga21zX2RldmljZV9jbG9zZShzdHJ1Y3Qga21z X2RldmljZSAqZGV2aWNlKQoreworCXVuc2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8 IGRldmljZS0+bnVtX3BsYW5lczsgaSsrKQorCQlrbXNfcGxhbmVfZnJlZShkZXZpY2UtPnBsYW5l c1tpXSk7CisKKwlmcmVlKGRldmljZS0+cGxhbmVzKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXZp Y2UtPm51bV9jcnRjczsgaSsrKQorCQlrbXNfY3J0Y19mcmVlKGRldmljZS0+Y3J0Y3NbaV0pOwor CisJZnJlZShkZXZpY2UtPmNydGNzKTsKKworCWZvciAoaSA9IDA7IGkgPCBkZXZpY2UtPm51bV9z Y3JlZW5zOyBpKyspCisJCWttc19zY3JlZW5fZnJlZShkZXZpY2UtPnNjcmVlbnNbaV0pOworCisJ ZnJlZShkZXZpY2UtPnNjcmVlbnMpOworCisJaWYgKGRldmljZS0+ZmQgPj0gMCkKKwkJY2xvc2Uo ZGV2aWNlLT5mZCk7CisKKwlmcmVlKGRldmljZSk7Cit9CisKK3N0cnVjdCBrbXNfcGxhbmUgKmtt c19kZXZpY2VfZmluZF9wbGFuZV9ieV90eXBlKHN0cnVjdCBrbXNfZGV2aWNlICpkZXZpY2UsCisJ CQkJCQl1aW50MzJfdCB0eXBlLAorCQkJCQkJdW5zaWduZWQgaW50IGluZGV4KQoreworCXVuc2ln bmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IGRldmljZS0+bnVtX3BsYW5lczsgaSsrKSB7 CisJCWlmIChkZXZpY2UtPnBsYW5lc1tpXS0+dHlwZSA9PSB0eXBlKSB7CisJCQlpZiAoaW5kZXgg PT0gMCkKKwkJCQlyZXR1cm4gZGV2aWNlLT5wbGFuZXNbaV07CisKKwkJCWluZGV4LS07CisJCX0K Kwl9CisKKwlyZXR1cm4gTlVMTDsKK30KZGlmZiAtLWdpdCBhL3Rlc3RzL2ttcy9saWJrbXMtdGVz dC1mcmFtZWJ1ZmZlci5jIGIvdGVzdHMva21zL2xpYmttcy10ZXN0LWZyYW1lYnVmZmVyLmMKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi5jOWU1YWQzYzI1MGQKLS0tIC9k ZXYvbnVsbAorKysgYi90ZXN0cy9rbXMvbGlia21zLXRlc3QtZnJhbWVidWZmZXIuYwpAQCAtMCww ICsxLDE1NyBAQAorLyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IE5WSURJQSBDb3Jwb3JhdGlvbgor ICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2UgKGluY2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNs dWRlZCBpbiBhbGwgY29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29m dHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQg V0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBC VVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICog RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElO IE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBM SUFCTEUgRk9SIEFOWSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVU SEVSIElOIEFOIEFDVElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcK KyAqIEZST00sIE9VVCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRI RSBVU0UgT1IgT1RIRVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZk ZWYgSEFWRV9DT05GSUdfSAorI2luY2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRl IDxlcnJuby5oPgorI2luY2x1ZGUgPHN0cmluZy5oPgorCisjaW5jbHVkZSA8c3lzL21tYW4uaD4K KworI2luY2x1ZGUgPGRybV9mb3VyY2MuaD4KKworI2luY2x1ZGUgInhmODZkcm0uaCIKKworI2lu Y2x1ZGUgImxpYmttcy10ZXN0LmgiCisKK3N0cnVjdCBrbXNfZnJhbWVidWZmZXIgKmttc19mcmFt ZWJ1ZmZlcl9jcmVhdGUoc3RydWN0IGttc19kZXZpY2UgKmRldmljZSwKKwkJCQkJICAgICAgIHVu c2lnbmVkIGludCB3aWR0aCwKKwkJCQkJICAgICAgIHVuc2lnbmVkIGludCBoZWlnaHQsCisJCQkJ CSAgICAgICB1aW50MzJfdCBmb3JtYXQpCit7CisJdWludDMyX3QgaGFuZGxlc1s0XSwgcGl0Y2hl c1s0XSwgb2Zmc2V0c1s0XTsKKwlzdHJ1Y3QgZHJtX21vZGVfY3JlYXRlX2R1bWIgYXJnczsKKwlz dHJ1Y3Qga21zX2ZyYW1lYnVmZmVyICpmYjsKKwlpbnQgZXJyOworCisJZmIgPSBjYWxsb2MoMSwg c2l6ZW9mKCpmYikpOworCWlmICghZmIpCisJCXJldHVybiBOVUxMOworCisJZmItPmRldmljZSA9 IGRldmljZTsKKwlmYi0+d2lkdGggPSB3aWR0aDsKKwlmYi0+aGVpZ2h0ID0gaGVpZ2h0OworCWZi LT5mb3JtYXQgPSBmb3JtYXQ7CisKKwltZW1zZXQoJmFyZ3MsIDAsIHNpemVvZihhcmdzKSk7CisJ YXJncy53aWR0aCA9IHdpZHRoOworCWFyZ3MuaGVpZ2h0ID0gaGVpZ2h0OworCisJc3dpdGNoIChm b3JtYXQpIHsKKwljYXNlIERSTV9GT1JNQVRfWFJHQjg4ODg6CisJY2FzZSBEUk1fRk9STUFUX1hC R1I4ODg4OgorCWNhc2UgRFJNX0ZPUk1BVF9SR0JBODg4ODoKKwkJYXJncy5icHAgPSAzMjsKKwkJ YnJlYWs7CisKKwlkZWZhdWx0OgorCQlmcmVlKGZiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQorCisJ ZXJyID0gZHJtSW9jdGwoZGV2aWNlLT5mZCwgRFJNX0lPQ1RMX01PREVfQ1JFQVRFX0RVTUIsICZh cmdzKTsKKwlpZiAoZXJyIDwgMCkgeworCQlmcmVlKGZiKTsKKwkJcmV0dXJuIE5VTEw7CisJfQor CisJZmItPmhhbmRsZSA9IGFyZ3MuaGFuZGxlOworCWZiLT5waXRjaCA9IGFyZ3MucGl0Y2g7CisJ ZmItPnNpemUgPSBhcmdzLnNpemU7CisKKwloYW5kbGVzWzBdID0gZmItPmhhbmRsZTsKKwlwaXRj aGVzWzBdID0gZmItPnBpdGNoOworCW9mZnNldHNbMF0gPSAwOworCisJZXJyID0gZHJtTW9kZUFk ZEZCMihkZXZpY2UtPmZkLCB3aWR0aCwgaGVpZ2h0LCBmb3JtYXQsIGhhbmRsZXMsCisJCQkgICAg cGl0Y2hlcywgb2Zmc2V0cywgJmZiLT5pZCwgMCk7CisJaWYgKGVyciA8IDApIHsKKwkJa21zX2Zy YW1lYnVmZmVyX2ZyZWUoZmIpOworCQlyZXR1cm4gTlVMTDsKKwl9CisKKwlyZXR1cm4gZmI7Cit9 CisKK3ZvaWQga21zX2ZyYW1lYnVmZmVyX2ZyZWUoc3RydWN0IGttc19mcmFtZWJ1ZmZlciAqZmIp Cit7CisJc3RydWN0IGttc19kZXZpY2UgKmRldmljZSA9IGZiLT5kZXZpY2U7CisJc3RydWN0IGRy bV9tb2RlX2Rlc3Ryb3lfZHVtYiBhcmdzOworCWludCBlcnI7CisKKwlpZiAoZmItPmlkKSB7CisJ CWVyciA9IGRybU1vZGVSbUZCKGRldmljZS0+ZmQsIGZiLT5pZCk7CisJCWlmIChlcnIgPCAwKSB7 CisJCQkvKiBub3QgbXVjaCB3ZSBjYW4gZG8gbm93ICovCisJCX0KKwl9CisKKwltZW1zZXQoJmFy Z3MsIDAsIHNpemVvZihhcmdzKSk7CisJYXJncy5oYW5kbGUgPSBmYi0+aGFuZGxlOworCisJZXJy ID0gZHJtSW9jdGwoZGV2aWNlLT5mZCwgRFJNX0lPQ1RMX01PREVfREVTVFJPWV9EVU1CLCAmYXJn cyk7CisJaWYgKGVyciA8IDApIHsKKwkJLyogbm90IG11Y2ggd2UgY2FuIGRvIG5vdyAqLworCX0K KworCWZyZWUoZmIpOworfQorCitpbnQga21zX2ZyYW1lYnVmZmVyX21hcChzdHJ1Y3Qga21zX2Zy YW1lYnVmZmVyICpmYiwgdm9pZCAqKnB0cnApCit7CisJc3RydWN0IGttc19kZXZpY2UgKmRldmlj ZSA9IGZiLT5kZXZpY2U7CisJc3RydWN0IGRybV9tb2RlX21hcF9kdW1iIGFyZ3M7CisJdm9pZCAq cHRyOworCWludCBlcnI7CisKKwlpZiAoZmItPnB0cikgeworCQkqcHRycCA9IGZiLT5wdHI7CisJ CXJldHVybiAwOworCX0KKworCW1lbXNldCgmYXJncywgMCwgc2l6ZW9mKGFyZ3MpKTsKKwlhcmdz LmhhbmRsZSA9IGZiLT5oYW5kbGU7CisKKwllcnIgPSBkcm1Jb2N0bChkZXZpY2UtPmZkLCBEUk1f SU9DVExfTU9ERV9NQVBfRFVNQiwgJmFyZ3MpOworCWlmIChlcnIgPCAwKQorCQlyZXR1cm4gLWVy cm5vOworCisJcHRyID0gbW1hcCgwLCBmYi0+c2l6ZSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwg TUFQX1NIQVJFRCwKKwkJICAgZGV2aWNlLT5mZCwgYXJncy5vZmZzZXQpOworCWlmIChwdHIgPT0g TUFQX0ZBSUxFRCkKKwkJcmV0dXJuIC1lcnJubzsKKworCSpwdHJwID0gZmItPnB0ciA9IHB0cjsK KworCXJldHVybiAwOworfQorCit2b2lkIGttc19mcmFtZWJ1ZmZlcl91bm1hcChzdHJ1Y3Qga21z X2ZyYW1lYnVmZmVyICpmYikKK3sKKwlpZiAoZmItPnB0cikgeworCQltdW5tYXAoZmItPnB0ciwg ZmItPnNpemUpOworCQlmYi0+cHRyID0gTlVMTDsKKwl9Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9r bXMvbGlia21zLXRlc3QtcGxhbmUuYyBiL3Rlc3RzL2ttcy9saWJrbXMtdGVzdC1wbGFuZS5jCm5l dyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMC4uOGViNzhhZjFkY2M3Ci0tLSAv ZGV2L251bGwKKysrIGIvdGVzdHMva21zL2xpYmttcy10ZXN0LXBsYW5lLmMKQEAgLTAsMCArMSwx MzkgQEAKKy8qCisgKiBDb3B5cmlnaHQgwqkgMjAxNCBOVklESUEgQ29ycG9yYXRpb24KKyAqCisg KiBQZXJtaXNzaW9uIGlzIGhlcmVieSBncmFudGVkLCBmcmVlIG9mIGNoYXJnZSwgdG8gYW55IHBl cnNvbiBvYnRhaW5pbmcgYQorICogY29weSBvZiB0aGlzIHNvZnR3YXJlIGFuZCBhc3NvY2lhdGVk IGRvY3VtZW50YXRpb24gZmlsZXMgKHRoZSAiU29mdHdhcmUiKSwKKyAqIHRvIGRlYWwgaW4gdGhl IFNvZnR3YXJlIHdpdGhvdXQgcmVzdHJpY3Rpb24sIGluY2x1ZGluZyB3aXRob3V0IGxpbWl0YXRp b24KKyAqIHRoZSByaWdodHMgdG8gdXNlLCBjb3B5LCBtb2RpZnksIG1lcmdlLCBwdWJsaXNoLCBk aXN0cmlidXRlLCBzdWJsaWNlbnNlLAorICogYW5kL29yIHNlbGwgY29waWVzIG9mIHRoZSBTb2Z0 d2FyZSwgYW5kIHRvIHBlcm1pdCBwZXJzb25zIHRvIHdob20gdGhlCisgKiBTb2Z0d2FyZSBpcyBm dXJuaXNoZWQgdG8gZG8gc28sIHN1YmplY3QgdG8gdGhlIGZvbGxvd2luZyBjb25kaXRpb25zOgor ICoKKyAqIFRoZSBhYm92ZSBjb3B5cmlnaHQgbm90aWNlIGFuZCB0aGlzIHBlcm1pc3Npb24gbm90 aWNlIChpbmNsdWRpbmcgdGhlIG5leHQKKyAqIHBhcmFncmFwaCkgc2hhbGwgYmUgaW5jbHVkZWQg aW4gYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBwb3J0aW9ucyBvZiB0aGUKKyAqIFNvZnR3YXJl LgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9WSURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJB TlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisgKiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5P VCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5F U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFORCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBF VkVOVCBTSEFMTAorICogVEhFIEFVVEhPUlMgT1IgQ09QWVJJR0hUIEhPTERFUlMgQkUgTElBQkxF IEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IgT1RIRVIKKyAqIExJQUJJTElUWSwgV0hFVEhFUiBJ TiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQgT1IgT1RIRVJXSVNFLCBBUklTSU5HCisgKiBG Uk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBXSVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNF IE9SIE9USEVSIERFQUxJTkdTCisgKiBJTiBUSEUgU09GVFdBUkUuCisgKi8KKworI2lmZGVmIEhB VkVfQ09ORklHX0gKKyNpbmNsdWRlICJjb25maWcuaCIKKyNlbmRpZgorCisjaW5jbHVkZSA8ZXJy bm8uaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKworI2luY2x1ZGUgImxpYmttcy10ZXN0LmgiCisK K3N0YXRpYyBpbnQga21zX3BsYW5lX3Byb2JlKHN0cnVjdCBrbXNfcGxhbmUgKnBsYW5lKQorewor CXN0cnVjdCBrbXNfZGV2aWNlICpkZXZpY2UgPSBwbGFuZS0+ZGV2aWNlOworCWRybU1vZGVPYmpl Y3RQcm9wZXJ0aWVzUHRyIHByb3BzOworCWRybU1vZGVQbGFuZSAqcDsKKwl1bnNpZ25lZCBpbnQg aTsKKworCXAgPSBkcm1Nb2RlR2V0UGxhbmUoZGV2aWNlLT5mZCwgcGxhbmUtPmlkKTsKKwlpZiAo IXApCisJCXJldHVybiAtRU5PREVWOworCisJLyogVE9ETzogYWxsb3cgZHluYW1pYyBhc3NpZ25t ZW50IHRvIENSVENzICovCisJaWYgKHAtPmNydGNfaWQgPT0gMCkgeworCQlmb3IgKGkgPSAwOyBp IDwgZGV2aWNlLT5udW1fY3J0Y3M7IGkrKykgeworCQkJaWYgKHAtPnBvc3NpYmxlX2NydGNzICYg KDEgPDwgaSkpIHsKKwkJCQlwLT5jcnRjX2lkID0gZGV2aWNlLT5jcnRjc1tpXS0+aWQ7CisJCQkJ YnJlYWs7CisJCQl9CisJCX0KKwl9CisKKwlmb3IgKGkgPSAwOyBpIDwgZGV2aWNlLT5udW1fY3J0 Y3M7IGkrKykgeworCQlpZiAoZGV2aWNlLT5jcnRjc1tpXS0+aWQgPT0gcC0+Y3J0Y19pZCkgewor CQkJcGxhbmUtPmNydGMgPSBkZXZpY2UtPmNydGNzW2ldOworCQkJYnJlYWs7CisJCX0KKwl9CisK KwlwbGFuZS0+Zm9ybWF0cyA9IGNhbGxvYyhwLT5jb3VudF9mb3JtYXRzLCBzaXplb2YodWludDMy X3QpKTsKKwlpZiAoIXBsYW5lLT5mb3JtYXRzKQorCQlyZXR1cm4gLUVOT01FTTsKKworCWZvciAo aSA9IDA7IGkgPCBwLT5jb3VudF9mb3JtYXRzOyBpKyspCisJCXBsYW5lLT5mb3JtYXRzW2ldID0g cC0+Zm9ybWF0c1tpXTsKKworCXBsYW5lLT5udW1fZm9ybWF0cyA9IHAtPmNvdW50X2Zvcm1hdHM7 CisKKwlkcm1Nb2RlRnJlZVBsYW5lKHApOworCisJcHJvcHMgPSBkcm1Nb2RlT2JqZWN0R2V0UHJv cGVydGllcyhkZXZpY2UtPmZkLCBwbGFuZS0+aWQsCisJCQkJCSAgIERSTV9NT0RFX09CSkVDVF9Q TEFORSk7CisJaWYgKCFwcm9wcykKKwkJcmV0dXJuIC1FTk9ERVY7CisKKwlmb3IgKGkgPSAwOyBp IDwgcHJvcHMtPmNvdW50X3Byb3BzOyBpKyspIHsKKwkJZHJtTW9kZVByb3BlcnR5UHRyIHByb3A7 CisKKwkJcHJvcCA9IGRybU1vZGVHZXRQcm9wZXJ0eShkZXZpY2UtPmZkLCBwcm9wcy0+cHJvcHNb aV0pOworCQlpZiAocHJvcCkgeworCQkJaWYgKHN0cmNtcChwcm9wLT5uYW1lLCAidHlwZSIpID09 IDApCisJCQkJcGxhbmUtPnR5cGUgPSBwcm9wcy0+cHJvcF92YWx1ZXNbaV07CisKKwkJCWRybU1v ZGVGcmVlUHJvcGVydHkocHJvcCk7CisJCX0KKwl9CisKKwlkcm1Nb2RlRnJlZU9iamVjdFByb3Bl cnRpZXMocHJvcHMpOworCisJcmV0dXJuIDA7Cit9CisKK3N0cnVjdCBrbXNfcGxhbmUgKmttc19w bGFuZV9jcmVhdGUoc3RydWN0IGttc19kZXZpY2UgKmRldmljZSwgdWludDMyX3QgaWQpCit7CisJ c3RydWN0IGttc19wbGFuZSAqcGxhbmU7CisKKwlwbGFuZSA9IGNhbGxvYygxLCBzaXplb2YoKnBs YW5lKSk7CisJaWYgKCFwbGFuZSkKKwkJcmV0dXJuIE5VTEw7CisKKwlwbGFuZS0+ZGV2aWNlID0g ZGV2aWNlOworCXBsYW5lLT5pZCA9IGlkOworCisJa21zX3BsYW5lX3Byb2JlKHBsYW5lKTsKKwor CXJldHVybiBwbGFuZTsKK30KKwordm9pZCBrbXNfcGxhbmVfZnJlZShzdHJ1Y3Qga21zX3BsYW5l ICpwbGFuZSkKK3sKKwlmcmVlKHBsYW5lKTsKK30KKworaW50IGttc19wbGFuZV9zZXQoc3RydWN0 IGttc19wbGFuZSAqcGxhbmUsIHN0cnVjdCBrbXNfZnJhbWVidWZmZXIgKmZiLAorCQkgIHVuc2ln bmVkIGludCB4LCB1bnNpZ25lZCBpbnQgeSkKK3sKKwlzdHJ1Y3Qga21zX2RldmljZSAqZGV2aWNl ID0gcGxhbmUtPmRldmljZTsKKwlpbnQgZXJyOworCisJZXJyID0gZHJtTW9kZVNldFBsYW5lKGRl dmljZS0+ZmQsIHBsYW5lLT5pZCwgcGxhbmUtPmNydGMtPmlkLCBmYi0+aWQsCisJCQkgICAgICAw LCB4LCB5LCBmYi0+d2lkdGgsIGZiLT5oZWlnaHQsIDAgPDwgMTYsCisJCQkgICAgICAwIDw8IDE2 LCBmYi0+d2lkdGggPDwgMTYsIGZiLT5oZWlnaHQgPDwgMTYpOworCWlmIChlcnIgPCAwKQorCQly ZXR1cm4gLWVycm5vOworCisJcmV0dXJuIDA7Cit9CisKK2Jvb2wga21zX3BsYW5lX3N1cHBvcnRz X2Zvcm1hdChzdHJ1Y3Qga21zX3BsYW5lICpwbGFuZSwgdWludDMyX3QgZm9ybWF0KQoreworCXVu c2lnbmVkIGludCBpOworCisJZm9yIChpID0gMDsgaSA8IHBsYW5lLT5udW1fZm9ybWF0czsgaSsr KQorCQlpZiAocGxhbmUtPmZvcm1hdHNbaV0gPT0gZm9ybWF0KQorCQkJcmV0dXJuIHRydWU7CisK KwlyZXR1cm4gZmFsc2U7Cit9CmRpZmYgLS1naXQgYS90ZXN0cy9rbXMvbGlia21zLXRlc3Qtc2Ny ZWVuLmMgYi90ZXN0cy9rbXMvbGlia21zLXRlc3Qtc2NyZWVuLmMKbmV3IGZpbGUgbW9kZSAxMDA2 NDQKaW5kZXggMDAwMDAwMDAwMDAwLi4zMzY5MDIyMjgwOTAKLS0tIC9kZXYvbnVsbAorKysgYi90 ZXN0cy9rbXMvbGlia21zLXRlc3Qtc2NyZWVuLmMKQEAgLTAsMCArMSw5MiBAQAorLyoKKyAqIENv cHlyaWdodCDCqSAyMDE0IE5WSURJQSBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1pc3Npb24gaXMg aGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9idGFpbmluZyBh CisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1lbnRhdGlvbiBm aWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdhcmUgd2l0aG91 dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICogdGhlIHJpZ2h0 cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1dGUsIHN1Ymxp Y2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBhbmQgdG8gcGVy bWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hlZCB0byBkbyBz bywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICogVGhlIGFib3Zl IGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGluY2x1ZGluZyB0 aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwgY29waWVzIG9y IHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgorICogVEhFIFNP RlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQs IEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhF IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNV TEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBU SEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFOWSBDTEFJTSwg REFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFDVElPTiBPRiBD T05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9VVCBPRiBPUiBJ TiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RIRVIgREVBTElO R1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZkZWYgSEFWRV9DT05GSUdfSAorI2lu Y2x1ZGUgImNvbmZpZy5oIgorI2VuZGlmCisKKyNpbmNsdWRlIDxlcnJuby5oPgorI2luY2x1ZGUg PHN0cmluZy5oPgorCisjaW5jbHVkZSAibGlia21zLXRlc3QuaCIKKworc3RhdGljIHZvaWQga21z X3NjcmVlbl9wcm9iZShzdHJ1Y3Qga21zX3NjcmVlbiAqc2NyZWVuKQoreworCXN0cnVjdCBrbXNf ZGV2aWNlICpkZXZpY2UgPSBzY3JlZW4tPmRldmljZTsKKwlkcm1Nb2RlQ29ubmVjdG9yICpjb247 CisKKwljb24gPSBkcm1Nb2RlR2V0Q29ubmVjdG9yKGRldmljZS0+ZmQsIHNjcmVlbi0+aWQpOwor CWlmICghY29uKQorCQlyZXR1cm47CisKKwlzY3JlZW4tPnR5cGUgPSBjb24tPmNvbm5lY3Rvcl90 eXBlOworCisJaWYgKGNvbi0+Y29ubmVjdGlvbiA9PSBEUk1fTU9ERV9DT05ORUNURUQpCisJCXNj cmVlbi0+Y29ubmVjdGVkID0gdHJ1ZTsKKwllbHNlCisJCXNjcmVlbi0+Y29ubmVjdGVkID0gZmFs c2U7CisKKwltZW1jcHkoJnNjcmVlbi0+bW9kZSwgJmNvbi0+bW9kZXNbMF0sIHNpemVvZihkcm1N b2RlTW9kZUluZm8pKTsKKwlzY3JlZW4tPndpZHRoID0gc2NyZWVuLT5tb2RlLmhkaXNwbGF5Owor CXNjcmVlbi0+aGVpZ2h0ID0gc2NyZWVuLT5tb2RlLnZkaXNwbGF5OworCisJZHJtTW9kZUZyZWVD b25uZWN0b3IoY29uKTsKK30KKworc3RydWN0IGttc19zY3JlZW4gKmttc19zY3JlZW5fY3JlYXRl KHN0cnVjdCBrbXNfZGV2aWNlICpkZXZpY2UsIHVpbnQzMl90IGlkKQoreworCXN0cnVjdCBrbXNf c2NyZWVuICpzY3JlZW47CisKKwlzY3JlZW4gPSBjYWxsb2MoMSwgc2l6ZW9mKCpzY3JlZW4pKTsK KwlpZiAoIXNjcmVlbikKKwkJcmV0dXJuIE5VTEw7CisKKwlzY3JlZW4tPmRldmljZSA9IGRldmlj ZTsKKwlzY3JlZW4tPmlkID0gaWQ7CisKKwlrbXNfc2NyZWVuX3Byb2JlKHNjcmVlbik7CisKKwly ZXR1cm4gc2NyZWVuOworfQorCit2b2lkIGttc19zY3JlZW5fZnJlZShzdHJ1Y3Qga21zX3NjcmVl biAqc2NyZWVuKQoreworCWlmIChzY3JlZW4pCisJCWZyZWUoc2NyZWVuLT5uYW1lKTsKKworCWZy ZWUoc2NyZWVuKTsKK30KKworaW50IGttc19zY3JlZW5fc2V0KHN0cnVjdCBrbXNfc2NyZWVuICpz Y3JlZW4sIHN0cnVjdCBrbXNfY3J0YyAqY3J0YywKKwkJICAgc3RydWN0IGttc19mcmFtZWJ1ZmZl ciAqZmIpCit7CisJc3RydWN0IGttc19kZXZpY2UgKmRldmljZSA9IHNjcmVlbi0+ZGV2aWNlOwor CWludCBlcnI7CisKKwllcnIgPSBkcm1Nb2RlU2V0Q3J0YyhkZXZpY2UtPmZkLCBjcnRjLT5pZCwg ZmItPmlkLCAwLCAwLCAmc2NyZWVuLT5pZCwKKwkJCSAgICAgMSwgJnNjcmVlbi0+bW9kZSk7CisJ aWYgKGVyciA8IDApCisJCXJldHVybiAtZXJybm87CisKKwlyZXR1cm4gMDsKK30KZGlmZiAtLWdp dCBhL3Rlc3RzL2ttcy9saWJrbXMtdGVzdC5oIGIvdGVzdHMva21zL2xpYmttcy10ZXN0LmgKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwLi43YjFkMDJlOWFhMGEKLS0tIC9k ZXYvbnVsbAorKysgYi90ZXN0cy9rbXMvbGlia21zLXRlc3QuaApAQCAtMCwwICsxLDEyMCBAQAor LyoKKyAqIENvcHlyaWdodCDCqSAyMDE0IE5WSURJQSBDb3Jwb3JhdGlvbgorICoKKyAqIFBlcm1p c3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBhbnkgcGVyc29uIG9i dGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29jaWF0ZWQgZG9jdW1l bnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBpbiB0aGUgU29mdHdh cmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGltaXRhdGlvbgorICog dGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxpc2gsIGRpc3RyaWJ1 dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhlIFNvZnR3YXJlLCBh bmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJlIGlzIGZ1cm5pc2hl ZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnM6CisgKgorICog VGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lvbiBub3RpY2UgKGlu Y2x1ZGluZyB0aGUgbmV4dAorICogcGFyYWdyYXBoKSBzaGFsbCBiZSBpbmNsdWRlZCBpbiBhbGwg Y29waWVzIG9yIHN1YnN0YW50aWFsIHBvcnRpb25zIG9mIHRoZQorICogU29mdHdhcmUuCisgKgor ICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVEICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0Yg QU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElNUExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlU RUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1Ig QSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5PTklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNI QUxMCisgKiBUSEUgQVVUSE9SUyBPUiBDT1BZUklHSFQgSE9MREVSUyBCRSBMSUFCTEUgRk9SIEFO WSBDTEFJTSwgREFNQUdFUyBPUiBPVEhFUgorICogTElBQklMSVRZLCBXSEVUSEVSIElOIEFOIEFD VElPTiBPRiBDT05UUkFDVCwgVE9SVCBPUiBPVEhFUldJU0UsIEFSSVNJTkcKKyAqIEZST00sIE9V VCBPRiBPUiBJTiBDT05ORUNUSU9OIFdJVEggVEhFIFNPRlRXQVJFIE9SIFRIRSBVU0UgT1IgT1RI RVIgREVBTElOR1MKKyAqIElOIFRIRSBTT0ZUV0FSRS4KKyAqLworCisjaWZuZGVmIExJQktNU19U RVNUX0gKKyNkZWZpbmUgTElCS01TX1RFU1RfSAorCisjaW5jbHVkZSA8c3RkYm9vbC5oPgorI2lu Y2x1ZGUgPHN0ZGludC5oPgorI2luY2x1ZGUgPHN0ZGxpYi5oPgorCisjaW5jbHVkZSA8eGY4NmRy bU1vZGUuaD4KKworc3RydWN0IGttc19kZXZpY2UgeworCWludCBmZDsKKworCXN0cnVjdCBrbXNf c2NyZWVuICoqc2NyZWVuczsKKwl1bnNpZ25lZCBpbnQgbnVtX3NjcmVlbnM7CisKKwlzdHJ1Y3Qg a21zX2NydGMgKipjcnRjczsKKwl1bnNpZ25lZCBpbnQgbnVtX2NydGNzOworCisJc3RydWN0IGtt c19wbGFuZSAqKnBsYW5lczsKKwl1bnNpZ25lZCBpbnQgbnVtX3BsYW5lczsKK307CisKK3N0cnVj dCBrbXNfZGV2aWNlICprbXNfZGV2aWNlX29wZW4oaW50IGZkKTsKK3ZvaWQga21zX2RldmljZV9j bG9zZShzdHJ1Y3Qga21zX2RldmljZSAqZGV2aWNlKTsKKworc3RydWN0IGttc19wbGFuZSAqa21z X2RldmljZV9maW5kX3BsYW5lX2J5X3R5cGUoc3RydWN0IGttc19kZXZpY2UgKmRldmljZSwKKwkJ CQkJCXVpbnQzMl90IHR5cGUsCisJCQkJCQl1bnNpZ25lZCBpbnQgaW5kZXgpOworCitzdHJ1Y3Qg a21zX2NydGMgeworCXN0cnVjdCBrbXNfZGV2aWNlICpkZXZpY2U7CisJdWludDMyX3QgaWQ7Cit9 OworCitzdHJ1Y3Qga21zX2NydGMgKmttc19jcnRjX2NyZWF0ZShzdHJ1Y3Qga21zX2RldmljZSAq ZGV2aWNlLCB1aW50MzJfdCBpZCk7Cit2b2lkIGttc19jcnRjX2ZyZWUoc3RydWN0IGttc19jcnRj ICpjcnRjKTsKKworc3RydWN0IGttc19mcmFtZWJ1ZmZlciB7CisJc3RydWN0IGttc19kZXZpY2Ug KmRldmljZTsKKworCXVuc2lnbmVkIGludCB3aWR0aDsKKwl1bnNpZ25lZCBpbnQgaGVpZ2h0Owor CXVuc2lnbmVkIGludCBwaXRjaDsKKwl1aW50MzJfdCBmb3JtYXQ7CisJc2l6ZV90IHNpemU7CisK Kwl1aW50MzJfdCBoYW5kbGU7CisJdWludDMyX3QgaWQ7CisKKwl2b2lkICpwdHI7Cit9OworCitz dHJ1Y3Qga21zX2ZyYW1lYnVmZmVyICprbXNfZnJhbWVidWZmZXJfY3JlYXRlKHN0cnVjdCBrbXNf ZGV2aWNlICpkZXZpY2UsCisJCQkJCSAgICAgICB1bnNpZ25lZCBpbnQgd2lkdGgsCisJCQkJCSAg ICAgICB1bnNpZ25lZCBpbnQgaGVpZ2h0LAorCQkJCQkgICAgICAgdWludDMyX3QgZm9ybWF0KTsK K3ZvaWQga21zX2ZyYW1lYnVmZmVyX2ZyZWUoc3RydWN0IGttc19mcmFtZWJ1ZmZlciAqZmIpOwor aW50IGttc19mcmFtZWJ1ZmZlcl9tYXAoc3RydWN0IGttc19mcmFtZWJ1ZmZlciAqZmIsIHZvaWQg KipwdHJwKTsKK3ZvaWQga21zX2ZyYW1lYnVmZmVyX3VubWFwKHN0cnVjdCBrbXNfZnJhbWVidWZm ZXIgKmZiKTsKKworc3RydWN0IGttc19zY3JlZW4geworCXN0cnVjdCBrbXNfZGV2aWNlICpkZXZp Y2U7CisJYm9vbCBjb25uZWN0ZWQ7CisJdWludDMyX3QgdHlwZTsKKwl1aW50MzJfdCBpZDsKKwor CXVuc2lnbmVkIGludCB3aWR0aDsKKwl1bnNpZ25lZCBpbnQgaGVpZ2h0OworCWNoYXIgKm5hbWU7 CisKKwlkcm1Nb2RlTW9kZUluZm8gbW9kZTsKK307CisKK3N0cnVjdCBrbXNfc2NyZWVuICprbXNf c2NyZWVuX2NyZWF0ZShzdHJ1Y3Qga21zX2RldmljZSAqZGV2aWNlLCB1aW50MzJfdCBpZCk7Cit2 b2lkIGttc19zY3JlZW5fZnJlZShzdHJ1Y3Qga21zX3NjcmVlbiAqc2NyZWVuKTsKKworaW50IGtt c19zY3JlZW5fc2V0KHN0cnVjdCBrbXNfc2NyZWVuICpzY3JlZW4sIHN0cnVjdCBrbXNfY3J0YyAq Y3J0YywKKwkJICAgc3RydWN0IGttc19mcmFtZWJ1ZmZlciAqZmIpOworCitzdHJ1Y3Qga21zX3Bs YW5lIHsKKwlzdHJ1Y3Qga21zX2RldmljZSAqZGV2aWNlOworCXN0cnVjdCBrbXNfY3J0YyAqY3J0 YzsKKwl1bnNpZ25lZCBpbnQgdHlwZTsKKwl1aW50MzJfdCBpZDsKKworCXVpbnQzMl90ICpmb3Jt YXRzOworCXVuc2lnbmVkIGludCBudW1fZm9ybWF0czsKK307CisKK3N0cnVjdCBrbXNfcGxhbmUg Kmttc19wbGFuZV9jcmVhdGUoc3RydWN0IGttc19kZXZpY2UgKmRldmljZSwgdWludDMyX3QgaWQp Owordm9pZCBrbXNfcGxhbmVfZnJlZShzdHJ1Y3Qga21zX3BsYW5lICpwbGFuZSk7CisKK2ludCBr bXNfcGxhbmVfc2V0KHN0cnVjdCBrbXNfcGxhbmUgKnBsYW5lLCBzdHJ1Y3Qga21zX2ZyYW1lYnVm ZmVyICpmYiwKKwkJICB1bnNpZ25lZCBpbnQgeCwgdW5zaWduZWQgaW50IHkpOworYm9vbCBrbXNf cGxhbmVfc3VwcG9ydHNfZm9ybWF0KHN0cnVjdCBrbXNfcGxhbmUgKnBsYW5lLCB1aW50MzJfdCBm b3JtYXQpOworCisjZW5kaWYKLS0gCjIuNS4wCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fXwpkcmktZGV2ZWwgbWFpbGluZyBsaXN0CmRyaS1kZXZlbEBsaXN0 cy5mcmVlZGVza3RvcC5vcmcKaHR0cDovL2xpc3RzLmZyZWVkZXNrdG9wLm9yZy9tYWlsbWFuL2xp c3RpbmZvL2RyaS1kZXZlbAo=