From mboxrd@z Thu Jan 1 00:00:00 1970 From: Stefano Stabellini Subject: [PATCH v5 4/7] xen/9pfs: connect to the backend Date: Mon, 20 Mar 2017 10:59:45 -0700 Message-ID: <1490032788-23471-4-git-send-email-sstabellini@kernel.org> References: <1490032788-23471-1-git-send-email-sstabellini@kernel.org> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1cq1b8-0003cx-I3 for xen-devel@lists.xenproject.org; Mon, 20 Mar 2017 18:00:02 +0000 In-Reply-To: <1490032788-23471-1-git-send-email-sstabellini@kernel.org> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: jgross@suse.com, Latchesar Ionkov , sstabellini@kernel.org, Eric Van Hensbergen , groug@kaod.org, Stefano Stabellini , v9fs-developer@lists.sourceforge.net, Ron Minnich , boris.ostrovsky@oracle.com List-Id: xen-devel@lists.xenproject.org SW1wbGVtZW50IGZ1bmN0aW9ucyB0byBoYW5kbGUgdGhlIHhlbmJ1cyBoYW5kc2hha2UuIFVwb24g Y29ubmVjdGlvbiwKYWxsb2NhdGUgdGhlIHJpbmdzIGFjY29yZGluZyB0byB0aGUgcHJvdG9jb2wg c3BlY2lmaWNhdGlvbi4KCkluaXRpYWxpemUgYSB3b3JrX3N0cnVjdCBhbmQgYSB3YWl0X3F1ZXVl LiBUaGUgd29ya19zdHJ1Y3Qgd2lsbCBiZSB1c2VkCnRvIHNjaGVkdWxlIHdvcmsgdXBvbiByZWNl aXZpbmcgYW4gZXZlbnQgY2hhbm5lbCBub3RpZmljYXRpb24gZnJvbSB0aGUKYmFja2VuZC4gVGhl IHdhaXRfcXVldWUgd2lsbCBiZSB1c2VkIHRvIHdhaXQgd2hlbiB0aGUgcmluZyBpcyBmdWxsIGFu ZAp3ZSBuZWVkIHRvIHNlbmQgYSBuZXcgcmVxdWVzdC4KClNpZ25lZC1vZmYtYnk6IFN0ZWZhbm8g U3RhYmVsbGluaSA8c3RlZmFub0BhcG9yZXRvLmNvbT4KQ0M6IGdyb3VnQGthb2Qub3JnCkNDOiBi b3Jpcy5vc3Ryb3Zza3lAb3JhY2xlLmNvbQpDQzogamdyb3NzQHN1c2UuY29tCkNDOiBFcmljIFZh biBIZW5zYmVyZ2VuIDxlcmljdmhAZ21haWwuY29tPgpDQzogUm9uIE1pbm5pY2ggPHJtaW5uaWNo QHNhbmRpYS5nb3Y+CkNDOiBMYXRjaGVzYXIgSW9ua292IDxsdWNob0Bpb25rb3YubmV0PgpDQzog djlmcy1kZXZlbG9wZXJAbGlzdHMuc291cmNlZm9yZ2UubmV0Ci0tLQogbmV0LzlwL3RyYW5zX3hl bi5jIHwgMjczICsrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrKysrCiAxIGZpbGUgY2hhbmdlZCwgMjczIGluc2VydGlvbnMoKykKCmRpZmYgLS1naXQgYS9u ZXQvOXAvdHJhbnNfeGVuLmMgYi9uZXQvOXAvdHJhbnNfeGVuLmMKaW5kZXggM2QwNzI2MC4uNTI3 OWFlMCAxMDA2NDQKLS0tIGEvbmV0LzlwL3RyYW5zX3hlbi5jCisrKyBiL25ldC85cC90cmFuc194 ZW4uYwpAQCAtMzcsMTAgKzM3LDQ2IEBACiAjaW5jbHVkZSA8eGVuL2ludGVyZmFjZS9pby85cGZz Lmg+CiAKICNpbmNsdWRlIDxsaW51eC9tb2R1bGUuaD4KKyNpbmNsdWRlIDxsaW51eC9zcGlubG9j ay5oPgorI2luY2x1ZGUgPGxpbnV4L3J3bG9jay5oPgogI2luY2x1ZGUgPG5ldC85cC85cC5oPgog I2luY2x1ZGUgPG5ldC85cC9jbGllbnQuaD4KICNpbmNsdWRlIDxuZXQvOXAvdHJhbnNwb3J0Lmg+ CiAKKyNkZWZpbmUgWEVOXzlQRlNfTlVNX1JJTkdTIDIKKyNkZWZpbmUgWEVOXzlQRlNfUklOR19P UkRFUiA2CisjZGVmaW5lIFhFTl85UEZTX1JJTkdfU0laRSAgWEVOX0ZMRVhfUklOR19TSVpFKFhF Tl85UEZTX1JJTkdfT1JERVIpCisKKy8qIE9uZSBwZXIgcmluZywgbW9yZSB0aGFuIG9uZSBwZXIg OXBmcyBzaGFyZSAqLworc3RydWN0IHhlbl85cGZzX2RhdGFyaW5nIHsKKwlzdHJ1Y3QgeGVuXzlw ZnNfZnJvbnRfcHJpdiAqcHJpdjsKKworCXN0cnVjdCB4ZW5fOXBmc19kYXRhX2ludGYgKmludGY7 CisJZ3JhbnRfcmVmX3QgcmVmOworCWludCBldnRjaG47CisJaW50IGlycTsKKwkvKiBwcm90ZWN0 IGEgcmluZyBmcm9tIGNvbmN1cnJlbnQgYWNjZXNzZXMgKi8KKwlzcGlubG9ja190IGxvY2s7CisK KwlzdHJ1Y3QgeGVuXzlwZnNfZGF0YSBkYXRhOworCXdhaXRfcXVldWVfaGVhZF90IHdxOworCXN0 cnVjdCB3b3JrX3N0cnVjdCB3b3JrOworfTsKKworLyogT25lIHBlciA5cGZzIHNoYXJlICovCitz dHJ1Y3QgeGVuXzlwZnNfZnJvbnRfcHJpdiB7CisJc3RydWN0IGxpc3RfaGVhZCBsaXN0OworCXN0 cnVjdCB4ZW5idXNfZGV2aWNlICpkZXY7CisJY2hhciAqdGFnOworCXN0cnVjdCBwOV9jbGllbnQg KmNsaWVudDsKKworCWludCBudW1fcmluZ3M7CisJc3RydWN0IHhlbl85cGZzX2RhdGFyaW5nICpy aW5nczsKK307CisKK3N0YXRpYyBMSVNUX0hFQUQoeGVuXzlwZnNfZGV2cyk7CitzdGF0aWMgREVG SU5FX1JXTE9DSyh4ZW5fOXBmc19sb2NrKTsKKwogc3RhdGljIGludCBwOV94ZW5fY2FuY2VsKHN0 cnVjdCBwOV9jbGllbnQgKmNsaWVudCwgc3RydWN0IHA5X3JlcV90ICpyZXEpCiB7CiAJcmV0dXJu IDA7CkBAIC02MCw2ICs5NiwyNSBAQCBzdGF0aWMgaW50IHA5X3hlbl9yZXF1ZXN0KHN0cnVjdCBw OV9jbGllbnQgKmNsaWVudCwgc3RydWN0IHA5X3JlcV90ICpwOV9yZXEpCiAJcmV0dXJuIDA7CiB9 CiAKK3N0YXRpYyB2b2lkIHA5X3hlbl9yZXNwb25zZShzdHJ1Y3Qgd29ya19zdHJ1Y3QgKndvcmsp Cit7Cit9CisKK3N0YXRpYyBpcnFyZXR1cm5fdCB4ZW5fOXBmc19mcm9udF9ldmVudF9oYW5kbGVy KGludCBpcnEsIHZvaWQgKnIpCit7CisJc3RydWN0IHhlbl85cGZzX2RhdGFyaW5nICpyaW5nID0g cjsKKworCWlmICghcmluZyB8fCAhcmluZy0+cHJpdi0+Y2xpZW50KSB7CisJCS8qIGlnbm9yZSBz cHVyaW91cyBpbnRlcnJ1cHQgKi8KKwkJcmV0dXJuIElSUV9IQU5ETEVEOworCX0KKworCXdha2Vf dXBfaW50ZXJydXB0aWJsZSgmcmluZy0+d3EpOworCXNjaGVkdWxlX3dvcmsoJnJpbmctPndvcmsp OworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCiBzdGF0aWMgc3RydWN0IHA5X3RyYW5zX21v ZHVsZSBwOV94ZW5fdHJhbnMgPSB7CiAJLm5hbWUgPSAieGVuIiwKIAkubWF4c2l6ZSA9IDEgPDwg KFhFTl85UEZTX1JJTkdfT1JERVIgKyBYRU5fUEFHRV9TSElGVCksCkBAIC03NiwyNSArMTMxLDI0 MyBAQCBzdGF0aWMgaW50IHA5X3hlbl9yZXF1ZXN0KHN0cnVjdCBwOV9jbGllbnQgKmNsaWVudCwg c3RydWN0IHA5X3JlcV90ICpwOV9yZXEpCiAJeyAiIiB9CiB9OwogCitzdGF0aWMgdm9pZCB4ZW5f OXBmc19mcm9udF9mcmVlKHN0cnVjdCB4ZW5fOXBmc19mcm9udF9wcml2ICpwcml2KQoreworCWlu dCBpLCBqOworCisJd3JpdGVfbG9jaygmeGVuXzlwZnNfbG9jayk7CisJbGlzdF9kZWwoJnByaXYt Pmxpc3QpOworCXdyaXRlX3VubG9jaygmeGVuXzlwZnNfbG9jayk7CisKKwlmb3IgKGkgPSAwOyBp IDwgcHJpdi0+bnVtX3JpbmdzOyBpKyspIHsKKwkJaWYgKCFwcml2LT5yaW5nc1tpXS5pbnRmKQor CQkJYnJlYWs7CisJCWlmIChwcml2LT5yaW5nc1tpXS5pcnEgPiAwKQorCQkJdW5iaW5kX2Zyb21f aXJxaGFuZGxlcihwcml2LT5yaW5nc1tpXS5pcnEsIHByaXYtPmRldik7CisJCWlmIChwcml2LT5y aW5nc1tpXS5kYXRhLmluKSB7CisJCQlmb3IgKGogPSAwOyBqIDwgKDEgPDwgWEVOXzlQRlNfUklO R19PUkRFUik7IGorKykgeworCQkJCWdyYW50X3JlZl90IHJlZjsKKworCQkJCXJlZiA9IHByaXYt PnJpbmdzW2ldLmludGYtPnJlZltqXTsKKwkJCQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzKHJl ZiwgMCwgMCk7CisJCQl9CisJCQlmcmVlX3BhZ2VzKCh1bnNpZ25lZCBsb25nKXByaXYtPnJpbmdz W2ldLmRhdGEuaW4sCisJCQkJICAgWEVOXzlQRlNfUklOR19PUkRFUiAtCisJCQkJICAgKFBBR0Vf U0hJRlQgLSBYRU5fUEFHRV9TSElGVCkpOworCQl9CisJCWdudHRhYl9lbmRfZm9yZWlnbl9hY2Nl c3MocHJpdi0+cmluZ3NbaV0ucmVmLCAwLCAwKTsKKwkJZnJlZV9wYWdlKCh1bnNpZ25lZCBsb25n KXByaXYtPnJpbmdzW2ldLmludGYpOworCX0KKwlrZnJlZShwcml2LT5yaW5ncyk7CisJa2ZyZWUo cHJpdi0+dGFnKTsKKwlrZnJlZShwcml2KTsKK30KKwogc3RhdGljIGludCB4ZW5fOXBmc19mcm9u dF9yZW1vdmUoc3RydWN0IHhlbmJ1c19kZXZpY2UgKmRldikKIHsKKwlzdHJ1Y3QgeGVuXzlwZnNf ZnJvbnRfcHJpdiAqcHJpdiA9IGRldl9nZXRfZHJ2ZGF0YSgmZGV2LT5kZXYpOworCisJZGV2X3Nl dF9kcnZkYXRhKCZkZXYtPmRldiwgTlVMTCk7CisJeGVuXzlwZnNfZnJvbnRfZnJlZShwcml2KTsK KwlyZXR1cm4gMDsKK30KKworc3RhdGljIGludCB4ZW5fOXBmc19mcm9udF9hbGxvY19kYXRhcmlu ZyhzdHJ1Y3QgeGVuYnVzX2RldmljZSAqZGV2LAorCQkJCQkgc3RydWN0IHhlbl85cGZzX2RhdGFy aW5nICpyaW5nKQoreworCWludCBpID0gMDsKKwlpbnQgcmV0ID0gLUVOT01FTTsKKwl2b2lkICpi eXRlcyA9IE5VTEw7CisKKwlpbml0X3dhaXRxdWV1ZV9oZWFkKCZyaW5nLT53cSk7CisJc3Bpbl9s b2NrX2luaXQoJnJpbmctPmxvY2spOworCUlOSVRfV09SSygmcmluZy0+d29yaywgcDlfeGVuX3Jl c3BvbnNlKTsKKworCXJpbmctPmludGYgPSAoc3RydWN0IHhlbl85cGZzX2RhdGFfaW50ZiAqKWdl dF96ZXJvZWRfcGFnZShHRlBfS0VSTkVMKTsKKwlpZiAoIXJpbmctPmludGYpCisJCXJldHVybiBy ZXQ7CisJcmV0ID0gZ250dGFiX2dyYW50X2ZvcmVpZ25fYWNjZXNzKGRldi0+b3RoZXJlbmRfaWQs CisJCQkJCSAgdmlydF90b19nZm4ocmluZy0+aW50ZiksIDApOworCWlmIChyZXQgPCAwKQorCQln b3RvIG91dDsKKwlyaW5nLT5yZWYgPSByZXQ7CisJYnl0ZXMgPSAodm9pZCAqKV9fZ2V0X2ZyZWVf cGFnZXMoR0ZQX0tFUk5FTCB8IF9fR0ZQX1pFUk8sCisJCQlYRU5fOVBGU19SSU5HX09SREVSIC0g KFBBR0VfU0hJRlQgLSBYRU5fUEFHRV9TSElGVCkpOworCWlmICghYnl0ZXMpCisJCWdvdG8gb3V0 OworCWZvciAoOyBpIDwgKDEgPDwgWEVOXzlQRlNfUklOR19PUkRFUik7IGkrKykgeworCQlyZXQg PSBnbnR0YWJfZ3JhbnRfZm9yZWlnbl9hY2Nlc3MoCisJCQkJZGV2LT5vdGhlcmVuZF9pZCwgdmly dF90b19nZm4oYnl0ZXMpICsgaSwgMCk7CisJCWlmIChyZXQgPCAwKQorCQkJZ290byBvdXQ7CisJ CXJpbmctPmludGYtPnJlZltpXSA9IHJldDsKKwl9CisJcmluZy0+aW50Zi0+cmluZ19vcmRlciA9 IFhFTl85UEZTX1JJTkdfT1JERVI7CisJcmluZy0+ZGF0YS5pbiA9IGJ5dGVzOworCXJpbmctPmRh dGEub3V0ID0gYnl0ZXMgKyBYRU5fOVBGU19SSU5HX1NJWkU7CisKKwlyZXQgPSB4ZW5idXNfYWxs b2NfZXZ0Y2huKGRldiwgJnJpbmctPmV2dGNobik7CisJaWYgKHJldCkKKwkJZ290byBvdXQ7CisJ cmluZy0+aXJxID0gYmluZF9ldnRjaG5fdG9faXJxaGFuZGxlcihyaW5nLT5ldnRjaG4sCisJCQkJ CSAgICAgIHhlbl85cGZzX2Zyb250X2V2ZW50X2hhbmRsZXIsCisJCQkJCSAgICAgIDAsICJ4ZW5f OXBmcy1mcm9udGVuZCIsIHJpbmcpOworCWlmIChyaW5nLT5pcnEgPCAwKSB7CisJCXhlbmJ1c19m cmVlX2V2dGNobihkZXYsIHJpbmctPmV2dGNobik7CisJCXJldCA9IHJpbmctPmlycTsKKwkJZ290 byBvdXQ7CisJfQogCXJldHVybiAwOworCitvdXQ6CisJaWYgKCFieXRlcykgeworCQlmb3IgKGkt LTsgaSA+PSAwOyBpLS0pCisJCQlnbnR0YWJfZW5kX2ZvcmVpZ25fYWNjZXNzKHJpbmctPmludGYt PnJlZltpXSwgMCwgMCk7CisJCWZyZWVfcGFnZXMoKHVuc2lnbmVkIGxvbmcpYnl0ZXMsCisJCQkg ICBYRU5fOVBGU19SSU5HX09SREVSIC0KKwkJCSAgIChQQUdFX1NISUZUIC0gWEVOX1BBR0VfU0hJ RlQpKTsKKwl9CisJZ250dGFiX2VuZF9mb3JlaWduX2FjY2VzcyhyaW5nLT5yZWYsIDAsIDApOwor CWZyZWVfcGFnZSgodW5zaWduZWQgbG9uZylyaW5nLT5pbnRmKTsKKwlyZXR1cm4gcmV0OwogfQog CiBzdGF0aWMgaW50IHhlbl85cGZzX2Zyb250X3Byb2JlKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpk ZXYsCiAJCQkJY29uc3Qgc3RydWN0IHhlbmJ1c19kZXZpY2VfaWQgKmlkKQogeworCWludCByZXQs IGk7CisJc3RydWN0IHhlbmJ1c190cmFuc2FjdGlvbiB4YnQ7CisJc3RydWN0IHhlbl85cGZzX2Zy b250X3ByaXYgKnByaXYgPSBOVUxMOworCWNoYXIgKnZlcnNpb25zOworCXVuc2lnbmVkIGludCBt YXhfcmluZ3MsIG1heF9yaW5nX29yZGVyLCBsZW47CisKKwl2ZXJzaW9ucyA9IHhlbmJ1c19yZWFk KFhCVF9OSUwsIGRldi0+b3RoZXJlbmQsICJ2ZXJzaW9ucyIsICZsZW4pOworCWlmICghbGVuKQor CQlyZXR1cm4gLUVJTlZBTDsKKwlpZiAoc3RyY21wKHZlcnNpb25zLCAiMSIpKSB7CisJCWtmcmVl KHZlcnNpb25zKTsKKwkJcmV0dXJuIC1FSU5WQUw7CisJfQorCWtmcmVlKHZlcnNpb25zKTsKKwlt YXhfcmluZ3MgPSB4ZW5idXNfcmVhZF91bnNpZ25lZChkZXYtPm90aGVyZW5kLCAibWF4LXJpbmdz IiwgMCk7CisJaWYgKG1heF9yaW5ncyA8IFhFTl85UEZTX05VTV9SSU5HUykKKwkJcmV0dXJuIC1F SU5WQUw7CisJbWF4X3Jpbmdfb3JkZXIgPSB4ZW5idXNfcmVhZF91bnNpZ25lZChkZXYtPm90aGVy ZW5kLAorCQkJCQkgICAgICAibWF4LXJpbmctcGFnZS1vcmRlciIsIDApOworCWlmIChtYXhfcmlu Z19vcmRlciA8IFhFTl85UEZTX1JJTkdfT1JERVIpCisJCXJldHVybiAtRUlOVkFMOworCisJcHJp diA9IGt6YWxsb2Moc2l6ZW9mKCpwcml2KSwgR0ZQX0tFUk5FTCk7CisJaWYgKCFwcml2KQorCQly ZXR1cm4gLUVOT01FTTsKKworCXByaXYtPmRldiA9IGRldjsKKwlwcml2LT5udW1fcmluZ3MgPSBY RU5fOVBGU19OVU1fUklOR1M7CisJcHJpdi0+cmluZ3MgPSBrY2FsbG9jKHByaXYtPm51bV9yaW5n cywgc2l6ZW9mKCpwcml2LT5yaW5ncyksCisJCQkgICAgICBHRlBfS0VSTkVMKTsKKwlpZiAoIXBy aXYtPnJpbmdzKSB7CisJCWtmcmVlKHByaXYpOworCQlyZXR1cm4gLUVOT01FTTsKKwl9CisKKwlm b3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX3JpbmdzOyBpKyspIHsKKwkJcHJpdi0+cmluZ3NbaV0u cHJpdiA9IHByaXY7CisJCXJldCA9IHhlbl85cGZzX2Zyb250X2FsbG9jX2RhdGFyaW5nKGRldiwg JnByaXYtPnJpbmdzW2ldKTsKKwkJaWYgKHJldCA8IDApCisJCQlnb3RvIGVycm9yOworCX0KKwor IGFnYWluOgorCXJldCA9IHhlbmJ1c190cmFuc2FjdGlvbl9zdGFydCgmeGJ0KTsKKwlpZiAocmV0 KSB7CisJCXhlbmJ1c19kZXZfZmF0YWwoZGV2LCByZXQsICJzdGFydGluZyB0cmFuc2FjdGlvbiIp OworCQlnb3RvIGVycm9yOworCX0KKwlyZXQgPSB4ZW5idXNfcHJpbnRmKHhidCwgZGV2LT5ub2Rl bmFtZSwgInZlcnNpb24iLCAiJXUiLCAxKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9yX3hlbmJ1 czsKKwlyZXQgPSB4ZW5idXNfcHJpbnRmKHhidCwgZGV2LT5ub2RlbmFtZSwgIm51bS1yaW5ncyIs ICIldSIsCisJCQkgICAgcHJpdi0+bnVtX3JpbmdzKTsKKwlpZiAocmV0KQorCQlnb3RvIGVycm9y X3hlbmJ1czsKKwlmb3IgKGkgPSAwOyBpIDwgcHJpdi0+bnVtX3JpbmdzOyBpKyspIHsKKwkJY2hh ciBzdHJbMTZdOworCisJCUJVSUxEX0JVR19PTihYRU5fOVBGU19OVU1fUklOR1MgPiA5KTsKKwkJ c3ByaW50ZihzdHIsICJyaW5nLXJlZiV1IiwgaSk7CisJCXJldCA9IHhlbmJ1c19wcmludGYoeGJ0 LCBkZXYtPm5vZGVuYW1lLCBzdHIsICIlZCIsCisJCQkJICAgIHByaXYtPnJpbmdzW2ldLnJlZik7 CisJCWlmIChyZXQpCisJCQlnb3RvIGVycm9yX3hlbmJ1czsKKworCQlzcHJpbnRmKHN0ciwgImV2 ZW50LWNoYW5uZWwtJXUiLCBpKTsKKwkJcmV0ID0geGVuYnVzX3ByaW50Zih4YnQsIGRldi0+bm9k ZW5hbWUsIHN0ciwgIiV1IiwKKwkJCQkgICAgcHJpdi0+cmluZ3NbaV0uZXZ0Y2huKTsKKwkJaWYg KHJldCkKKwkJCWdvdG8gZXJyb3JfeGVuYnVzOworCX0KKwlwcml2LT50YWcgPSB4ZW5idXNfcmVh ZCh4YnQsIGRldi0+bm9kZW5hbWUsICJ0YWciLCBOVUxMKTsKKwlpZiAoIXByaXYtPnRhZykgewor CQlyZXQgPSAtRUlOVkFMOworCQlnb3RvIGVycm9yX3hlbmJ1czsKKwl9CisJcmV0ID0geGVuYnVz X3RyYW5zYWN0aW9uX2VuZCh4YnQsIDApOworCWlmIChyZXQpIHsKKwkJaWYgKHJldCA9PSAtRUFH QUlOKQorCQkJZ290byBhZ2FpbjsKKwkJeGVuYnVzX2Rldl9mYXRhbChkZXYsIHJldCwgImNvbXBs ZXRpbmcgdHJhbnNhY3Rpb24iKTsKKwkJZ290byBlcnJvcjsKKwl9CisKKwl3cml0ZV9sb2NrKCZ4 ZW5fOXBmc19sb2NrKTsKKwlsaXN0X2FkZF90YWlsKCZwcml2LT5saXN0LCAmeGVuXzlwZnNfZGV2 cyk7CisJd3JpdGVfdW5sb2NrKCZ4ZW5fOXBmc19sb2NrKTsKKwlkZXZfc2V0X2RydmRhdGEoJmRl di0+ZGV2LCBwcml2KTsKKwl4ZW5idXNfc3dpdGNoX3N0YXRlKGRldiwgWGVuYnVzU3RhdGVJbml0 aWFsaXNlZCk7CisKIAlyZXR1cm4gMDsKKworIGVycm9yX3hlbmJ1czoKKwl4ZW5idXNfdHJhbnNh Y3Rpb25fZW5kKHhidCwgMSk7CisJeGVuYnVzX2Rldl9mYXRhbChkZXYsIHJldCwgIndyaXRpbmcg eGVuc3RvcmUiKTsKKyBlcnJvcjoKKwlkZXZfc2V0X2RydmRhdGEoJmRldi0+ZGV2LCBOVUxMKTsK Kwl4ZW5fOXBmc19mcm9udF9mcmVlKHByaXYpOworCXJldHVybiByZXQ7CiB9CiAKIHN0YXRpYyBp bnQgeGVuXzlwZnNfZnJvbnRfcmVzdW1lKHN0cnVjdCB4ZW5idXNfZGV2aWNlICpkZXYpCiB7CisJ ZGV2X3dhcm4oJmRldi0+ZGV2LCAic3VzcHNlbmQvcmVzdW1lIHVuc3VwcG9ydGVkXG4iKTsKIAly ZXR1cm4gMDsKIH0KIAogc3RhdGljIHZvaWQgeGVuXzlwZnNfZnJvbnRfY2hhbmdlZChzdHJ1Y3Qg eGVuYnVzX2RldmljZSAqZGV2LAogCQkJCSAgIGVudW0geGVuYnVzX3N0YXRlIGJhY2tlbmRfc3Rh dGUpCiB7CisJc3dpdGNoIChiYWNrZW5kX3N0YXRlKSB7CisJY2FzZSBYZW5idXNTdGF0ZVJlY29u ZmlndXJpbmc6CisJY2FzZSBYZW5idXNTdGF0ZVJlY29uZmlndXJlZDoKKwljYXNlIFhlbmJ1c1N0 YXRlSW5pdGlhbGlzaW5nOgorCWNhc2UgWGVuYnVzU3RhdGVJbml0aWFsaXNlZDoKKwljYXNlIFhl bmJ1c1N0YXRlVW5rbm93bjoKKwkJYnJlYWs7CisKKwljYXNlIFhlbmJ1c1N0YXRlSW5pdFdhaXQ6 CisJCWJyZWFrOworCisJY2FzZSBYZW5idXNTdGF0ZUNvbm5lY3RlZDoKKwkJeGVuYnVzX3N3aXRj aF9zdGF0ZShkZXYsIFhlbmJ1c1N0YXRlQ29ubmVjdGVkKTsKKwkJYnJlYWs7CisKKwljYXNlIFhl bmJ1c1N0YXRlQ2xvc2VkOgorCQlpZiAoZGV2LT5zdGF0ZSA9PSBYZW5idXNTdGF0ZUNsb3NlZCkK KwkJCWJyZWFrOworCQkvKiBNaXNzZWQgdGhlIGJhY2tlbmQncyBDTE9TSU5HIHN0YXRlIC0tIGZh bGx0aHJvdWdoICovCisJY2FzZSBYZW5idXNTdGF0ZUNsb3Npbmc6CisJCXhlbmJ1c19mcm9udGVu ZF9jbG9zZWQoZGV2KTsKKwkJYnJlYWs7CisJfQogfQogCiBzdGF0aWMgc3RydWN0IHhlbmJ1c19k cml2ZXIgeGVuXzlwZnNfZnJvbnRfZHJpdmVyID0gewotLSAKMS45LjEKCgpfX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0 Clhlbi1kZXZlbEBsaXN0cy54ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK