From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH 13/29] xl: split out vtpm related code Date: Fri, 24 Feb 2017 16:12:58 +0000 Message-ID: <20170224161314.22154-14-wei.liu2@citrix.com> References: <20170224161314.22154-1-wei.liu2@citrix.com> 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 1chIXz-0006nv-RL for xen-devel@lists.xenproject.org; Fri, 24 Feb 2017 16:16:43 +0000 In-Reply-To: <20170224161314.22154-1-wei.liu2@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: Xen-devel Cc: Wei Liu , Ian Jackson List-Id: xen-devel@lists.xenproject.org U2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB0b29scy94 bC9NYWtlZmlsZSAgICAgfCAgIDEgKwogdG9vbHMveGwveGxfY21kaW1wbC5jIHwgMTIyIC0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHRvb2xzL3hsL3hsX3Z0cG0uYyAg ICB8IDE1MyArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KwogMyBmaWxlcyBjaGFuZ2VkLCAxNTQgaW5zZXJ0aW9ucygrKSwgMTIyIGRlbGV0aW9ucygtKQog Y3JlYXRlIG1vZGUgMTAwNjQ0IHRvb2xzL3hsL3hsX3Z0cG0uYwoKZGlmZiAtLWdpdCBhL3Rvb2xz L3hsL01ha2VmaWxlIGIvdG9vbHMveGwvTWFrZWZpbGUKaW5kZXggZGYwYjVkZDVjZi4uYjMxZWMw NTJjMSAxMDA2NDQKLS0tIGEvdG9vbHMveGwvTWFrZWZpbGUKKysrIGIvdG9vbHMveGwvTWFrZWZp bGUKQEAgLTE3LDYgKzE3LDcgQEAgQ0ZMQUdTX1hMICs9IC1Xc2hhZG93CiAKIFhMX09CSlMgPSB4 bC5vIHhsX2NtZGltcGwubyB4bF9jbWR0YWJsZS5vIHhsX3N4cC5vIHhsX3V0aWxzLm8KIFhMX09C SlMgKz0geGxfdG1lbS5vIHhsX3BhcnNlLm8geGxfY3B1cG9vbC5vIHhsX2ZsYXNrLm8KK1hMX09C SlMgKz0geGxfdnRwbS5vCiAKICQoWExfT0JKUyk6IENGTEFHUyArPSAkKENGTEFHU19saWJ4ZW50 b29sbG9nKQogJChYTF9PQkpTKTogQ0ZMQUdTICs9ICQoQ0ZMQUdTX1hMKQpkaWZmIC0tZ2l0IGEv dG9vbHMveGwveGxfY21kaW1wbC5jIGIvdG9vbHMveGwveGxfY21kaW1wbC5jCmluZGV4IGViODdj Yjk3NWEuLmFlYjRmYjM2MmYgMTAwNjQ0Ci0tLSBhL3Rvb2xzL3hsL3hsX2NtZGltcGwuYworKysg Yi90b29scy94bC94bF9jbWRpbXBsLmMKQEAgLTUyNzQsMTI4ICs1Mjc0LDYgQEAgaW50IG1haW5f YmxvY2tkZXRhY2goaW50IGFyZ2MsIGNoYXIgKiphcmd2KQogICAgIHJldHVybiByYzsKIH0KIAot aW50IG1haW5fdnRwbWF0dGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCi17Ci0gICAgaW50IG9w dDsKLSAgICBsaWJ4bF9kZXZpY2VfdnRwbSB2dHBtOwotICAgIGNoYXIgKm9wYXJnOwotICAgIHVp bnQzMl90IGRvbWlkOwotCi0gICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJ2 dHBtLWF0dGFjaCIsIDEpIHsKLSAgICAgICAgLyogTm8gb3B0aW9ucyAqLwotICAgIH0KLQotICAg IGlmIChsaWJ4bF9kb21haW5fcXVhbGlmaWVyX3RvX2RvbWlkKGN0eCwgYXJndltvcHRpbmRdLCAm ZG9taWQpIDwgMCkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzIGlzIGFuIGludmFsaWQg ZG9tYWluIGlkZW50aWZpZXJcbiIsIGFyZ3Zbb3B0aW5kXSk7Ci0gICAgICAgIHJldHVybiAxOwot ICAgIH0KLSAgICArK29wdGluZDsKLQotICAgIGxpYnhsX2RldmljZV92dHBtX2luaXQoJnZ0cG0p OwotICAgIGZvciAoYXJndiArPSBvcHRpbmQsIGFyZ2MgLT0gb3B0aW5kOyBhcmdjID4gMDsgKyth cmd2LCAtLWFyZ2MpIHsKLSAgICAgICAgaWYgKE1BVENIX09QVElPTigidXVpZCIsICphcmd2LCBv cGFyZykpIHsKLSAgICAgICAgICAgIGlmKGxpYnhsX3V1aWRfZnJvbV9zdHJpbmcoJih2dHBtLnV1 aWQpLCBvcGFyZykpIHsKLSAgICAgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIkludmFsaWQg dXVpZCBzcGVjaWZpZWQgKCVzKVxuIiwgb3BhcmcpOwotICAgICAgICAgICAgICAgIHJldHVybiAx OwotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKE1BVENIX09QVElPTigiYmFja2Vu ZCIsICphcmd2LCBvcGFyZykpIHsKLSAgICAgICAgICAgIHJlcGxhY2Vfc3RyaW5nKCZ2dHBtLmJh Y2tlbmRfZG9tbmFtZSwgb3BhcmcpOwotICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZnBy aW50ZihzdGRlcnIsICJ1bnJlY29nbml6ZWQgYXJndW1lbnQgYCVzJ1xuIiwgKmFyZ3YpOwotICAg ICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICBpZihkcnlydW5fb25s eSkgewotICAgICAgIGNoYXIqIGpzb24gPSBsaWJ4bF9kZXZpY2VfdnRwbV90b19qc29uKGN0eCwg JnZ0cG0pOwotICAgICAgIHByaW50ZigidnRwbTogJXNcbiIsIGpzb24pOwotICAgICAgIGZyZWUo anNvbik7Ci0gICAgICAgbGlieGxfZGV2aWNlX3Z0cG1fZGlzcG9zZSgmdnRwbSk7Ci0gICAgICAg aWYgKGZlcnJvcihzdGRvdXQpIHx8IGZmbHVzaChzdGRvdXQpKSB7IHBlcnJvcigic3Rkb3V0Iik7 IGV4aXQoLTEpOyB9Ci0gICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgaWYgKGxpYnhsX2Rl dmljZV92dHBtX2FkZChjdHgsIGRvbWlkLCAmdnRwbSwgMCkpIHsKLSAgICAgICAgZnByaW50Zihz dGRlcnIsICJsaWJ4bF9kZXZpY2VfdnRwbV9hZGQgZmFpbGVkLlxuIik7Ci0gICAgICAgIHJldHVy biAxOwotICAgIH0KLSAgICBsaWJ4bF9kZXZpY2VfdnRwbV9kaXNwb3NlKCZ2dHBtKTsKLSAgICBy ZXR1cm4gMDsKLX0KLQotaW50IG1haW5fdnRwbWxpc3QoaW50IGFyZ2MsIGNoYXIgKiphcmd2KQot ewotICAgIGludCBvcHQ7Ci0gICAgbGlieGxfZGV2aWNlX3Z0cG0gKnZ0cG1zOwotICAgIGxpYnhs X3Z0cG1pbmZvIHZ0cG1pbmZvOwotICAgIGludCBuYiwgaTsKLQotICAgIFNXSVRDSF9GT1JFQUNI X09QVChvcHQsICIiLCBOVUxMLCAidnRwbS1saXN0IiwgMSkgewotICAgICAgICAvKiBObyBvcHRp b25zICovCi0gICAgfQotCi0gICAgLyogICAgICBJZHggIEJFICAgVVVJRCAgIEhkbCAgU3RhICBl dmNoIHJyZWYgIEJFLXBhdGggKi8KLSAgICBwcmludGYoIiUtM3MgJS0ycyAlLTM2cyAlLTZzICUt NXMgJS02cyAlLTVzICUtMTBzXG4iLAotICAgICAgICAgICAiSWR4IiwgIkJFIiwgIlV1aWQiLCAi aGFuZGxlIiwgInN0YXRlIiwgImV2dC1jaCIsICJyaW5nLXJlZiIsICJCRS1wYXRoIik7Ci0gICAg Zm9yIChhcmd2ICs9IG9wdGluZCwgYXJnYyAtPSBvcHRpbmQ7IGFyZ2MgPiAwOyAtLWFyZ2MsICsr YXJndikgewotICAgICAgICB1aW50MzJfdCBkb21pZDsKLSAgICAgICAgaWYgKGxpYnhsX2RvbWFp bl9xdWFsaWZpZXJfdG9fZG9taWQoY3R4LCAqYXJndiwgJmRvbWlkKSA8IDApIHsKLSAgICAgICAg ICAgIGZwcmludGYoc3RkZXJyLCAiJXMgaXMgYW4gaW52YWxpZCBkb21haW4gaWRlbnRpZmllclxu IiwgKmFyZ3YpOwotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIH0KLSAgICAgICAgaWYg KCEodnRwbXMgPSBsaWJ4bF9kZXZpY2VfdnRwbV9saXN0KGN0eCwgZG9taWQsICZuYikpKSB7Ci0g ICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgfQotICAgICAgICBmb3IgKGkgPSAwOyBpIDwg bmI7ICsraSkgewotICAgICAgICAgICBpZighbGlieGxfZGV2aWNlX3Z0cG1fZ2V0aW5mbyhjdHgs IGRvbWlkLCAmdnRwbXNbaV0sICZ2dHBtaW5mbykpIHsKLSAgICAgICAgICAgICAgLyogICAgICBJ ZHggIEJFICAgICBVVUlEICAgICAgICAgICAgIEhkbCBTdGEgZXZjaCBycmVmIEJFLXBhdGgqLwot ICAgICAgICAgICAgICBwcmludGYoIiUtM2QgJS0yZCAiIExJQlhMX1VVSURfRk1UICIgJTZkICU1 ZCAlNmQgJThkICUtMzBzXG4iLAotICAgICAgICAgICAgICAgICAgICB2dHBtaW5mby5kZXZpZCwg dnRwbWluZm8uYmFja2VuZF9pZCwKLSAgICAgICAgICAgICAgICAgICAgTElCWExfVVVJRF9CWVRF Uyh2dHBtaW5mby51dWlkKSwKLSAgICAgICAgICAgICAgICAgICAgdnRwbWluZm8uZGV2aWQsIHZ0 cG1pbmZvLnN0YXRlLCB2dHBtaW5mby5ldnRjaCwKLSAgICAgICAgICAgICAgICAgICAgdnRwbWlu Zm8ucnJlZiwgdnRwbWluZm8uYmFja2VuZCk7Ci0KLSAgICAgICAgICAgICAgbGlieGxfdnRwbWlu Zm9fZGlzcG9zZSgmdnRwbWluZm8pOwotICAgICAgICAgICB9Ci0gICAgICAgICAgIGxpYnhsX2Rl dmljZV92dHBtX2Rpc3Bvc2UoJnZ0cG1zW2ldKTsKLSAgICAgICAgfQotICAgICAgICBmcmVlKHZ0 cG1zKTsKLSAgICB9Ci0gICAgcmV0dXJuIDA7Ci19Ci0KLWludCBtYWluX3Z0cG1kZXRhY2goaW50 IGFyZ2MsIGNoYXIgKiphcmd2KQotewotICAgIHVpbnQzMl90IGRvbWlkOwotICAgIGludCBvcHQs IHJjPTA7Ci0gICAgbGlieGxfZGV2aWNlX3Z0cG0gdnRwbTsKLSAgICBsaWJ4bF91dWlkIHV1aWQ7 Ci0KLSAgICBTV0lUQ0hfRk9SRUFDSF9PUFQob3B0LCAiIiwgTlVMTCwgInZ0cG0tZGV0YWNoIiwg MikgewotICAgICAgICAvKiBObyBvcHRpb25zICovCi0gICAgfQotCi0gICAgZG9taWQgPSB4Zmlu ZF9kb21haW4oYXJndltvcHRpbmRdKTsKLQotICAgIGlmICggbGlieGxfdXVpZF9mcm9tX3N0cmlu ZygmdXVpZCwgYXJndltvcHRpbmQrMV0pKSB7Ci0gICAgICAgIGlmIChsaWJ4bF9kZXZpZF90b19k ZXZpY2VfdnRwbShjdHgsIGRvbWlkLCBhdG9pKGFyZ3Zbb3B0aW5kKzFdKSwgJnZ0cG0pKSB7Ci0g ICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gZGV2aWNlICVzLlxuIiwgYXJndltv cHRpbmQrMV0pOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAgIH0KLSAgICB9IGVsc2Ug ewotICAgICAgICBpZiAobGlieGxfdXVpZF90b19kZXZpY2VfdnRwbShjdHgsIGRvbWlkLCAmdXVp ZCwgJnZ0cG0pKSB7Ci0gICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlVua25vd24gZGV2aWNl ICVzLlxuIiwgYXJndltvcHRpbmQrMV0pOwotICAgICAgICAgICAgcmV0dXJuIDE7Ci0gICAgICAg IH0KLSAgICB9Ci0gICAgcmMgPSBsaWJ4bF9kZXZpY2VfdnRwbV9yZW1vdmUoY3R4LCBkb21pZCwg JnZ0cG0sIDApOwotICAgIGlmIChyYykgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhs X2RldmljZV92dHBtX3JlbW92ZSBmYWlsZWQuXG4iKTsKLSAgICB9Ci0gICAgbGlieGxfZGV2aWNl X3Z0cG1fZGlzcG9zZSgmdnRwbSk7Ci0gICAgcmV0dXJuIHJjOwotfQotCiAKIHN0YXRpYyBjaGFy ICp1cHRpbWVfdG9fc3RyaW5nKHVuc2lnbmVkIGxvbmcgdXB0aW1lLCBpbnQgc2hvcnRfbW9kZSkK IHsKZGlmZiAtLWdpdCBhL3Rvb2xzL3hsL3hsX3Z0cG0uYyBiL3Rvb2xzL3hsL3hsX3Z0cG0uYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwLi5hNjljYzA0ZWZmCi0tLSAvZGV2 L251bGwKKysrIGIvdG9vbHMveGwveGxfdnRwbS5jCkBAIC0wLDAgKzEsMTUzIEBACisvKgorICog Q29weXJpZ2h0IDIwMDktMjAxNyBDaXRyaXggTHRkIGFuZCBvdGhlciBjb250cmlidXRvcnMKKyAq CisgKiBUaGlzIHByb2dyYW0gaXMgZnJlZSBzb2Z0d2FyZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUg aXQgYW5kL29yIG1vZGlmeQorICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2Vy IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkCisgKiBieSB0aGUgRnJlZSBTb2Z0 d2FyZSBGb3VuZGF0aW9uOyB2ZXJzaW9uIDIuMSBvbmx5LiB3aXRoIHRoZSBzcGVjaWFsCisgKiBl eGNlcHRpb24gb24gbGlua2luZyBkZXNjcmliZWQgaW4gZmlsZSBMSUNFTlNFLgorICoKKyAqIFRo aXMgcHJvZ3JhbSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNl ZnVsLAorICogYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp ZWQgd2FycmFudHkgb2YKKyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJ Q1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUKKyAqIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGlj ZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICovCisKKyNpbmNsdWRlIDxzdGRsaWIuaD4KKworI2lu Y2x1ZGUgPGxpYnhsLmg+CisjaW5jbHVkZSA8bGlieGxfdXRpbHMuaD4KKyNpbmNsdWRlIDxsaWJ4 bHV0aWwuaD4KKworI2luY2x1ZGUgInhsLmgiCisjaW5jbHVkZSAieGxfdXRpbHMuaCIKKyNpbmNs dWRlICJ4bF9wYXJzZS5oIgorCitpbnQgbWFpbl92dHBtYXR0YWNoKGludCBhcmdjLCBjaGFyICoq YXJndikKK3sKKyAgICBpbnQgb3B0OworICAgIGxpYnhsX2RldmljZV92dHBtIHZ0cG07CisgICAg Y2hhciAqb3Bhcmc7CisgICAgdWludDMyX3QgZG9taWQ7CisKKyAgICBTV0lUQ0hfRk9SRUFDSF9P UFQob3B0LCAiIiwgTlVMTCwgInZ0cG0tYXR0YWNoIiwgMSkgeworICAgICAgICAvKiBObyBvcHRp b25zICovCisgICAgfQorCisgICAgaWYgKGxpYnhsX2RvbWFpbl9xdWFsaWZpZXJfdG9fZG9taWQo Y3R4LCBhcmd2W29wdGluZF0sICZkb21pZCkgPCAwKSB7CisgICAgICAgIGZwcmludGYoc3RkZXJy LCAiJXMgaXMgYW4gaW52YWxpZCBkb21haW4gaWRlbnRpZmllclxuIiwgYXJndltvcHRpbmRdKTsK KyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgICsrb3B0aW5kOworCisgICAgbGlieGxfZGV2 aWNlX3Z0cG1faW5pdCgmdnRwbSk7CisgICAgZm9yIChhcmd2ICs9IG9wdGluZCwgYXJnYyAtPSBv cHRpbmQ7IGFyZ2MgPiAwOyArK2FyZ3YsIC0tYXJnYykgeworICAgICAgICBpZiAoTUFUQ0hfT1BU SU9OKCJ1dWlkIiwgKmFyZ3YsIG9wYXJnKSkgeworICAgICAgICAgICAgaWYobGlieGxfdXVpZF9m cm9tX3N0cmluZygmKHZ0cG0udXVpZCksIG9wYXJnKSkgeworICAgICAgICAgICAgICAgIGZwcmlu dGYoc3RkZXJyLCAiSW52YWxpZCB1dWlkIHNwZWNpZmllZCAoJXMpXG4iLCBvcGFyZyk7CisgICAg ICAgICAgICAgICAgcmV0dXJuIDE7CisgICAgICAgICAgICB9CisgICAgICAgIH0gZWxzZSBpZiAo TUFUQ0hfT1BUSU9OKCJiYWNrZW5kIiwgKmFyZ3YsIG9wYXJnKSkgeworICAgICAgICAgICAgcmVw bGFjZV9zdHJpbmcoJnZ0cG0uYmFja2VuZF9kb21uYW1lLCBvcGFyZyk7CisgICAgICAgIH0gZWxz ZSB7CisgICAgICAgICAgICBmcHJpbnRmKHN0ZGVyciwgInVucmVjb2duaXplZCBhcmd1bWVudCBg JXMnXG4iLCAqYXJndik7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0K KworICAgIGlmKGRyeXJ1bl9vbmx5KSB7CisgICAgICAgY2hhcioganNvbiA9IGxpYnhsX2Rldmlj ZV92dHBtX3RvX2pzb24oY3R4LCAmdnRwbSk7CisgICAgICAgcHJpbnRmKCJ2dHBtOiAlc1xuIiwg anNvbik7CisgICAgICAgZnJlZShqc29uKTsKKyAgICAgICBsaWJ4bF9kZXZpY2VfdnRwbV9kaXNw b3NlKCZ2dHBtKTsKKyAgICAgICBpZiAoZmVycm9yKHN0ZG91dCkgfHwgZmZsdXNoKHN0ZG91dCkp IHsgcGVycm9yKCJzdGRvdXQiKTsgZXhpdCgtMSk7IH0KKyAgICAgICByZXR1cm4gMDsKKyAgICB9 CisKKyAgICBpZiAobGlieGxfZGV2aWNlX3Z0cG1fYWRkKGN0eCwgZG9taWQsICZ2dHBtLCAwKSkg eworICAgICAgICBmcHJpbnRmKHN0ZGVyciwgImxpYnhsX2RldmljZV92dHBtX2FkZCBmYWlsZWQu XG4iKTsKKyAgICAgICAgcmV0dXJuIDE7CisgICAgfQorICAgIGxpYnhsX2RldmljZV92dHBtX2Rp c3Bvc2UoJnZ0cG0pOworICAgIHJldHVybiAwOworfQorCitpbnQgbWFpbl92dHBtbGlzdChpbnQg YXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgaW50IG9wdDsKKyAgICBsaWJ4bF9kZXZpY2VfdnRw bSAqdnRwbXM7CisgICAgbGlieGxfdnRwbWluZm8gdnRwbWluZm87CisgICAgaW50IG5iLCBpOwor CisgICAgU1dJVENIX0ZPUkVBQ0hfT1BUKG9wdCwgIiIsIE5VTEwsICJ2dHBtLWxpc3QiLCAxKSB7 CisgICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KKyAgICB9CisKKyAgICAvKiAgICAgIElkeCAgQkUg ICBVVUlEICAgSGRsICBTdGEgIGV2Y2ggcnJlZiAgQkUtcGF0aCAqLworICAgIHByaW50ZigiJS0z cyAlLTJzICUtMzZzICUtNnMgJS01cyAlLTZzICUtNXMgJS0xMHNcbiIsCisgICAgICAgICAgICJJ ZHgiLCAiQkUiLCAiVXVpZCIsICJoYW5kbGUiLCAic3RhdGUiLCAiZXZ0LWNoIiwgInJpbmctcmVm IiwgIkJFLXBhdGgiKTsKKyAgICBmb3IgKGFyZ3YgKz0gb3B0aW5kLCBhcmdjIC09IG9wdGluZDsg YXJnYyA+IDA7IC0tYXJnYywgKythcmd2KSB7CisgICAgICAgIHVpbnQzMl90IGRvbWlkOworICAg ICAgICBpZiAobGlieGxfZG9tYWluX3F1YWxpZmllcl90b19kb21pZChjdHgsICphcmd2LCAmZG9t aWQpIDwgMCkgeworICAgICAgICAgICAgZnByaW50ZihzdGRlcnIsICIlcyBpcyBhbiBpbnZhbGlk IGRvbWFpbiBpZGVudGlmaWVyXG4iLCAqYXJndik7CisgICAgICAgICAgICBjb250aW51ZTsKKyAg ICAgICAgfQorICAgICAgICBpZiAoISh2dHBtcyA9IGxpYnhsX2RldmljZV92dHBtX2xpc3QoY3R4 LCBkb21pZCwgJm5iKSkpIHsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICB9CisgICAg ICAgIGZvciAoaSA9IDA7IGkgPCBuYjsgKytpKSB7CisgICAgICAgICAgIGlmKCFsaWJ4bF9kZXZp Y2VfdnRwbV9nZXRpbmZvKGN0eCwgZG9taWQsICZ2dHBtc1tpXSwgJnZ0cG1pbmZvKSkgeworICAg ICAgICAgICAgICAvKiAgICAgIElkeCAgQkUgICAgIFVVSUQgICAgICAgICAgICAgSGRsIFN0YSBl dmNoIHJyZWYgQkUtcGF0aCovCisgICAgICAgICAgICAgIHByaW50ZigiJS0zZCAlLTJkICIgTElC WExfVVVJRF9GTVQgIiAlNmQgJTVkICU2ZCAlOGQgJS0zMHNcbiIsCisgICAgICAgICAgICAgICAg ICAgIHZ0cG1pbmZvLmRldmlkLCB2dHBtaW5mby5iYWNrZW5kX2lkLAorICAgICAgICAgICAgICAg ICAgICBMSUJYTF9VVUlEX0JZVEVTKHZ0cG1pbmZvLnV1aWQpLAorICAgICAgICAgICAgICAgICAg ICB2dHBtaW5mby5kZXZpZCwgdnRwbWluZm8uc3RhdGUsIHZ0cG1pbmZvLmV2dGNoLAorICAgICAg ICAgICAgICAgICAgICB2dHBtaW5mby5ycmVmLCB2dHBtaW5mby5iYWNrZW5kKTsKKworICAgICAg ICAgICAgICBsaWJ4bF92dHBtaW5mb19kaXNwb3NlKCZ2dHBtaW5mbyk7CisgICAgICAgICAgIH0K KyAgICAgICAgICAgbGlieGxfZGV2aWNlX3Z0cG1fZGlzcG9zZSgmdnRwbXNbaV0pOworICAgICAg ICB9CisgICAgICAgIGZyZWUodnRwbXMpOworICAgIH0KKyAgICByZXR1cm4gMDsKK30KKworaW50 IG1haW5fdnRwbWRldGFjaChpbnQgYXJnYywgY2hhciAqKmFyZ3YpCit7CisgICAgdWludDMyX3Qg ZG9taWQ7CisgICAgaW50IG9wdCwgcmM9MDsKKyAgICBsaWJ4bF9kZXZpY2VfdnRwbSB2dHBtOwor ICAgIGxpYnhsX3V1aWQgdXVpZDsKKworICAgIFNXSVRDSF9GT1JFQUNIX09QVChvcHQsICIiLCBO VUxMLCAidnRwbS1kZXRhY2giLCAyKSB7CisgICAgICAgIC8qIE5vIG9wdGlvbnMgKi8KKyAgICB9 CisKKyAgICBkb21pZCA9IHhmaW5kX2RvbWFpbihhcmd2W29wdGluZF0pOworCisgICAgaWYgKCBs aWJ4bF91dWlkX2Zyb21fc3RyaW5nKCZ1dWlkLCBhcmd2W29wdGluZCsxXSkpIHsKKyAgICAgICAg aWYgKGxpYnhsX2RldmlkX3RvX2RldmljZV92dHBtKGN0eCwgZG9taWQsIGF0b2koYXJndltvcHRp bmQrMV0pLCAmdnRwbSkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiVW5rbm93biBk ZXZpY2UgJXMuXG4iLCBhcmd2W29wdGluZCsxXSk7CisgICAgICAgICAgICByZXR1cm4gMTsKKyAg ICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIGlmIChsaWJ4bF91dWlkX3RvX2RldmljZV92 dHBtKGN0eCwgZG9taWQsICZ1dWlkLCAmdnRwbSkpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3Rk ZXJyLCAiVW5rbm93biBkZXZpY2UgJXMuXG4iLCBhcmd2W29wdGluZCsxXSk7CisgICAgICAgICAg ICByZXR1cm4gMTsKKyAgICAgICAgfQorICAgIH0KKyAgICByYyA9IGxpYnhsX2RldmljZV92dHBt X3JlbW92ZShjdHgsIGRvbWlkLCAmdnRwbSwgMCk7CisgICAgaWYgKHJjKSB7CisgICAgICAgIGZw cmludGYoc3RkZXJyLCAibGlieGxfZGV2aWNlX3Z0cG1fcmVtb3ZlIGZhaWxlZC5cbiIpOworICAg IH0KKyAgICBsaWJ4bF9kZXZpY2VfdnRwbV9kaXNwb3NlKCZ2dHBtKTsKKyAgICByZXR1cm4gcmM7 Cit9CisKKy8qCisgKiBMb2NhbCB2YXJpYWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWJhc2ljLW9m ZnNldDogNAorICogaW5kZW50LXRhYnMtbW9kZTogbmlsCisgKiBFbmQ6CisgKi8KLS0gCjIuMTEu MAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1k ZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54 ZW4ub3JnL3hlbi1kZXZlbAo=