From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v4 02/31] libxc: split x86 HVM setup_guest into smaller logical functions Date: Fri, 7 Aug 2015 12:17:39 +0200 Message-ID: <1438942688-7610-3-git-send-email-roger.pau@citrix.com> References: <1438942688-7610-1-git-send-email-roger.pau@citrix.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from mail6.bemta5.messagelabs.com ([195.245.231.135]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZNejF-0006Du-5d for xen-devel@lists.xenproject.org; Fri, 07 Aug 2015 10:18:21 +0000 In-Reply-To: <1438942688-7610-1-git-send-email-roger.pau@citrix.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Sender: xen-devel-bounces@lists.xen.org Errors-To: xen-devel-bounces@lists.xen.org To: xen-devel@lists.xenproject.org Cc: Wei Liu , Stefano Stabellini , Ian Jackson , Ian Campbell , Roger Pau Monne List-Id: xen-devel@lists.xenproject.org VGhpcyBpcyBqdXN0IGEgcHJlcGFyYXRvcnkgY2hhbmdlIHRvIGNsZWFuIHVwIHRoZSBjb2RlIGlu IHNldHVwX2d1ZXN0LgpTaG91bGQgbm90IGludHJvZHVjZSBhbnkgZnVuY3Rpb25hbCBjaGFuZ2Vz LgoKU2lnbmVkLW9mZi1ieTogUm9nZXIgUGF1IE1vbm7DqSA8cm9nZXIucGF1QGNpdHJpeC5jb20+ ClJldmlld2VkLWJ5OiBBbmRyZXcgQ29vcGVyIDxhbmRyZXcuY29vcGVyM0BjaXRyaXguY29tPgpB Y2tlZC1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KQ2M6IElhbiBKYWNrc29uIDxp YW4uamFja3NvbkBldS5jaXRyaXguY29tPgpDYzogU3RlZmFubyBTdGFiZWxsaW5pIDxzdGVmYW5v LnN0YWJlbGxpbmlAZXUuY2l0cml4LmNvbT4KQ2M6IElhbiBDYW1wYmVsbCA8aWFuLmNhbXBiZWxs QGNpdHJpeC5jb20+CkNjOiBXZWkgTGl1IDx3ZWkubGl1MkBjaXRyaXguY29tPgotLS0KQ2hhbmdl cyBzaW5jZSB2MzoKIC0gQWRkIEFuZHJldyBDb29wZXIgUmV2aWV3ZWQtYnkuCiAtIEFkZCBXZWkg QWNrZWQtYnkuCi0tLQogdG9vbHMvbGlieGMveGNfaHZtX2J1aWxkX3g4Ni5jIHwgMTk4ICsrKysr KysrKysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCiAxIGZpbGUgY2hhbmdlZCwgMTE3 IGluc2VydGlvbnMoKyksIDgxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL3Rvb2xzL2xpYnhj L3hjX2h2bV9idWlsZF94ODYuYyBiL3Rvb2xzL2xpYnhjL3hjX2h2bV9idWlsZF94ODYuYwppbmRl eCBlYzExZjE1Li42Zjc5Njg2IDEwMDY0NAotLS0gYS90b29scy9saWJ4Yy94Y19odm1fYnVpbGRf eDg2LmMKKysrIGIvdG9vbHMvbGlieGMveGNfaHZtX2J1aWxkX3g4Ni5jCkBAIC0yMzEsMjggKzIz MSwyMCBAQCBzdGF0aWMgaW50IGNoZWNrX21taW9faG9sZSh1aW50NjRfdCBzdGFydCwgdWludDY0 X3QgbWVtc2l6ZSwKICAgICAgICAgcmV0dXJuIDE7CiB9CiAKLXN0YXRpYyBpbnQgc2V0dXBfZ3Vl c3QoeGNfaW50ZXJmYWNlICp4Y2gsCi0gICAgICAgICAgICAgICAgICAgICAgIHVpbnQzMl90IGRv bSwgc3RydWN0IHhjX2h2bV9idWlsZF9hcmdzICphcmdzLAotICAgICAgICAgICAgICAgICAgICAg ICBjaGFyICppbWFnZSwgdW5zaWduZWQgbG9uZyBpbWFnZV9zaXplKQorc3RhdGljIGludCB4Y19o dm1fcG9wdWxhdGVfbWVtb3J5KHhjX2ludGVyZmFjZSAqeGNoLCB1aW50MzJfdCBkb20sCisgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgc3RydWN0IHhjX2h2bV9idWlsZF9hcmdzICph cmdzLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHhlbl9wZm5fdCAqcGFnZV9h cnJheSkKIHsKLSAgICB4ZW5fcGZuX3QgKnBhZ2VfYXJyYXkgPSBOVUxMOwogICAgIHVuc2lnbmVk IGxvbmcgaSwgdm1lbWlkLCBucl9wYWdlcyA9IGFyZ3MtPm1lbV9zaXplID4+IFBBR0VfU0hJRlQ7 CiAgICAgdW5zaWduZWQgbG9uZyBwMm1fc2l6ZTsKICAgICB1bnNpZ25lZCBsb25nIHRhcmdldF9w YWdlcyA9IGFyZ3MtPm1lbV90YXJnZXQgPj4gUEFHRV9TSElGVDsKLSAgICB1bnNpZ25lZCBsb25n IGVudHJ5X2VpcCwgY3VyX3BhZ2VzLCBjdXJfcGZuOwotICAgIHZvaWQgKmh2bV9pbmZvX3BhZ2U7 Ci0gICAgdWludDMyX3QgKmlkZW50X3B0OwotICAgIHN0cnVjdCBlbGZfYmluYXJ5IGVsZjsKLSAg ICB1aW50NjRfdCB2X3N0YXJ0LCB2X2VuZDsKLSAgICB1aW50NjRfdCBtX3N0YXJ0ID0gMCwgbV9l bmQgPSAwOworICAgIHVuc2lnbmVkIGxvbmcgY3VyX3BhZ2VzLCBjdXJfcGZuOwogICAgIGludCBy YzsKICAgICB4ZW5fY2FwYWJpbGl0aWVzX2luZm9fdCBjYXBzOwogICAgIHVuc2lnbmVkIGxvbmcg c3RhdF9ub3JtYWxfcGFnZXMgPSAwLCBzdGF0XzJtYl9wYWdlcyA9IDAsIAogICAgICAgICBzdGF0 XzFnYl9wYWdlcyA9IDA7CiAgICAgdW5zaWduZWQgaW50IG1lbWZsYWdzID0gMDsKICAgICBpbnQg Y2xhaW1fZW5hYmxlZCA9IGFyZ3MtPmNsYWltX2VuYWJsZWQ7Ci0gICAgeGVuX3Bmbl90IHNwZWNp YWxfYXJyYXlbTlJfU1BFQ0lBTF9QQUdFU107Ci0gICAgeGVuX3Bmbl90IGlvcmVxX3NlcnZlcl9h cnJheVtOUl9JT1JFUV9TRVJWRVJfUEFHRVNdOwogICAgIHVpbnQ2NF90IHRvdGFsX3BhZ2VzOwog ICAgIHhlbl92bWVtcmFuZ2VfdCBkdW1teV92bWVtcmFuZ2VbMl07CiAgICAgdW5zaWduZWQgaW50 IGR1bW15X3Zub2RlX3RvX3Bub2RlWzFdOwpAQCAtMjYwLDE5ICsyNTIsNiBAQCBzdGF0aWMgaW50 IHNldHVwX2d1ZXN0KHhjX2ludGVyZmFjZSAqeGNoLAogICAgIHVuc2lnbmVkIGludCAqdm5vZGVf dG9fcG5vZGU7CiAgICAgdW5zaWduZWQgaW50IG5yX3ZtZW1yYW5nZXMsIG5yX3Zub2RlczsKIAot ICAgIG1lbXNldCgmZWxmLCAwLCBzaXplb2YoZWxmKSk7Ci0gICAgaWYgKCBlbGZfaW5pdCgmZWxm LCBpbWFnZSwgaW1hZ2Vfc2l6ZSkgIT0gMCApCi0gICAgewotICAgICAgICBQRVJST1IoIkNvdWxk IG5vdCBpbml0aWFsaXNlIEVMRiBpbWFnZSIpOwotICAgICAgICBnb3RvIGVycm9yX291dDsKLSAg ICB9Ci0KLSAgICB4Y19lbGZfc2V0X2xvZ2ZpbGUoeGNoLCAmZWxmLCAxKTsKLQotICAgIGVsZl9w YXJzZV9iaW5hcnkoJmVsZik7Ci0gICAgdl9zdGFydCA9IDA7Ci0gICAgdl9lbmQgPSBhcmdzLT5t ZW1fc2l6ZTsKLQogICAgIGlmICggbnJfcGFnZXMgPiB0YXJnZXRfcGFnZXMgKQogICAgICAgICBt ZW1mbGFncyB8PSBYRU5NRU1GX3BvcHVsYXRlX29uX2RlbWFuZDsKIApAQCAtMzQ1LDI0ICszMjQs NiBAQCBzdGF0aWMgaW50IHNldHVwX2d1ZXN0KHhjX2ludGVyZmFjZSAqeGNoLAogICAgICAgICBn b3RvIGVycm9yX291dDsKICAgICB9CiAKLSAgICBpZiAoIG1vZHVsZXNfaW5pdChhcmdzLCB2X2Vu ZCwgJmVsZiwgJm1fc3RhcnQsICZtX2VuZCkgIT0gMCApCi0gICAgewotICAgICAgICBFUlJPUigi SW5zdWZmaWNpZW50IHNwYWNlIHRvIGxvYWQgbW9kdWxlcy4iKTsKLSAgICAgICAgZ290byBlcnJv cl9vdXQ7Ci0gICAgfQotCi0gICAgRFBSSU5URigiVklSVFVBTCBNRU1PUlkgQVJSQU5HRU1FTlQ6 XG4iKTsKLSAgICBEUFJJTlRGKCIgIExvYWRlcjogICAlMDE2IlBSSXg2NCItPiUwMTYiUFJJeDY0 IlxuIiwgZWxmLnBzdGFydCwgZWxmLnBlbmQpOwotICAgIERQUklOVEYoIiAgTW9kdWxlczogICUw MTYiUFJJeDY0Ii0+JTAxNiJQUkl4NjQiXG4iLCBtX3N0YXJ0LCBtX2VuZCk7Ci0gICAgRFBSSU5U RigiICBUT1RBTDogICAgJTAxNiJQUkl4NjQiLT4lMDE2IlBSSXg2NCJcbiIsIHZfc3RhcnQsIHZf ZW5kKTsKLSAgICBEUFJJTlRGKCIgIEVOVFJZOiAgICAlMDE2IlBSSXg2NCJcbiIsIGVsZl91dmFs KCZlbGYsIGVsZi5laGRyLCBlX2VudHJ5KSk7Ci0KLSAgICBpZiAoIChwYWdlX2FycmF5ID0gbWFs bG9jKHAybV9zaXplICogc2l6ZW9mKHhlbl9wZm5fdCkpKSA9PSBOVUxMICkKLSAgICB7Ci0gICAg ICAgIFBFUlJPUigiQ291bGQgbm90IGFsbG9jYXRlIG1lbW9yeS4iKTsKLSAgICAgICAgZ290byBl cnJvcl9vdXQ7Ci0gICAgfQotCiAgICAgZm9yICggaSA9IDA7IGkgPCBwMm1fc2l6ZTsgaSsrICkK ICAgICAgICAgcGFnZV9hcnJheVtpXSA9ICgoeGVuX3Bmbl90KS0xKTsKICAgICBmb3IgKCB2bWVt aWQgPSAwOyB2bWVtaWQgPCBucl92bWVtcmFuZ2VzOyB2bWVtaWQrKyApCkBAIC01NjIsNyArNTIz LDU0IEBAIHN0YXRpYyBpbnQgc2V0dXBfZ3Vlc3QoeGNfaW50ZXJmYWNlICp4Y2gsCiAgICAgRFBS SU5URigiICA0S0IgUEFHRVM6IDB4JTAxNmx4XG4iLCBzdGF0X25vcm1hbF9wYWdlcyk7CiAgICAg RFBSSU5URigiICAyTUIgUEFHRVM6IDB4JTAxNmx4XG4iLCBzdGF0XzJtYl9wYWdlcyk7CiAgICAg RFBSSU5URigiICAxR0IgUEFHRVM6IDB4JTAxNmx4XG4iLCBzdGF0XzFnYl9wYWdlcyk7Ci0gICAg CisKKyAgICByYyA9IDA7CisgICAgZ290byBvdXQ7CisgZXJyb3Jfb3V0OgorICAgIHJjID0gLTE7 Cisgb3V0OgorCisgICAgLyogZW5zdXJlIG5vIHVuY2xhaW1lZCBwYWdlcyBhcmUgbGVmdCB1bnVz ZWQgKi8KKyAgICB4Y19kb21haW5fY2xhaW1fcGFnZXMoeGNoLCBkb20sIDAgLyogY2FuY2VscyB0 aGUgY2xhaW0gKi8pOworCisgICAgcmV0dXJuIHJjOworfQorCitzdGF0aWMgaW50IHhjX2h2bV9s b2FkX2ltYWdlKHhjX2ludGVyZmFjZSAqeGNoLAorICAgICAgICAgICAgICAgICAgICAgICB1aW50 MzJfdCBkb20sIHN0cnVjdCB4Y19odm1fYnVpbGRfYXJncyAqYXJncywKKyAgICAgICAgICAgICAg ICAgICAgICAgeGVuX3Bmbl90ICpwYWdlX2FycmF5KQoreworICAgIHVuc2lnbmVkIGxvbmcgZW50 cnlfZWlwLCBpbWFnZV9zaXplOworICAgIHN0cnVjdCBlbGZfYmluYXJ5IGVsZjsKKyAgICB1aW50 NjRfdCB2X3N0YXJ0LCB2X2VuZDsKKyAgICB1aW50NjRfdCBtX3N0YXJ0ID0gMCwgbV9lbmQgPSAw OworICAgIGNoYXIgKmltYWdlOworICAgIGludCByYzsKKworICAgIGltYWdlID0geGNfcmVhZF9p bWFnZSh4Y2gsIGFyZ3MtPmltYWdlX2ZpbGVfbmFtZSwgJmltYWdlX3NpemUpOworICAgIGlmICgg aW1hZ2UgPT0gTlVMTCApCisgICAgICAgIHJldHVybiAtMTsKKworICAgIG1lbXNldCgmZWxmLCAw LCBzaXplb2YoZWxmKSk7CisgICAgaWYgKCBlbGZfaW5pdCgmZWxmLCBpbWFnZSwgaW1hZ2Vfc2l6 ZSkgIT0gMCApCisgICAgICAgIGdvdG8gZXJyb3Jfb3V0OworCisgICAgeGNfZWxmX3NldF9sb2dm aWxlKHhjaCwgJmVsZiwgMSk7CisKKyAgICBlbGZfcGFyc2VfYmluYXJ5KCZlbGYpOworICAgIHZf c3RhcnQgPSAwOworICAgIHZfZW5kID0gYXJncy0+bWVtX3NpemU7CisKKyAgICBpZiAoIG1vZHVs ZXNfaW5pdChhcmdzLCB2X2VuZCwgJmVsZiwgJm1fc3RhcnQsICZtX2VuZCkgIT0gMCApCisgICAg eworICAgICAgICBFUlJPUigiSW5zdWZmaWNpZW50IHNwYWNlIHRvIGxvYWQgbW9kdWxlcy4iKTsK KyAgICAgICAgZ290byBlcnJvcl9vdXQ7CisgICAgfQorCisgICAgRFBSSU5URigiVklSVFVBTCBN RU1PUlkgQVJSQU5HRU1FTlQ6XG4iKTsKKyAgICBEUFJJTlRGKCIgIExvYWRlcjogICAlMDE2IlBS SXg2NCItPiUwMTYiUFJJeDY0IlxuIiwgZWxmLnBzdGFydCwgZWxmLnBlbmQpOworICAgIERQUklO VEYoIiAgTW9kdWxlczogICUwMTYiUFJJeDY0Ii0+JTAxNiJQUkl4NjQiXG4iLCBtX3N0YXJ0LCBt X2VuZCk7CisKICAgICBpZiAoIGxvYWRlbGZpbWFnZSh4Y2gsICZlbGYsIGRvbSwgcGFnZV9hcnJh eSkgIT0gMCApCiAgICAgewogICAgICAgICBQRVJST1IoIkNvdWxkIG5vdCBsb2FkIEVMRiBpbWFn ZSIpOwpAQCAtNTc1LDYgKzU4Myw0NCBAQCBzdGF0aWMgaW50IHNldHVwX2d1ZXN0KHhjX2ludGVy ZmFjZSAqeGNoLAogICAgICAgICBnb3RvIGVycm9yX291dDsKICAgICB9CiAKKyAgICAvKiBJbnNl cnQgSk1QIDxyZWwzMj4gaW5zdHJ1Y3Rpb24gYXQgYWRkcmVzcyAweDAgdG8gcmVhY2ggZW50cnkg cG9pbnQuICovCisgICAgZW50cnlfZWlwID0gZWxmX3V2YWwoJmVsZiwgZWxmLmVoZHIsIGVfZW50 cnkpOworICAgIGlmICggZW50cnlfZWlwICE9IDAgKQorICAgIHsKKyAgICAgICAgY2hhciAqcGFn ZTAgPSB4Y19tYXBfZm9yZWlnbl9yYW5nZSgKKyAgICAgICAgICAgIHhjaCwgZG9tLCBQQUdFX1NJ WkUsIFBST1RfUkVBRCB8IFBST1RfV1JJVEUsIDApOworICAgICAgICBpZiAoIHBhZ2UwID09IE5V TEwgKQorICAgICAgICAgICAgZ290byBlcnJvcl9vdXQ7CisgICAgICAgIHBhZ2UwWzBdID0gMHhl OTsKKyAgICAgICAgKih1aW50MzJfdCAqKSZwYWdlMFsxXSA9IGVudHJ5X2VpcCAtIDU7CisgICAg ICAgIG11bm1hcChwYWdlMCwgUEFHRV9TSVpFKTsKKyAgICB9CisKKyAgICByYyA9IDA7CisgICAg Z290byBvdXQ7CisgZXJyb3Jfb3V0OgorICAgIHJjID0gLTE7Cisgb3V0OgorICAgIGlmICggZWxm X2NoZWNrX2Jyb2tlbigmZWxmKSApCisgICAgICAgIEVSUk9SKCJIVk0gRUxGIGJyb2tlbjogJXMi LCBlbGZfY2hlY2tfYnJva2VuKCZlbGYpKTsKKyAgICBmcmVlKGltYWdlKTsKKworICAgIHJldHVy biByYzsKK30KKworc3RhdGljIGludCB4Y19odm1fcG9wdWxhdGVfcGFyYW1zKHhjX2ludGVyZmFj ZSAqeGNoLCB1aW50MzJfdCBkb20sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg c3RydWN0IHhjX2h2bV9idWlsZF9hcmdzICphcmdzKQoreworICAgIHVuc2lnbmVkIGxvbmcgaTsK KyAgICB2b2lkICpodm1faW5mb19wYWdlOworICAgIHVpbnQzMl90ICppZGVudF9wdDsKKyAgICB1 aW50NjRfdCB2X2VuZDsKKyAgICBpbnQgcmM7CisgICAgeGVuX3Bmbl90IHNwZWNpYWxfYXJyYXlb TlJfU1BFQ0lBTF9QQUdFU107CisgICAgeGVuX3Bmbl90IGlvcmVxX3NlcnZlcl9hcnJheVtOUl9J T1JFUV9TRVJWRVJfUEFHRVNdOworCisgICAgdl9lbmQgPSBhcmdzLT5tZW1fc2l6ZTsKKwogICAg IGlmICggKGh2bV9pbmZvX3BhZ2UgPSB4Y19tYXBfZm9yZWlnbl9yYW5nZSgKICAgICAgICAgICAg ICAgeGNoLCBkb20sIFBBR0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwKICAgICAgICAg ICAgICAgSFZNX0lORk9fUEZOKSkgPT0gTlVMTCApCkBAIC02NjMsMzQgKzcwOSwxMiBAQCBzdGF0 aWMgaW50IHNldHVwX2d1ZXN0KHhjX2ludGVyZmFjZSAqeGNoLAogICAgIHhjX2h2bV9wYXJhbV9z ZXQoeGNoLCBkb20sIEhWTV9QQVJBTV9JREVOVF9QVCwKICAgICAgICAgICAgICAgICAgICAgIHNw ZWNpYWxfcGZuKFNQRUNJQUxQQUdFX0lERU5UX1BUKSA8PCBQQUdFX1NISUZUKTsKIAotICAgIC8q IEluc2VydCBKTVAgPHJlbDMyPiBpbnN0cnVjdGlvbiBhdCBhZGRyZXNzIDB4MCB0byByZWFjaCBl bnRyeSBwb2ludC4gKi8KLSAgICBlbnRyeV9laXAgPSBlbGZfdXZhbCgmZWxmLCBlbGYuZWhkciwg ZV9lbnRyeSk7Ci0gICAgaWYgKCBlbnRyeV9laXAgIT0gMCApCi0gICAgewotICAgICAgICBjaGFy ICpwYWdlMCA9IHhjX21hcF9mb3JlaWduX3JhbmdlKAotICAgICAgICAgICAgeGNoLCBkb20sIFBB R0VfU0laRSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgMCk7Ci0gICAgICAgIGlmICggcGFnZTAg PT0gTlVMTCApCi0gICAgICAgIHsKLSAgICAgICAgICAgIFBFUlJPUigiQ291bGQgbm90IG1hcCBw YWdlMCIpOwotICAgICAgICAgICAgZ290byBlcnJvcl9vdXQ7Ci0gICAgICAgIH0KLSAgICAgICAg cGFnZTBbMF0gPSAweGU5OwotICAgICAgICAqKHVpbnQzMl90ICopJnBhZ2UwWzFdID0gZW50cnlf ZWlwIC0gNTsKLSAgICAgICAgbXVubWFwKHBhZ2UwLCBQQUdFX1NJWkUpOwotICAgIH0KLQogICAg IHJjID0gMDsKICAgICBnb3RvIG91dDsKICBlcnJvcl9vdXQ6CiAgICAgcmMgPSAtMTsKICBvdXQ6 Ci0gICAgaWYgKCBlbGZfY2hlY2tfYnJva2VuKCZlbGYpICkKLSAgICAgICAgRVJST1IoIkhWTSBF TEYgYnJva2VuOiAlcyIsIGVsZl9jaGVja19icm9rZW4oJmVsZikpOwotCi0gICAgLyogZW5zdXJl IG5vIHVuY2xhaW1lZCBwYWdlcyBhcmUgbGVmdCB1bnVzZWQgKi8KLSAgICB4Y19kb21haW5fY2xh aW1fcGFnZXMoeGNoLCBkb20sIDAgLyogY2FuY2VscyB0aGUgY2xhaW0gKi8pOwogCi0gICAgZnJl ZShwYWdlX2FycmF5KTsKICAgICByZXR1cm4gcmM7CiB9CiAKQEAgLTcwMSw5ICs3MjUsOCBAQCBp bnQgeGNfaHZtX2J1aWxkKHhjX2ludGVyZmFjZSAqeGNoLCB1aW50MzJfdCBkb21pZCwKICAgICAg ICAgICAgICAgICAgc3RydWN0IHhjX2h2bV9idWlsZF9hcmdzICpodm1fYXJncykKIHsKICAgICBz dHJ1Y3QgeGNfaHZtX2J1aWxkX2FyZ3MgYXJncyA9ICpodm1fYXJnczsKLSAgICB2b2lkICppbWFn ZTsKLSAgICB1bnNpZ25lZCBsb25nIGltYWdlX3NpemU7Ci0gICAgaW50IHN0czsKKyAgICB4ZW5f cGZuX3QgKnBhcnJheSA9IE5VTEw7CisgICAgaW50IHJjOwogCiAgICAgaWYgKCBkb21pZCA9PSAw ICkKICAgICAgICAgcmV0dXJuIC0xOwpAQCAtNzE0LDI0ICs3MzcsMzcgQEAgaW50IHhjX2h2bV9i dWlsZCh4Y19pbnRlcmZhY2UgKnhjaCwgdWludDMyX3QgZG9taWQsCiAgICAgaWYgKCBhcmdzLm1l bV9zaXplIDwgKDJ1bGwgPDwgMjApIHx8IGFyZ3MubWVtX3RhcmdldCA8ICgydWxsIDw8IDIwKSAp CiAgICAgICAgIHJldHVybiAtMTsKIAotICAgIGltYWdlID0geGNfcmVhZF9pbWFnZSh4Y2gsIGFy Z3MuaW1hZ2VfZmlsZV9uYW1lLCAmaW1hZ2Vfc2l6ZSk7Ci0gICAgaWYgKCBpbWFnZSA9PSBOVUxM ICkKKyAgICBwYXJyYXkgPSBtYWxsb2MoKGFyZ3MubWVtX3NpemUgPj4gUEFHRV9TSElGVCkgKiBz aXplb2YoeGVuX3Bmbl90KSk7CisgICAgaWYgKCBwYXJyYXkgPT0gTlVMTCApCiAgICAgICAgIHJl dHVybiAtMTsKIAotICAgIHN0cyA9IHNldHVwX2d1ZXN0KHhjaCwgZG9taWQsICZhcmdzLCBpbWFn ZSwgaW1hZ2Vfc2l6ZSk7Ci0KLSAgICBpZiAoIXN0cykKKyAgICByYyA9IHhjX2h2bV9wb3B1bGF0 ZV9tZW1vcnkoeGNoLCBkb21pZCwgJmFyZ3MsIHBhcnJheSk7CisgICAgaWYgKCByYyAhPSAwICkK ICAgICB7Ci0gICAgICAgIC8qIFJldHVybiBtb2R1bGUgbG9hZCBhZGRyZXNzZXMgdG8gY2FsbGVy ICovCi0gICAgICAgIGh2bV9hcmdzLT5hY3BpX21vZHVsZS5ndWVzdF9hZGRyX291dCA9IAotICAg ICAgICAgICAgYXJncy5hY3BpX21vZHVsZS5ndWVzdF9hZGRyX291dDsKLSAgICAgICAgaHZtX2Fy Z3MtPnNtYmlvc19tb2R1bGUuZ3Vlc3RfYWRkcl9vdXQgPSAKLSAgICAgICAgICAgIGFyZ3Muc21i aW9zX21vZHVsZS5ndWVzdF9hZGRyX291dDsKKyAgICAgICAgUEVSUk9SKCJ4Y19odm1fcG9wdWxh dGVfbWVtb3J5IGZhaWxlZCIpOworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgcmMgPSB4 Y19odm1fbG9hZF9pbWFnZSh4Y2gsIGRvbWlkLCAmYXJncywgcGFycmF5KTsKKyAgICBpZiAoIHJj ICE9IDAgKQorICAgIHsKKyAgICAgICAgUEVSUk9SKCJ4Y19odm1fbG9hZF9pbWFnZSBmYWlsZWQi KTsKKyAgICAgICAgZ290byBvdXQ7CisgICAgfQorICAgIHJjID0geGNfaHZtX3BvcHVsYXRlX3Bh cmFtcyh4Y2gsIGRvbWlkLCAmYXJncyk7CisgICAgaWYgKCByYyAhPSAwICkKKyAgICB7CisgICAg ICAgIFBFUlJPUigieGNfaHZtX3BvcHVsYXRlX3BhcmFtcyBmYWlsZWQiKTsKKyAgICAgICAgZ290 byBvdXQ7CiAgICAgfQogCi0gICAgZnJlZShpbWFnZSk7CisgICAgLyogUmV0dXJuIG1vZHVsZSBs b2FkIGFkZHJlc3NlcyB0byBjYWxsZXIgKi8KKyAgICBodm1fYXJncy0+YWNwaV9tb2R1bGUuZ3Vl c3RfYWRkcl9vdXQgPSBhcmdzLmFjcGlfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0OworICAgIGh2bV9h cmdzLT5zbWJpb3NfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0ID0gYXJncy5zbWJpb3NfbW9kdWxlLmd1 ZXN0X2FkZHJfb3V0OwogCi0gICAgcmV0dXJuIHN0czsKK291dDoKKyAgICBmcmVlKHBhcnJheSk7 CisKKyAgICByZXR1cm4gcmM7CiB9CiAKIC8qIHhjX2h2bV9idWlsZF90YXJnZXRfbWVtOiAKLS0g CjEuOS41IChBcHBsZSBHaXQtNTAuMykKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54 ZW4ub3JnCmh0dHA6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=