From mboxrd@z Thu Jan 1 00:00:00 1970 From: Oded Gabbay Subject: [PATCH 02/13] drm/amdgpu: Add H/W agnostic amdgpu <--> amdkfd interface Date: Fri, 12 Jun 2015 22:31:10 +0300 Message-ID: <1434137481-13315-3-git-send-email-oded.gabbay@gmail.com> References: <1434137481-13315-1-git-send-email-oded.gabbay@gmail.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail-wg0-f47.google.com (mail-wg0-f47.google.com [74.125.82.47]) by gabe.freedesktop.org (Postfix) with ESMTP id 158626E456 for ; Fri, 12 Jun 2015 12:31:27 -0700 (PDT) Received: by wgme6 with SMTP id e6so30532535wgm.2 for ; Fri, 12 Jun 2015 12:31:26 -0700 (PDT) In-Reply-To: <1434137481-13315-1-git-send-email-oded.gabbay@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, alexdeucher@gmail.com List-Id: dri-devel@lists.freedesktop.org VGhpcyBwYXRjaCBhZGRzIGFuIGludGVyZmFjZSBmaWxlIGJldHdlZW4gYW1kZ3B1IGFuZCBhbWRr ZmQuIFRoaXMKaW50ZXJmYWNlIGZpbGUgaXMgSC9XIGFnbm9zdGljLCB0aHVzIGNvbnRhaW5pbmcg ZnVuY3Rpb25zIHRoYXQKb3BlcmF0ZSB0aGUgc2FtZSBmb3IgYW55IEFNRCBBUFUvR1BVIEgvVyBn ZW5lcmF0aW9uLgoKVGhlIGZ1bmN0aW9ucyBpbiB0aGlzIGludGVyZmFjZSBtaXJyb3IgKHNvbWUp IG9mIHRoZSBmdW5jdGlvbnMgaW4KcmFkZW9uX2tmZC5jICh0aGUgcmFkZW9uPC0tPmFtZGtmZCBp bnRlcmZhY2UgZmlsZSkuIFRoZSBtYWluIGZ1bmN0aW9ucwphcmU6CgotIGFtZGdwdV9hbWRrZmRf aW5pdCAtIGluaXRpYWxpemUgdGhlIGFtZGtmZCBtb2R1bGUKLSBhbWRncHVfYW1ka2ZkX2xvYWRf aW50ZXJmYWNlIC0gbG9hZCB0aGUgSC9XIGludGVyZmFjZSBhY2NvcmRpbmcgdG8gdGhlCiAgY3Vy cmVudGx5IHByb2JlZCBkZXZpY2UKLSBhbWRncHVfYW1ka2ZkX2RldmljZV9wcm9iZSAtIHByb2Jl IHRoZSBkZXZpY2UgaW4gYW1ka2ZkCi0gYW1kZ3B1X2FtZGtmZF9kZXZpY2VfaW5pdCAtIGluaXRp YWxpemUgdGhlIGRldmljZSBpbiBhbWRrZmQKLSBhbWRncHVfYW1ka2ZkX2ludGVycnVwdCAtIGNh bGwgdGhlIElTUiBvZiBhbWRrZmQKLSBhbWRncHVfYW1ka2ZkX3N1c3BlbmQgLSBzdXNwZW5kIGNh bGxiYWNrIGZyb20gYW1kZ3B1Ci0gYW1kZ3B1X2FtZGtmZF9yZXN1bWUgLSByZXN1bWUgY2FsbGJh Y2sgZnJvbSBhbWRncHUKClRoaXMgcGF0Y2ggYWxzbyBtb2RpZmllcyB0aGUgcmVsZXZhbnQgYW1k Z3B1IGZpbGVzLCB0byB1c2UgdGhpcyBuZXcKaW50ZXJmYWNlLgoKU2lnbmVkLW9mZi1ieTogT2Rl ZCBHYWJiYXkgPG9kZWQuZ2FiYmF5QGdtYWlsLmNvbT4KLS0tCiBNQUlOVEFJTkVSUyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDIgKwogZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvTWFrZWZpbGUgICAgICAgIHwgICA0ICsKIGRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdS5oICAgICAgICB8ICAgMyArCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf YW1ka2ZkLmMgfCAyNjIgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIGRyaXZlcnMvZ3B1 L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaCB8ICA2NCArKysrKysrCiBkcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfZHJ2LmMgICAgfCAgIDUgKwogZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2loLmMgICAgIHwgICA3ICsKIGRyaXZlcnMvZ3B1L2RybS9hbWQv YW1kZ3B1L2FtZGdwdV9rbXMuYyAgICB8ICAgNyArCiBkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdw dS9jaWsuYyAgICAgICAgICAgfCAgMTEgKy0KIDkgZmlsZXMgY2hhbmdlZCwgMzY0IGluc2VydGlv bnMoKyksIDEgZGVsZXRpb24oLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dwdS9kcm0v YW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkLmMKIGNyZWF0ZSBtb2RlIDEwMDY0NCBkcml2ZXJzL2dw dS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfYW1ka2ZkLmgKCmRpZmYgLS1naXQgYS9NQUlOVEFJTkVS UyBiL01BSU5UQUlORVJTCmluZGV4IDY3NjEzMTguLjU4MWM4ZDQgMTAwNjQ0Ci0tLSBhL01BSU5U QUlORVJTCisrKyBiL01BSU5UQUlORVJTCkBAIC02MzUsNiArNjM1LDggQEAgTToJT2RlZCBHYWJi YXkgPG9kZWQuZ2FiYmF5QGdtYWlsLmNvbT4KIEw6CWRyaS1kZXZlbEBsaXN0cy5mcmVlZGVza3Rv cC5vcmcKIFQ6CWdpdCBnaXQ6Ly9wZW9wbGUuZnJlZWRlc2t0b3Aub3JnL35nYWJiYXlvL2xpbnV4 LmdpdAogUzoJU3VwcG9ydGVkCitGOglkcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf YW1ka2ZkLmMKK0Y6CWRyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaAog RjoJZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRrZmQvCiBGOglkcml2ZXJzL2dwdS9kcm0vYW1kL2lu Y2x1ZGUvY2lrX3N0cnVjdHMuaAogRjoJZHJpdmVycy9ncHUvZHJtL2FtZC9pbmNsdWRlL2tnZF9r ZmRfaW50ZXJmYWNlLmgKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L01h a2VmaWxlIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUKaW5kZXggNjE2ZGZk NC4uODkxZjAyYyAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZp bGUKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvTWFrZWZpbGUKQEAgLTcxLDYgKzcx LDEwIEBAIGFtZGdwdS15ICs9IFwKIAlhbWRncHVfdmNlLm8gXAogCXZjZV92M18wLm8KIAorIyBh ZGQgYW1ka2ZkIGludGVyZmFjZXMKK2FtZGdwdS15ICs9IFwKKwkgYW1kZ3B1X2FtZGtmZC5vCisK IGFtZGdwdS0kKENPTkZJR19DT01QQVQpICs9IGFtZGdwdV9pb2MzMi5vCiBhbWRncHUtJChDT05G SUdfVkdBX1NXSVRDSEVST08pICs9IGFtZGdwdV9hdHB4X2hhbmRsZXIubwogYW1kZ3B1LSQoQ09O RklHX0FDUEkpICs9IGFtZGdwdV9hY3BpLm8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdS5oIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgK aW5kZXggMjI4NjZkMS4uMTdhMDg4NSAxMDA2NDQKLS0tIGEvZHJpdmVycy9ncHUvZHJtL2FtZC9h bWRncHUvYW1kZ3B1LmgKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1LmgK QEAgLTIwMTEsNiArMjAxMSw5IEBAIHN0cnVjdCBhbWRncHVfZGV2aWNlIHsKIAkvKiB0cmFja2lu ZyBwaW5uZWQgbWVtb3J5ICovCiAJdTY0IHZyYW1fcGluX3NpemU7CiAJdTY0IGdhcnRfcGluX3Np emU7CisKKwkvKiBhbWRrZmQgaW50ZXJmYWNlICovCisJc3RydWN0IGtmZF9kZXYgICAgICAgICAg KmtmZDsKIH07CiAKIGJvb2wgYW1kZ3B1X2RldmljZV9pc19weChzdHJ1Y3QgZHJtX2RldmljZSAq ZGV2KTsKZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRr ZmQuYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuYwpuZXcgZmls ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4yMDcxYTliCi0tLSAvZGV2L251bGwKKysrIGIv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5jCkBAIC0wLDAgKzEsMjYy IEBACisvKgorICogQ29weXJpZ2h0IDIwMTQgQWR2YW5jZWQgTWljcm8gRGV2aWNlcywgSW5jLgor ICoKKyAqIFBlcm1pc3Npb24gaXMgaGVyZWJ5IGdyYW50ZWQsIGZyZWUgb2YgY2hhcmdlLCB0byBh bnkgcGVyc29uIG9idGFpbmluZyBhCisgKiBjb3B5IG9mIHRoaXMgc29mdHdhcmUgYW5kIGFzc29j aWF0ZWQgZG9jdW1lbnRhdGlvbiBmaWxlcyAodGhlICJTb2Z0d2FyZSIpLAorICogdG8gZGVhbCBp biB0aGUgU29mdHdhcmUgd2l0aG91dCByZXN0cmljdGlvbiwgaW5jbHVkaW5nIHdpdGhvdXQgbGlt aXRhdGlvbgorICogdGhlIHJpZ2h0cyB0byB1c2UsIGNvcHksIG1vZGlmeSwgbWVyZ2UsIHB1Ymxp c2gsIGRpc3RyaWJ1dGUsIHN1YmxpY2Vuc2UsCisgKiBhbmQvb3Igc2VsbCBjb3BpZXMgb2YgdGhl IFNvZnR3YXJlLCBhbmQgdG8gcGVybWl0IHBlcnNvbnMgdG8gd2hvbSB0aGUKKyAqIFNvZnR3YXJl IGlzIGZ1cm5pc2hlZCB0byBkbyBzbywgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIGNvbmRpdGlv bnM6CisgKgorICogVGhlIGFib3ZlIGNvcHlyaWdodCBub3RpY2UgYW5kIHRoaXMgcGVybWlzc2lv biBub3RpY2Ugc2hhbGwgYmUgaW5jbHVkZWQgaW4KKyAqIGFsbCBjb3BpZXMgb3Igc3Vic3RhbnRp YWwgcG9ydGlvbnMgb2YgdGhlIFNvZnR3YXJlLgorICoKKyAqIFRIRSBTT0ZUV0FSRSBJUyBQUk9W SURFRCAiQVMgSVMiLCBXSVRIT1VUIFdBUlJBTlRZIE9GIEFOWSBLSU5ELCBFWFBSRVNTIE9SCisg KiBJTVBMSUVELCBJTkNMVURJTkcgQlVUIE5PVCBMSU1JVEVEIFRPIFRIRSBXQVJSQU5USUVTIE9G IE1FUkNIQU5UQUJJTElUWSwKKyAqIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFO RCBOT05JTkZSSU5HRU1FTlQuICBJTiBOTyBFVkVOVCBTSEFMTAorICogVEhFIENPUFlSSUdIVCBI T0xERVIoUykgT1IgQVVUSE9SKFMpIEJFIExJQUJMRSBGT1IgQU5ZIENMQUlNLCBEQU1BR0VTIE9S CisgKiBPVEhFUiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQU4gQUNUSU9OIE9GIENPTlRSQUNULCBU T1JUIE9SIE9USEVSV0lTRSwKKyAqIEFSSVNJTkcgRlJPTSwgT1VUIE9GIE9SIElOIENPTk5FQ1RJ T04gV0lUSCBUSEUgU09GVFdBUkUgT1IgVEhFIFVTRSBPUgorICogT1RIRVIgREVBTElOR1MgSU4g VEhFIFNPRlRXQVJFLgorICovCisKKyNpbmNsdWRlICJhbWRncHVfYW1ka2ZkLmgiCisjaW5jbHVk ZSAiYW1kZ3B1X2ZhbWlseS5oIgorI2luY2x1ZGUgPGRybS9kcm1QLmg+CisjaW5jbHVkZSAiYW1k Z3B1LmgiCisjaW5jbHVkZSA8bGludXgvbW9kdWxlLmg+CisKK2NvbnN0IHN0cnVjdCBrZmQya2dk X2NhbGxzICprZmQya2dkOworY29uc3Qgc3RydWN0IGtnZDJrZmRfY2FsbHMgKmtnZDJrZmQ7Citi b29sICgqa2dkMmtmZF9pbml0X3ApKHVuc2lnbmVkLCBjb25zdCBzdHJ1Y3Qga2dkMmtmZF9jYWxs cyoqKTsKKworYm9vbCBhbWRncHVfYW1ka2ZkX2luaXQodm9pZCkKK3sKKyNpZiBkZWZpbmVkKENP TkZJR19IU0FfQU1EX01PRFVMRSkKKwlib29sICgqa2dkMmtmZF9pbml0X3ApKHVuc2lnbmVkLCBj b25zdCBzdHJ1Y3Qga2dkMmtmZF9jYWxscyoqKTsKKworCWtnZDJrZmRfaW5pdF9wID0gc3ltYm9s X3JlcXVlc3Qoa2dkMmtmZF9pbml0KTsKKworCWlmIChrZ2Qya2ZkX2luaXRfcCA9PSBOVUxMKQor CQlyZXR1cm4gZmFsc2U7CisjZW5kaWYKKwlyZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBhbWRncHVf YW1ka2ZkX2xvYWRfaW50ZXJmYWNlKHN0cnVjdCBhbWRncHVfZGV2aWNlICpyZGV2KQoreworI2lm IGRlZmluZWQoQ09ORklHX0hTQV9BTURfTU9EVUxFKQorCWJvb2wgKCprZ2Qya2ZkX2luaXRfcCko dW5zaWduZWQsIGNvbnN0IHN0cnVjdCBrZ2Qya2ZkX2NhbGxzKiopOworI2VuZGlmCisKKwlzd2l0 Y2ggKHJkZXYtPmFzaWNfdHlwZSkgeworCWNhc2UgQ0hJUF9LQVZFUkk6CisJZGVmYXVsdDoKKwkJ cmV0dXJuIGZhbHNlOworCX0KKworI2lmIGRlZmluZWQoQ09ORklHX0hTQV9BTURfTU9EVUxFKQor CWtnZDJrZmRfaW5pdF9wID0gc3ltYm9sX3JlcXVlc3Qoa2dkMmtmZF9pbml0KTsKKworCWlmIChr Z2Qya2ZkX2luaXRfcCA9PSBOVUxMKSB7CisJCWtmZDJrZ2QgPSBOVUxMOworCQlyZXR1cm4gZmFs c2U7CisJfQorCisJaWYgKCFrZ2Qya2ZkX2luaXRfcChLRkRfSU5URVJGQUNFX1ZFUlNJT04sICZr Z2Qya2ZkKSkgeworCQlzeW1ib2xfcHV0KGtnZDJrZmRfaW5pdCk7CisJCWtmZDJrZ2QgPSBOVUxM OworCQlrZ2Qya2ZkID0gTlVMTDsKKworCQlyZXR1cm4gZmFsc2U7CisJfQorCisJcmV0dXJuIHRy dWU7CisjZWxpZiBkZWZpbmVkKENPTkZJR19IU0FfQU1EKQorCWlmICgha2dkMmtmZF9pbml0KEtG RF9JTlRFUkZBQ0VfVkVSU0lPTiwgJmtnZDJrZmQpKSB7CisJCWtmZDJrZ2QgPSBOVUxMOworCQlr Z2Qya2ZkID0gTlVMTDsKKwkJcmV0dXJuIGZhbHNlOworCX0KKworCXJldHVybiB0cnVlOworI2Vs c2UKKwlrZmQya2dkID0gTlVMTDsKKwlyZXR1cm4gZmFsc2U7CisjZW5kaWYKK30KKwordm9pZCBh bWRncHVfYW1ka2ZkX2Zpbmkodm9pZCkKK3sKKwlpZiAoa2dkMmtmZCkgeworCQlrZ2Qya2ZkLT5l eGl0KCk7CisJCXN5bWJvbF9wdXQoa2dkMmtmZF9pbml0KTsKKwl9Cit9CisKK3ZvaWQgYW1kZ3B1 X2FtZGtmZF9kZXZpY2VfcHJvYmUoc3RydWN0IGFtZGdwdV9kZXZpY2UgKnJkZXYpCit7CisJaWYg KGtnZDJrZmQpCisJCXJkZXYtPmtmZCA9IGtnZDJrZmQtPnByb2JlKChzdHJ1Y3Qga2dkX2RldiAq KXJkZXYsCisJCQkJCXJkZXYtPnBkZXYsIGtmZDJrZ2QpOworfQorCit2b2lkIGFtZGdwdV9hbWRr ZmRfZGV2aWNlX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKnJkZXYpCit7CisJaWYgKHJkZXYt PmtmZCkgeworCQlzdHJ1Y3Qga2dkMmtmZF9zaGFyZWRfcmVzb3VyY2VzIGdwdV9yZXNvdXJjZXMg PSB7CisJCQkuY29tcHV0ZV92bWlkX2JpdG1hcCA9IDB4RkYwMCwKKworCQkJLmZpcnN0X2NvbXB1 dGVfcGlwZSA9IDEsCisJCQkuY29tcHV0ZV9waXBlX2NvdW50ID0gNCAtIDEsCisJCX07CisKKwkJ YW1kZ3B1X2Rvb3JiZWxsX2dldF9rZmRfaW5mbyhyZGV2LAorCQkJCSZncHVfcmVzb3VyY2VzLmRv b3JiZWxsX3BoeXNpY2FsX2FkZHJlc3MsCisJCQkJJmdwdV9yZXNvdXJjZXMuZG9vcmJlbGxfYXBl cnR1cmVfc2l6ZSwKKwkJCQkmZ3B1X3Jlc291cmNlcy5kb29yYmVsbF9zdGFydF9vZmZzZXQpOwor CisJCWtnZDJrZmQtPmRldmljZV9pbml0KHJkZXYtPmtmZCwgJmdwdV9yZXNvdXJjZXMpOworCX0K K30KKwordm9pZCBhbWRncHVfYW1ka2ZkX2RldmljZV9maW5pKHN0cnVjdCBhbWRncHVfZGV2aWNl ICpyZGV2KQoreworCWlmIChyZGV2LT5rZmQpIHsKKwkJa2dkMmtmZC0+ZGV2aWNlX2V4aXQocmRl di0+a2ZkKTsKKwkJcmRldi0+a2ZkID0gTlVMTDsKKwl9Cit9CisKK3ZvaWQgYW1kZ3B1X2FtZGtm ZF9pbnRlcnJ1cHQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKnJkZXYsCisJCWNvbnN0IHZvaWQgKmlo X3JpbmdfZW50cnkpCit7CisJaWYgKHJkZXYtPmtmZCkKKwkJa2dkMmtmZC0+aW50ZXJydXB0KHJk ZXYtPmtmZCwgaWhfcmluZ19lbnRyeSk7Cit9CisKK3ZvaWQgYW1kZ3B1X2FtZGtmZF9zdXNwZW5k KHN0cnVjdCBhbWRncHVfZGV2aWNlICpyZGV2KQoreworCWlmIChyZGV2LT5rZmQpCisJCWtnZDJr ZmQtPnN1c3BlbmQocmRldi0+a2ZkKTsKK30KKworaW50IGFtZGdwdV9hbWRrZmRfcmVzdW1lKHN0 cnVjdCBhbWRncHVfZGV2aWNlICpyZGV2KQoreworCWludCByID0gMDsKKworCWlmIChyZGV2LT5r ZmQpCisJCXIgPSBrZ2Qya2ZkLT5yZXN1bWUocmRldi0+a2ZkKTsKKworCXJldHVybiByOworfQor Cit1MzIgcG9vbF90b19kb21haW4oZW51bSBrZ2RfbWVtb3J5X3Bvb2wgcCkKK3sKKwlzd2l0Y2gg KHApIHsKKwljYXNlIEtHRF9QT09MX0ZSQU1FQlVGRkVSOiByZXR1cm4gQU1ER1BVX0dFTV9ET01B SU5fVlJBTTsKKwlkZWZhdWx0OiByZXR1cm4gQU1ER1BVX0dFTV9ET01BSU5fR1RUOworCX0KK30K KworaW50IGFsbG9jX2d0dF9tZW0oc3RydWN0IGtnZF9kZXYgKmtnZCwgc2l6ZV90IHNpemUsCisJ CQl2b2lkICoqbWVtX29iaiwgdWludDY0X3QgKmdwdV9hZGRyLAorCQkJdm9pZCAqKmNwdV9wdHIp Cit7CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKnJkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2Ug KilrZ2Q7CisJc3RydWN0IGtnZF9tZW0gKiptZW0gPSAoc3RydWN0IGtnZF9tZW0gKiopIG1lbV9v Ymo7CisJaW50IHI7CisKKwlCVUdfT04oa2dkID09IE5VTEwpOworCUJVR19PTihncHVfYWRkciA9 PSBOVUxMKTsKKwlCVUdfT04oY3B1X3B0ciA9PSBOVUxMKTsKKworCSptZW0gPSBrbWFsbG9jKHNp emVvZihzdHJ1Y3Qga2dkX21lbSksIEdGUF9LRVJORUwpOworCWlmICgoKm1lbSkgPT0gTlVMTCkK KwkJcmV0dXJuIC1FTk9NRU07CisKKwlyID0gYW1kZ3B1X2JvX2NyZWF0ZShyZGV2LCBzaXplLCBQ QUdFX1NJWkUsIHRydWUsIEFNREdQVV9HRU1fRE9NQUlOX0dUVCwKKwkJCUFNREdQVV9HRU1fQ1JF QVRFX0NQVV9HVFRfVVNXQywgTlVMTCwgJigqbWVtKS0+Ym8pOworCWlmIChyKSB7CisJCWRldl9l cnIocmRldi0+ZGV2LAorCQkJImZhaWxlZCB0byBhbGxvY2F0ZSBCTyBmb3IgYW1ka2ZkICglZClc biIsIHIpOworCQlyZXR1cm4gcjsKKwl9CisKKwkvKiBtYXAgdGhlIGJ1ZmZlciAqLworCXIgPSBh bWRncHVfYm9fcmVzZXJ2ZSgoKm1lbSktPmJvLCB0cnVlKTsKKwlpZiAocikgeworCQlkZXZfZXJy KHJkZXYtPmRldiwgIiglZCkgZmFpbGVkIHRvIHJlc2VydmUgYm8gZm9yIGFtZGtmZFxuIiwgcik7 CisJCWdvdG8gYWxsb2NhdGVfbWVtX3Jlc2VydmVfYm9fZmFpbGVkOworCX0KKworCXIgPSBhbWRn cHVfYm9fcGluKCgqbWVtKS0+Ym8sIEFNREdQVV9HRU1fRE9NQUlOX0dUVCwKKwkJCQkmKCptZW0p LT5ncHVfYWRkcik7CisJaWYgKHIpIHsKKwkJZGV2X2VycihyZGV2LT5kZXYsICIoJWQpIGZhaWxl ZCB0byBwaW4gYm8gZm9yIGFtZGtmZFxuIiwgcik7CisJCWdvdG8gYWxsb2NhdGVfbWVtX3Bpbl9i b19mYWlsZWQ7CisJfQorCSpncHVfYWRkciA9ICgqbWVtKS0+Z3B1X2FkZHI7CisKKwlyID0gYW1k Z3B1X2JvX2ttYXAoKCptZW0pLT5ibywgJigqbWVtKS0+Y3B1X3B0cik7CisJaWYgKHIpIHsKKwkJ ZGV2X2VycihyZGV2LT5kZXYsCisJCQkiKCVkKSBmYWlsZWQgdG8gbWFwIGJvIHRvIGtlcm5lbCBm b3IgYW1ka2ZkXG4iLCByKTsKKwkJZ290byBhbGxvY2F0ZV9tZW1fa21hcF9ib19mYWlsZWQ7CisJ fQorCSpjcHVfcHRyID0gKCptZW0pLT5jcHVfcHRyOworCisJYW1kZ3B1X2JvX3VucmVzZXJ2ZSgo Km1lbSktPmJvKTsKKworCXJldHVybiAwOworCithbGxvY2F0ZV9tZW1fa21hcF9ib19mYWlsZWQ6 CisJYW1kZ3B1X2JvX3VucGluKCgqbWVtKS0+Ym8pOworYWxsb2NhdGVfbWVtX3Bpbl9ib19mYWls ZWQ6CisJYW1kZ3B1X2JvX3VucmVzZXJ2ZSgoKm1lbSktPmJvKTsKK2FsbG9jYXRlX21lbV9yZXNl cnZlX2JvX2ZhaWxlZDoKKwlhbWRncHVfYm9fdW5yZWYoJigqbWVtKS0+Ym8pOworCisJcmV0dXJu IHI7Cit9CisKK3ZvaWQgZnJlZV9ndHRfbWVtKHN0cnVjdCBrZ2RfZGV2ICprZ2QsIHZvaWQgKm1l bV9vYmopCit7CisJc3RydWN0IGtnZF9tZW0gKm1lbSA9IChzdHJ1Y3Qga2dkX21lbSAqKSBtZW1f b2JqOworCisJQlVHX09OKG1lbSA9PSBOVUxMKTsKKworCWFtZGdwdV9ib19yZXNlcnZlKG1lbS0+ Ym8sIHRydWUpOworCWFtZGdwdV9ib19rdW5tYXAobWVtLT5ibyk7CisJYW1kZ3B1X2JvX3VucGlu KG1lbS0+Ym8pOworCWFtZGdwdV9ib191bnJlc2VydmUobWVtLT5ibyk7CisJYW1kZ3B1X2JvX3Vu cmVmKCYobWVtLT5ibykpOworCWtmcmVlKG1lbSk7Cit9CisKK3VpbnQ2NF90IGdldF92bWVtX3Np emUoc3RydWN0IGtnZF9kZXYgKmtnZCkKK3sKKwlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqcmRldiA9 CisJCShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWtnZDsKKworCUJVR19PTihrZ2QgPT0gTlVMTCk7 CisKKwlyZXR1cm4gcmRldi0+bWMucmVhbF92cmFtX3NpemU7Cit9CisKK3VpbnQ2NF90IGdldF9n cHVfY2xvY2tfY291bnRlcihzdHJ1Y3Qga2dkX2RldiAqa2dkKQoreworCXN0cnVjdCBhbWRncHVf ZGV2aWNlICpyZGV2ID0gKHN0cnVjdCBhbWRncHVfZGV2aWNlICopa2dkOworCisJaWYgKHJkZXYt PmFzaWNfZnVuY3MtPmdldF9ncHVfY2xvY2tfY291bnRlcikKKwkJcmV0dXJuIHJkZXYtPmFzaWNf ZnVuY3MtPmdldF9ncHVfY2xvY2tfY291bnRlcihyZGV2KTsKKwlyZXR1cm4gMDsKK30KKwordWlu dDMyX3QgZ2V0X21heF9lbmdpbmVfY2xvY2tfaW5fbWh6KHN0cnVjdCBrZ2RfZGV2ICprZ2QpCit7 CisJc3RydWN0IGFtZGdwdV9kZXZpY2UgKnJkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKilr Z2Q7CisKKwkvKiBUaGUgc2NsayBpcyBpbiBxdWFudGFzIG9mIDEwa0h6ICovCisJcmV0dXJuIHJk ZXYtPnBtLmRwbS5keW5fc3RhdGUubWF4X2Nsb2NrX3ZvbHRhZ2Vfb25fYWMuc2NsayAvIDEwMDsK K30KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQu aCBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9hbWRrZmQuaApuZXcgZmlsZSBt b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jODEyNDJlCi0tLSAvZGV2L251bGwKKysrIGIvZHJp dmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2FtZGtmZC5oCkBAIC0wLDAgKzEsNjQgQEAK Ky8qCisgKiBDb3B5cmlnaHQgMjAxNCBBZHZhbmNlZCBNaWNybyBEZXZpY2VzLCBJbmMuCisgKgor ICogUGVybWlzc2lvbiBpcyBoZXJlYnkgZ3JhbnRlZCwgZnJlZSBvZiBjaGFyZ2UsIHRvIGFueSBw ZXJzb24gb2J0YWluaW5nIGEKKyAqIGNvcHkgb2YgdGhpcyBzb2Z0d2FyZSBhbmQgYXNzb2NpYXRl ZCBkb2N1bWVudGF0aW9uIGZpbGVzICh0aGUgIlNvZnR3YXJlIiksCisgKiB0byBkZWFsIGluIHRo ZSBTb2Z0d2FyZSB3aXRob3V0IHJlc3RyaWN0aW9uLCBpbmNsdWRpbmcgd2l0aG91dCBsaW1pdGF0 aW9uCisgKiB0aGUgcmlnaHRzIHRvIHVzZSwgY29weSwgbW9kaWZ5LCBtZXJnZSwgcHVibGlzaCwg ZGlzdHJpYnV0ZSwgc3VibGljZW5zZSwKKyAqIGFuZC9vciBzZWxsIGNvcGllcyBvZiB0aGUgU29m dHdhcmUsIGFuZCB0byBwZXJtaXQgcGVyc29ucyB0byB3aG9tIHRoZQorICogU29mdHdhcmUgaXMg ZnVybmlzaGVkIHRvIGRvIHNvLCBzdWJqZWN0IHRvIHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoK KyAqCisgKiBUaGUgYWJvdmUgY29weXJpZ2h0IG5vdGljZSBhbmQgdGhpcyBwZXJtaXNzaW9uIG5v dGljZSBzaGFsbCBiZSBpbmNsdWRlZCBpbgorICogYWxsIGNvcGllcyBvciBzdWJzdGFudGlhbCBw b3J0aW9ucyBvZiB0aGUgU29mdHdhcmUuCisgKgorICogVEhFIFNPRlRXQVJFIElTIFBST1ZJREVE ICJBUyBJUyIsIFdJVEhPVVQgV0FSUkFOVFkgT0YgQU5ZIEtJTkQsIEVYUFJFU1MgT1IKKyAqIElN UExJRUQsIElOQ0xVRElORyBCVVQgTk9UIExJTUlURUQgVE8gVEhFIFdBUlJBTlRJRVMgT0YgTUVS Q0hBTlRBQklMSVRZLAorICogRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQU5EIE5P TklORlJJTkdFTUVOVC4gIElOIE5PIEVWRU5UIFNIQUxMCisgKiBUSEUgQ09QWVJJR0hUIEhPTERF UihTKSBPUiBBVVRIT1IoUykgQkUgTElBQkxFIEZPUiBBTlkgQ0xBSU0sIERBTUFHRVMgT1IKKyAq IE9USEVSIExJQUJJTElUWSwgV0hFVEhFUiBJTiBBTiBBQ1RJT04gT0YgQ09OVFJBQ1QsIFRPUlQg T1IgT1RIRVJXSVNFLAorICogQVJJU0lORyBGUk9NLCBPVVQgT0YgT1IgSU4gQ09OTkVDVElPTiBX SVRIIFRIRSBTT0ZUV0FSRSBPUiBUSEUgVVNFIE9SCisgKiBPVEhFUiBERUFMSU5HUyBJTiBUSEUg U09GVFdBUkUuCisgKi8KKworLyogYW1kZ3B1X2FtZGtmZC5oIGRlZmluZXMgdGhlIHByaXZhdGUg aW50ZXJmYWNlIGJldHdlZW4gYW1kZ3B1IGFuZCBhbWRrZmQuICovCisKKyNpZm5kZWYgQU1ER1BV X0FNREtGRF9IX0lOQ0xVREVECisjZGVmaW5lIEFNREdQVV9BTURLRkRfSF9JTkNMVURFRAorCisj aW5jbHVkZSA8bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxrZ2Rfa2ZkX2ludGVyZmFjZS5oPgor CitzdHJ1Y3QgYW1kZ3B1X2RldmljZTsKKworc3RydWN0IGtnZF9tZW0geworCXN0cnVjdCBhbWRn cHVfYm8gKmJvOworCXVpbnQ2NF90IGdwdV9hZGRyOworCXZvaWQgKmNwdV9wdHI7Cit9OworCiti b29sIGFtZGdwdV9hbWRrZmRfaW5pdCh2b2lkKTsKK3ZvaWQgYW1kZ3B1X2FtZGtmZF9maW5pKHZv aWQpOworCitib29sIGFtZGdwdV9hbWRrZmRfbG9hZF9pbnRlcmZhY2Uoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKnJkZXYpOworCit2b2lkIGFtZGdwdV9hbWRrZmRfc3VzcGVuZChzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqcmRldik7CitpbnQgYW1kZ3B1X2FtZGtmZF9yZXN1bWUoc3RydWN0IGFtZGdwdV9k ZXZpY2UgKnJkZXYpOwordm9pZCBhbWRncHVfYW1ka2ZkX2ludGVycnVwdChzdHJ1Y3QgYW1kZ3B1 X2RldmljZSAqcmRldiwKKwkJCWNvbnN0IHZvaWQgKmloX3JpbmdfZW50cnkpOwordm9pZCBhbWRn cHVfYW1ka2ZkX2RldmljZV9wcm9iZShzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqcmRldik7Cit2b2lk IGFtZGdwdV9hbWRrZmRfZGV2aWNlX2luaXQoc3RydWN0IGFtZGdwdV9kZXZpY2UgKnJkZXYpOwor dm9pZCBhbWRncHVfYW1ka2ZkX2RldmljZV9maW5pKHN0cnVjdCBhbWRncHVfZGV2aWNlICpyZGV2 KTsKKworc3RydWN0IGtmZDJrZ2RfY2FsbHMgKmFtZGdwdV9hbWRrZmRfZ2Z4XzdfZ2V0X2Z1bmN0 aW9ucyh2b2lkKTsKKworLyogU2hhcmVkIEFQSSAqLworaW50IGFsbG9jX2d0dF9tZW0oc3RydWN0 IGtnZF9kZXYgKmtnZCwgc2l6ZV90IHNpemUsCisJCQl2b2lkICoqbWVtX29iaiwgdWludDY0X3Qg KmdwdV9hZGRyLAorCQkJdm9pZCAqKmNwdV9wdHIpOwordm9pZCBmcmVlX2d0dF9tZW0oc3RydWN0 IGtnZF9kZXYgKmtnZCwgdm9pZCAqbWVtX29iaik7Cit1aW50NjRfdCBnZXRfdm1lbV9zaXplKHN0 cnVjdCBrZ2RfZGV2ICprZ2QpOwordWludDY0X3QgZ2V0X2dwdV9jbG9ja19jb3VudGVyKHN0cnVj dCBrZ2RfZGV2ICprZ2QpOworCit1aW50MzJfdCBnZXRfbWF4X2VuZ2luZV9jbG9ja19pbl9taHoo c3RydWN0IGtnZF9kZXYgKmtnZCk7CisKKyNlbmRpZiAvKiBBTURHUFVfQU1ES0ZEX0hfSU5DTFVE RUQgKi8KZGlmZiAtLWdpdCBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kcnYu YyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9kcnYuYwppbmRleCA1NmRhOTYy Li4xMTU5MDZmIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVf ZHJ2LmMKKysrIGIvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2Rydi5jCkBAIC00 NCw2ICs0NCw4IEBACiAjaW5jbHVkZSAiYW1kZ3B1LmgiCiAjaW5jbHVkZSAiYW1kZ3B1X2lycS5o IgogCisjaW5jbHVkZSAiYW1kZ3B1X2FtZGtmZC5oIgorCiAvKgogICogS01TIHdyYXBwZXIuCiAg KiAtIDMuMC4wIC0gaW5pdGlhbCBkcml2ZXIKQEAgLTUyNywxMiArNTI5LDE1IEBAIHN0YXRpYyBp bnQgX19pbml0IGFtZGdwdV9pbml0KHZvaWQpCiAJZHJpdmVyLT5udW1faW9jdGxzID0gYW1kZ3B1 X21heF9rbXNfaW9jdGw7CiAJYW1kZ3B1X3JlZ2lzdGVyX2F0cHhfaGFuZGxlcigpOwogCisJYW1k Z3B1X2FtZGtmZF9pbml0KCk7CisKIAkvKiBsZXQgbW9kcHJvYmUgb3ZlcnJpZGUgdmdhIGNvbnNv bGUgc2V0dGluZyAqLwogCXJldHVybiBkcm1fcGNpX2luaXQoZHJpdmVyLCBwZHJpdmVyKTsKIH0K IAogc3RhdGljIHZvaWQgX19leGl0IGFtZGdwdV9leGl0KHZvaWQpCiB7CisJYW1kZ3B1X2FtZGtm ZF9maW5pKCk7CiAJZHJtX3BjaV9leGl0KGRyaXZlciwgcGRyaXZlcik7CiAJYW1kZ3B1X3VucmVn aXN0ZXJfYXRweF9oYW5kbGVyKCk7CiB9CmRpZmYgLS1naXQgYS9kcml2ZXJzL2dwdS9kcm0vYW1k L2FtZGdwdS9hbWRncHVfaWguYyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9p aC5jCmluZGV4IGRiNTQyMmUuLmZiNDRkZDIgMTAwNjQ0Ci0tLSBhL2RyaXZlcnMvZ3B1L2RybS9h bWQvYW1kZ3B1L2FtZGdwdV9paC5jCisrKyBiL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2Ft ZGdwdV9paC5jCkBAIC0yNCw2ICsyNCw3IEBACiAjaW5jbHVkZSA8ZHJtL2RybVAuaD4KICNpbmNs dWRlICJhbWRncHUuaCIKICNpbmNsdWRlICJhbWRncHVfaWguaCIKKyNpbmNsdWRlICJhbWRncHVf YW1ka2ZkLmgiCiAKIC8qKgogICogYW1kZ3B1X2loX3JpbmdfYWxsb2MgLSBhbGxvY2F0ZSBtZW1v cnkgZm9yIHRoZSBJSCByaW5nCkBAIC0xOTksNiArMjAwLDEyIEBAIHJlc3RhcnRfaWg6CiAJcm1i KCk7CiAKIAl3aGlsZSAoYWRldi0+aXJxLmloLnJwdHIgIT0gd3B0cikgeworCQl1MzIgcmluZ19p bmRleCA9IGFkZXYtPmlycS5paC5ycHRyID4+IDI7CisKKwkJLyogQmVmb3JlIGRpc3BhdGNoaW5n IGlycSB0byBJUCBibG9ja3MsIHNlbmQgaXQgdG8gYW1ka2ZkICovCisJCWFtZGdwdV9hbWRrZmRf aW50ZXJydXB0KGFkZXYsCisJCQkJKGNvbnN0IHZvaWQgKikgJmFkZXYtPmlycS5paC5yaW5nW3Jp bmdfaW5kZXhdKTsKKwogCQlhbWRncHVfaWhfZGVjb2RlX2l2KGFkZXYsICZlbnRyeSk7CiAJCWFk ZXYtPmlycS5paC5ycHRyICY9IGFkZXYtPmlycS5paC5wdHJfbWFzazsKIApkaWZmIC0tZ2l0IGEv ZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRncHUvYW1kZ3B1X2ttcy5jIGIvZHJpdmVycy9ncHUvZHJt L2FtZC9hbWRncHUvYW1kZ3B1X2ttcy5jCmluZGV4IDU1MzM0MzQuLjhjNDBhOTYgMTAwNjQ0Ci0t LSBhL2RyaXZlcnMvZ3B1L2RybS9hbWQvYW1kZ3B1L2FtZGdwdV9rbXMuYworKysgYi9kcml2ZXJz L2dwdS9kcm0vYW1kL2FtZGdwdS9hbWRncHVfa21zLmMKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNs dWRlIDxsaW51eC92Z2Ffc3dpdGNoZXJvby5oPgogI2luY2x1ZGUgPGxpbnV4L3NsYWIuaD4KICNp bmNsdWRlIDxsaW51eC9wbV9ydW50aW1lLmg+CisjaW5jbHVkZSAiYW1kZ3B1X2FtZGtmZC5oIgog CiAjaWYgZGVmaW5lZChDT05GSUdfVkdBX1NXSVRDSEVST08pCiBib29sIGFtZGdwdV9oYXNfYXRw eCh2b2lkKTsKQEAgLTYxLDYgKzYyLDggQEAgaW50IGFtZGdwdV9kcml2ZXJfdW5sb2FkX2ttcyhz dHJ1Y3QgZHJtX2RldmljZSAqZGV2KQogCiAJcG1fcnVudGltZV9nZXRfc3luYyhkZXYtPmRldik7 CiAKKwlhbWRncHVfYW1ka2ZkX2RldmljZV9maW5pKGFkZXYpOworCiAJYW1kZ3B1X2FjcGlfZmlu aShhZGV2KTsKIAogCWFtZGdwdV9kZXZpY2VfZmluaShhZGV2KTsKQEAgLTExOCw2ICsxMjEsMTAg QEAgaW50IGFtZGdwdV9kcml2ZXJfbG9hZF9rbXMoc3RydWN0IGRybV9kZXZpY2UgKmRldiwgdW5z aWduZWQgbG9uZyBmbGFncykKIAkJCQkiRXJyb3IgZHVyaW5nIEFDUEkgbWV0aG9kcyBjYWxsXG4i KTsKIAl9CiAKKwlhbWRncHVfYW1ka2ZkX2xvYWRfaW50ZXJmYWNlKGFkZXYpOworCWFtZGdwdV9h bWRrZmRfZGV2aWNlX3Byb2JlKGFkZXYpOworCWFtZGdwdV9hbWRrZmRfZGV2aWNlX2luaXQoYWRl dik7CisKIAlpZiAoYW1kZ3B1X2RldmljZV9pc19weChkZXYpKSB7CiAJCXBtX3J1bnRpbWVfdXNl X2F1dG9zdXNwZW5kKGRldi0+ZGV2KTsKIAkJcG1fcnVudGltZV9zZXRfYXV0b3N1c3BlbmRfZGVs YXkoZGV2LT5kZXYsIDUwMDApOwpkaWZmIC0tZ2l0IGEvZHJpdmVycy9ncHUvZHJtL2FtZC9hbWRn cHUvY2lrLmMgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9jaWsuYwppbmRleCA1ZGFiNTc4 Li45NTMwNjQxIDEwMDY0NAotLS0gYS9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9jaWsuYwor KysgYi9kcml2ZXJzL2dwdS9kcm0vYW1kL2FtZGdwdS9jaWsuYwpAQCAtNjQsNiArNjQsOCBAQAog I2luY2x1ZGUgIm9zcy9vc3NfMl8wX2QuaCIKICNpbmNsdWRlICJvc3Mvb3NzXzJfMF9zaF9tYXNr LmgiCiAKKyNpbmNsdWRlICJhbWRncHVfYW1ka2ZkLmgiCisKIC8qCiAgKiBJbmRpcmVjdCByZWdp c3RlcnMgYWNjZXNzb3IKICAqLwpAQCAtMjQ1MiwxNCArMjQ1NCwyMSBAQCBzdGF0aWMgaW50IGNp a19jb21tb25fc3VzcGVuZCh2b2lkICpoYW5kbGUpCiB7CiAJc3RydWN0IGFtZGdwdV9kZXZpY2Ug KmFkZXYgPSAoc3RydWN0IGFtZGdwdV9kZXZpY2UgKiloYW5kbGU7CiAKKwlhbWRncHVfYW1ka2Zk X3N1c3BlbmQoYWRldik7CisKIAlyZXR1cm4gY2lrX2NvbW1vbl9od19maW5pKGFkZXYpOwogfQog CiBzdGF0aWMgaW50IGNpa19jb21tb25fcmVzdW1lKHZvaWQgKmhhbmRsZSkKIHsKKwlpbnQgcjsK IAlzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqYWRldiA9IChzdHJ1Y3QgYW1kZ3B1X2RldmljZSAqKWhh bmRsZTsKIAotCXJldHVybiBjaWtfY29tbW9uX2h3X2luaXQoYWRldik7CisJciA9IGNpa19jb21t b25faHdfaW5pdChhZGV2KTsKKwlpZiAocikKKwkJcmV0dXJuIHI7CisKKwlyZXR1cm4gYW1kZ3B1 X2FtZGtmZF9yZXN1bWUoYWRldik7CiB9CiAKIHN0YXRpYyBib29sIGNpa19jb21tb25faXNfaWRs ZSh2b2lkICpoYW5kbGUpCi0tIAoyLjQuMwoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KZHJpLWRldmVsIG1haWxpbmcgbGlzdApkcmktZGV2ZWxAbGlzdHMu ZnJlZWRlc2t0b3Aub3JnCmh0dHA6Ly9saXN0cy5mcmVlZGVza3RvcC5vcmcvbWFpbG1hbi9saXN0 aW5mby9kcmktZGV2ZWwK