From mboxrd@z Thu Jan 1 00:00:00 1970 From: Roger Pau Monne Subject: [PATCH v3 01/32] libxc: split x86 HVM setup_guest into smaller logical functions Date: Fri, 3 Jul 2015 13:34:39 +0200 Message-ID: <1435923310-9019-2-git-send-email-roger.pau@citrix.com> References: <1435923310-9019-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.bemta14.messagelabs.com ([193.109.254.103]) by lists.xen.org with esmtp (Exim 4.72) (envelope-from ) id 1ZAzFX-0002v2-I3 for xen-devel@lists.xenproject.org; Fri, 03 Jul 2015 11:35:19 +0000 In-Reply-To: <1435923310-9019-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+ CkNjOiBJYW4gSmFja3NvbiA8aWFuLmphY2tzb25AZXUuY2l0cml4LmNvbT4KQ2M6IFN0ZWZhbm8g U3RhYmVsbGluaSA8c3RlZmFuby5zdGFiZWxsaW5pQGV1LmNpdHJpeC5jb20+CkNjOiBJYW4gQ2Ft cGJlbGwgPGlhbi5jYW1wYmVsbEBjaXRyaXguY29tPgpDYzogV2VpIExpdSA8d2VpLmxpdTJAY2l0 cml4LmNvbT4KLS0tCiB0b29scy9saWJ4Yy94Y19odm1fYnVpbGRfeDg2LmMgfCAxOTggKysrKysr KysrKysrKysrKysrKysrKysrLS0tLS0tLS0tLS0tLS0tLS0KIDEgZmlsZSBjaGFuZ2VkLCAxMTcg aW5zZXJ0aW9ucygrKSwgODEgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvdG9vbHMvbGlieGMv eGNfaHZtX2J1aWxkX3g4Ni5jIGIvdG9vbHMvbGlieGMveGNfaHZtX2J1aWxkX3g4Ni5jCmluZGV4 IDAwM2VhMDYuLmY3NjE2YTggMTAwNjQ0Ci0tLSBhL3Rvb2xzL2xpYnhjL3hjX2h2bV9idWlsZF94 ODYuYworKysgYi90b29scy9saWJ4Yy94Y19odm1fYnVpbGRfeDg2LmMKQEAgLTIzMiwyOCArMjMy LDIwIEBAIHN0YXRpYyBpbnQgY2hlY2tfbW1pb19ob2xlKHVpbnQ2NF90IHN0YXJ0LCB1aW50NjRf dCBtZW1zaXplLAogICAgICAgICByZXR1cm4gMTsKIH0KIAotc3RhdGljIGludCBzZXR1cF9ndWVz dCh4Y19pbnRlcmZhY2UgKnhjaCwKLSAgICAgICAgICAgICAgICAgICAgICAgdWludDMyX3QgZG9t LCBzdHJ1Y3QgeGNfaHZtX2J1aWxkX2FyZ3MgKmFyZ3MsCi0gICAgICAgICAgICAgICAgICAgICAg IGNoYXIgKmltYWdlLCB1bnNpZ25lZCBsb25nIGltYWdlX3NpemUpCitzdGF0aWMgaW50IHhjX2h2 bV9wb3B1bGF0ZV9tZW1vcnkoeGNfaW50ZXJmYWNlICp4Y2gsIHVpbnQzMl90IGRvbSwKKyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeGNfaHZtX2J1aWxkX2FyZ3MgKmFy Z3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgeGVuX3Bmbl90ICpwYWdlX2Fy cmF5KQogewotICAgIHhlbl9wZm5fdCAqcGFnZV9hcnJheSA9IE5VTEw7CiAgICAgdW5zaWduZWQg bG9uZyBpLCB2bWVtaWQsIG5yX3BhZ2VzID0gYXJncy0+bWVtX3NpemUgPj4gUEFHRV9TSElGVDsK ICAgICB1bnNpZ25lZCBsb25nIHAybV9zaXplOwogICAgIHVuc2lnbmVkIGxvbmcgdGFyZ2V0X3Bh Z2VzID0gYXJncy0+bWVtX3RhcmdldCA+PiBQQUdFX1NISUZUOwotICAgIHVuc2lnbmVkIGxvbmcg ZW50cnlfZWlwLCBjdXJfcGFnZXMsIGN1cl9wZm47Ci0gICAgdm9pZCAqaHZtX2luZm9fcGFnZTsK LSAgICB1aW50MzJfdCAqaWRlbnRfcHQ7Ci0gICAgc3RydWN0IGVsZl9iaW5hcnkgZWxmOwotICAg IHVpbnQ2NF90IHZfc3RhcnQsIHZfZW5kOwotICAgIHVpbnQ2NF90IG1fc3RhcnQgPSAwLCBtX2Vu ZCA9IDA7CisgICAgdW5zaWduZWQgbG9uZyBjdXJfcGFnZXMsIGN1cl9wZm47CiAgICAgaW50IHJj OwogICAgIHhlbl9jYXBhYmlsaXRpZXNfaW5mb190IGNhcHM7CiAgICAgdW5zaWduZWQgbG9uZyBz dGF0X25vcm1hbF9wYWdlcyA9IDAsIHN0YXRfMm1iX3BhZ2VzID0gMCwgCiAgICAgICAgIHN0YXRf MWdiX3BhZ2VzID0gMDsKICAgICB1bnNpZ25lZCBpbnQgbWVtZmxhZ3MgPSAwOwogICAgIGludCBj bGFpbV9lbmFibGVkID0gYXJncy0+Y2xhaW1fZW5hYmxlZDsKLSAgICB4ZW5fcGZuX3Qgc3BlY2lh bF9hcnJheVtOUl9TUEVDSUFMX1BBR0VTXTsKLSAgICB4ZW5fcGZuX3QgaW9yZXFfc2VydmVyX2Fy cmF5W05SX0lPUkVRX1NFUlZFUl9QQUdFU107CiAgICAgdWludDY0X3QgdG90YWxfcGFnZXM7CiAg ICAgeGVuX3ZtZW1yYW5nZV90IGR1bW15X3ZtZW1yYW5nZVsyXTsKICAgICB1bnNpZ25lZCBpbnQg ZHVtbXlfdm5vZGVfdG9fcG5vZGVbMV07CkBAIC0yNjEsMTkgKzI1Myw2IEBAIHN0YXRpYyBpbnQg c2V0dXBfZ3Vlc3QoeGNfaW50ZXJmYWNlICp4Y2gsCiAgICAgdW5zaWduZWQgaW50ICp2bm9kZV90 b19wbm9kZTsKICAgICB1bnNpZ25lZCBpbnQgbnJfdm1lbXJhbmdlcywgbnJfdm5vZGVzOwogCi0g ICAgbWVtc2V0KCZlbGYsIDAsIHNpemVvZihlbGYpKTsKLSAgICBpZiAoIGVsZl9pbml0KCZlbGYs IGltYWdlLCBpbWFnZV9zaXplKSAhPSAwICkKLSAgICB7Ci0gICAgICAgIFBFUlJPUigiQ291bGQg bm90IGluaXRpYWxpc2UgRUxGIGltYWdlIik7Ci0gICAgICAgIGdvdG8gZXJyb3Jfb3V0OwotICAg IH0KLQotICAgIHhjX2VsZl9zZXRfbG9nZmlsZSh4Y2gsICZlbGYsIDEpOwotCi0gICAgZWxmX3Bh cnNlX2JpbmFyeSgmZWxmKTsKLSAgICB2X3N0YXJ0ID0gMDsKLSAgICB2X2VuZCA9IGFyZ3MtPm1l bV9zaXplOwotCiAgICAgaWYgKCBucl9wYWdlcyA+IHRhcmdldF9wYWdlcyApCiAgICAgICAgIG1l bWZsYWdzIHw9IFhFTk1FTUZfcG9wdWxhdGVfb25fZGVtYW5kOwogCkBAIC0zNDYsMjQgKzMyNSw2 IEBAIHN0YXRpYyBpbnQgc2V0dXBfZ3Vlc3QoeGNfaW50ZXJmYWNlICp4Y2gsCiAgICAgICAgIGdv dG8gZXJyb3Jfb3V0OwogICAgIH0KIAotICAgIGlmICggbW9kdWxlc19pbml0KGFyZ3MsIHZfZW5k LCAmZWxmLCAmbV9zdGFydCwgJm1fZW5kKSAhPSAwICkKLSAgICB7Ci0gICAgICAgIEVSUk9SKCJJ bnN1ZmZpY2llbnQgc3BhY2UgdG8gbG9hZCBtb2R1bGVzLiIpOwotICAgICAgICBnb3RvIGVycm9y X291dDsKLSAgICB9Ci0KLSAgICBEUFJJTlRGKCJWSVJUVUFMIE1FTU9SWSBBUlJBTkdFTUVOVDpc biIpOwotICAgIERQUklOVEYoIiAgTG9hZGVyOiAgICUwMTYiUFJJeDY0Ii0+JTAxNiJQUkl4NjQi XG4iLCBlbGYucHN0YXJ0LCBlbGYucGVuZCk7Ci0gICAgRFBSSU5URigiICBNb2R1bGVzOiAgJTAx NiJQUkl4NjQiLT4lMDE2IlBSSXg2NCJcbiIsIG1fc3RhcnQsIG1fZW5kKTsKLSAgICBEUFJJTlRG KCIgIFRPVEFMOiAgICAlMDE2IlBSSXg2NCItPiUwMTYiUFJJeDY0IlxuIiwgdl9zdGFydCwgdl9l bmQpOwotICAgIERQUklOVEYoIiAgRU5UUlk6ICAgICUwMTYiUFJJeDY0IlxuIiwgZWxmX3V2YWwo JmVsZiwgZWxmLmVoZHIsIGVfZW50cnkpKTsKLQotICAgIGlmICggKHBhZ2VfYXJyYXkgPSBtYWxs b2MocDJtX3NpemUgKiBzaXplb2YoeGVuX3Bmbl90KSkpID09IE5VTEwgKQotICAgIHsKLSAgICAg ICAgUEVSUk9SKCJDb3VsZCBub3QgYWxsb2NhdGUgbWVtb3J5LiIpOwotICAgICAgICBnb3RvIGVy cm9yX291dDsKLSAgICB9Ci0KICAgICBmb3IgKCBpID0gMDsgaSA8IHAybV9zaXplOyBpKysgKQog ICAgICAgICBwYWdlX2FycmF5W2ldID0gKCh4ZW5fcGZuX3QpLTEpOwogICAgIGZvciAoIHZtZW1p ZCA9IDA7IHZtZW1pZCA8IG5yX3ZtZW1yYW5nZXM7IHZtZW1pZCsrICkKQEAgLTU2Myw3ICs1MjQs NTQgQEAgc3RhdGljIGludCBzZXR1cF9ndWVzdCh4Y19pbnRlcmZhY2UgKnhjaCwKICAgICBEUFJJ TlRGKCIgIDRLQiBQQUdFUzogMHglMDE2bHhcbiIsIHN0YXRfbm9ybWFsX3BhZ2VzKTsKICAgICBE UFJJTlRGKCIgIDJNQiBQQUdFUzogMHglMDE2bHhcbiIsIHN0YXRfMm1iX3BhZ2VzKTsKICAgICBE UFJJTlRGKCIgIDFHQiBQQUdFUzogMHglMDE2bHhcbiIsIHN0YXRfMWdiX3BhZ2VzKTsKLSAgICAK KworICAgIHJjID0gMDsKKyAgICBnb3RvIG91dDsKKyBlcnJvcl9vdXQ6CisgICAgcmMgPSAtMTsK KyBvdXQ6CisKKyAgICAvKiBlbnN1cmUgbm8gdW5jbGFpbWVkIHBhZ2VzIGFyZSBsZWZ0IHVudXNl ZCAqLworICAgIHhjX2RvbWFpbl9jbGFpbV9wYWdlcyh4Y2gsIGRvbSwgMCAvKiBjYW5jZWxzIHRo ZSBjbGFpbSAqLyk7CisKKyAgICByZXR1cm4gcmM7Cit9CisKK3N0YXRpYyBpbnQgeGNfaHZtX2xv YWRfaW1hZ2UoeGNfaW50ZXJmYWNlICp4Y2gsCisgICAgICAgICAgICAgICAgICAgICAgIHVpbnQz Ml90IGRvbSwgc3RydWN0IHhjX2h2bV9idWlsZF9hcmdzICphcmdzLAorICAgICAgICAgICAgICAg ICAgICAgICB4ZW5fcGZuX3QgKnBhZ2VfYXJyYXkpCit7CisgICAgdW5zaWduZWQgbG9uZyBlbnRy eV9laXAsIGltYWdlX3NpemU7CisgICAgc3RydWN0IGVsZl9iaW5hcnkgZWxmOworICAgIHVpbnQ2 NF90IHZfc3RhcnQsIHZfZW5kOworICAgIHVpbnQ2NF90IG1fc3RhcnQgPSAwLCBtX2VuZCA9IDA7 CisgICAgY2hhciAqaW1hZ2U7CisgICAgaW50IHJjOworCisgICAgaW1hZ2UgPSB4Y19yZWFkX2lt YWdlKHhjaCwgYXJncy0+aW1hZ2VfZmlsZV9uYW1lLCAmaW1hZ2Vfc2l6ZSk7CisgICAgaWYgKCBp bWFnZSA9PSBOVUxMICkKKyAgICAgICAgcmV0dXJuIC0xOworCisgICAgbWVtc2V0KCZlbGYsIDAs IHNpemVvZihlbGYpKTsKKyAgICBpZiAoIGVsZl9pbml0KCZlbGYsIGltYWdlLCBpbWFnZV9zaXpl KSAhPSAwICkKKyAgICAgICAgZ290byBlcnJvcl9vdXQ7CisKKyAgICB4Y19lbGZfc2V0X2xvZ2Zp bGUoeGNoLCAmZWxmLCAxKTsKKworICAgIGVsZl9wYXJzZV9iaW5hcnkoJmVsZik7CisgICAgdl9z dGFydCA9IDA7CisgICAgdl9lbmQgPSBhcmdzLT5tZW1fc2l6ZTsKKworICAgIGlmICggbW9kdWxl c19pbml0KGFyZ3MsIHZfZW5kLCAmZWxmLCAmbV9zdGFydCwgJm1fZW5kKSAhPSAwICkKKyAgICB7 CisgICAgICAgIEVSUk9SKCJJbnN1ZmZpY2llbnQgc3BhY2UgdG8gbG9hZCBtb2R1bGVzLiIpOwor ICAgICAgICBnb3RvIGVycm9yX291dDsKKyAgICB9CisKKyAgICBEUFJJTlRGKCJWSVJUVUFMIE1F TU9SWSBBUlJBTkdFTUVOVDpcbiIpOworICAgIERQUklOVEYoIiAgTG9hZGVyOiAgICUwMTYiUFJJ eDY0Ii0+JTAxNiJQUkl4NjQiXG4iLCBlbGYucHN0YXJ0LCBlbGYucGVuZCk7CisgICAgRFBSSU5U RigiICBNb2R1bGVzOiAgJTAxNiJQUkl4NjQiLT4lMDE2IlBSSXg2NCJcbiIsIG1fc3RhcnQsIG1f ZW5kKTsKKwogICAgIGlmICggbG9hZGVsZmltYWdlKHhjaCwgJmVsZiwgZG9tLCBwYWdlX2FycmF5 KSAhPSAwICkKICAgICB7CiAgICAgICAgIFBFUlJPUigiQ291bGQgbm90IGxvYWQgRUxGIGltYWdl Iik7CkBAIC01NzYsNiArNTg0LDQ0IEBAIHN0YXRpYyBpbnQgc2V0dXBfZ3Vlc3QoeGNfaW50ZXJm YWNlICp4Y2gsCiAgICAgICAgIGdvdG8gZXJyb3Jfb3V0OwogICAgIH0KIAorICAgIC8qIEluc2Vy dCBKTVAgPHJlbDMyPiBpbnN0cnVjdGlvbiBhdCBhZGRyZXNzIDB4MCB0byByZWFjaCBlbnRyeSBw b2ludC4gKi8KKyAgICBlbnRyeV9laXAgPSBlbGZfdXZhbCgmZWxmLCBlbGYuZWhkciwgZV9lbnRy eSk7CisgICAgaWYgKCBlbnRyeV9laXAgIT0gMCApCisgICAgeworICAgICAgICBjaGFyICpwYWdl MCA9IHhjX21hcF9mb3JlaWduX3JhbmdlKAorICAgICAgICAgICAgeGNoLCBkb20sIFBBR0VfU0la RSwgUFJPVF9SRUFEIHwgUFJPVF9XUklURSwgMCk7CisgICAgICAgIGlmICggcGFnZTAgPT0gTlVM TCApCisgICAgICAgICAgICBnb3RvIGVycm9yX291dDsKKyAgICAgICAgcGFnZTBbMF0gPSAweGU5 OworICAgICAgICAqKHVpbnQzMl90ICopJnBhZ2UwWzFdID0gZW50cnlfZWlwIC0gNTsKKyAgICAg ICAgbXVubWFwKHBhZ2UwLCBQQUdFX1NJWkUpOworICAgIH0KKworICAgIHJjID0gMDsKKyAgICBn b3RvIG91dDsKKyBlcnJvcl9vdXQ6CisgICAgcmMgPSAtMTsKKyBvdXQ6CisgICAgaWYgKCBlbGZf Y2hlY2tfYnJva2VuKCZlbGYpICkKKyAgICAgICAgRVJST1IoIkhWTSBFTEYgYnJva2VuOiAlcyIs IGVsZl9jaGVja19icm9rZW4oJmVsZikpOworICAgIGZyZWUoaW1hZ2UpOworCisgICAgcmV0dXJu IHJjOworfQorCitzdGF0aWMgaW50IHhjX2h2bV9wb3B1bGF0ZV9wYXJhbXMoeGNfaW50ZXJmYWNl ICp4Y2gsIHVpbnQzMl90IGRvbSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBz dHJ1Y3QgeGNfaHZtX2J1aWxkX2FyZ3MgKmFyZ3MpCit7CisgICAgdW5zaWduZWQgbG9uZyBpOwor ICAgIHZvaWQgKmh2bV9pbmZvX3BhZ2U7CisgICAgdWludDMyX3QgKmlkZW50X3B0OworICAgIHVp bnQ2NF90IHZfZW5kOworICAgIGludCByYzsKKyAgICB4ZW5fcGZuX3Qgc3BlY2lhbF9hcnJheVtO Ul9TUEVDSUFMX1BBR0VTXTsKKyAgICB4ZW5fcGZuX3QgaW9yZXFfc2VydmVyX2FycmF5W05SX0lP UkVRX1NFUlZFUl9QQUdFU107CisKKyAgICB2X2VuZCA9IGFyZ3MtPm1lbV9zaXplOworCiAgICAg aWYgKCAoaHZtX2luZm9fcGFnZSA9IHhjX21hcF9mb3JlaWduX3JhbmdlKAogICAgICAgICAgICAg ICB4Y2gsIGRvbSwgUEFHRV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLAogICAgICAgICAg ICAgICBIVk1fSU5GT19QRk4pKSA9PSBOVUxMICkKQEAgLTY2NCwzNCArNzEwLDEyIEBAIHN0YXRp YyBpbnQgc2V0dXBfZ3Vlc3QoeGNfaW50ZXJmYWNlICp4Y2gsCiAgICAgeGNfaHZtX3BhcmFtX3Nl dCh4Y2gsIGRvbSwgSFZNX1BBUkFNX0lERU5UX1BULAogICAgICAgICAgICAgICAgICAgICAgc3Bl Y2lhbF9wZm4oU1BFQ0lBTFBBR0VfSURFTlRfUFQpIDw8IFBBR0VfU0hJRlQpOwogCi0gICAgLyog SW5zZXJ0IEpNUCA8cmVsMzI+IGluc3RydWN0aW9uIGF0IGFkZHJlc3MgMHgwIHRvIHJlYWNoIGVu dHJ5IHBvaW50LiAqLwotICAgIGVudHJ5X2VpcCA9IGVsZl91dmFsKCZlbGYsIGVsZi5laGRyLCBl X2VudHJ5KTsKLSAgICBpZiAoIGVudHJ5X2VpcCAhPSAwICkKLSAgICB7Ci0gICAgICAgIGNoYXIg KnBhZ2UwID0geGNfbWFwX2ZvcmVpZ25fcmFuZ2UoCi0gICAgICAgICAgICB4Y2gsIGRvbSwgUEFH RV9TSVpFLCBQUk9UX1JFQUQgfCBQUk9UX1dSSVRFLCAwKTsKLSAgICAgICAgaWYgKCBwYWdlMCA9 PSBOVUxMICkKLSAgICAgICAgewotICAgICAgICAgICAgUEVSUk9SKCJDb3VsZCBub3QgbWFwIHBh Z2UwIik7Ci0gICAgICAgICAgICBnb3RvIGVycm9yX291dDsKLSAgICAgICAgfQotICAgICAgICBw YWdlMFswXSA9IDB4ZTk7Ci0gICAgICAgICoodWludDMyX3QgKikmcGFnZTBbMV0gPSBlbnRyeV9l aXAgLSA1OwotICAgICAgICBtdW5tYXAocGFnZTAsIFBBR0VfU0laRSk7Ci0gICAgfQotCiAgICAg cmMgPSAwOwogICAgIGdvdG8gb3V0OwogIGVycm9yX291dDoKICAgICByYyA9IC0xOwogIG91dDoK LSAgICBpZiAoIGVsZl9jaGVja19icm9rZW4oJmVsZikgKQotICAgICAgICBFUlJPUigiSFZNIEVM RiBicm9rZW46ICVzIiwgZWxmX2NoZWNrX2Jyb2tlbigmZWxmKSk7Ci0KLSAgICAvKiBlbnN1cmUg bm8gdW5jbGFpbWVkIHBhZ2VzIGFyZSBsZWZ0IHVudXNlZCAqLwotICAgIHhjX2RvbWFpbl9jbGFp bV9wYWdlcyh4Y2gsIGRvbSwgMCAvKiBjYW5jZWxzIHRoZSBjbGFpbSAqLyk7CiAKLSAgICBmcmVl KHBhZ2VfYXJyYXkpOwogICAgIHJldHVybiByYzsKIH0KIApAQCAtNzAyLDkgKzcyNiw4IEBAIGlu dCB4Y19odm1fYnVpbGQoeGNfaW50ZXJmYWNlICp4Y2gsIHVpbnQzMl90IGRvbWlkLAogICAgICAg ICAgICAgICAgICBzdHJ1Y3QgeGNfaHZtX2J1aWxkX2FyZ3MgKmh2bV9hcmdzKQogewogICAgIHN0 cnVjdCB4Y19odm1fYnVpbGRfYXJncyBhcmdzID0gKmh2bV9hcmdzOwotICAgIHZvaWQgKmltYWdl OwotICAgIHVuc2lnbmVkIGxvbmcgaW1hZ2Vfc2l6ZTsKLSAgICBpbnQgc3RzOworICAgIHhlbl9w Zm5fdCAqcGFycmF5ID0gTlVMTDsKKyAgICBpbnQgcmM7CiAKICAgICBpZiAoIGRvbWlkID09IDAg KQogICAgICAgICByZXR1cm4gLTE7CkBAIC03MTUsMjQgKzczOCwzNyBAQCBpbnQgeGNfaHZtX2J1 aWxkKHhjX2ludGVyZmFjZSAqeGNoLCB1aW50MzJfdCBkb21pZCwKICAgICBpZiAoIGFyZ3MubWVt X3NpemUgPCAoMnVsbCA8PCAyMCkgfHwgYXJncy5tZW1fdGFyZ2V0IDwgKDJ1bGwgPDwgMjApICkK ICAgICAgICAgcmV0dXJuIC0xOwogCi0gICAgaW1hZ2UgPSB4Y19yZWFkX2ltYWdlKHhjaCwgYXJn cy5pbWFnZV9maWxlX25hbWUsICZpbWFnZV9zaXplKTsKLSAgICBpZiAoIGltYWdlID09IE5VTEwg KQorICAgIHBhcnJheSA9IG1hbGxvYygoYXJncy5tZW1fc2l6ZSA+PiBQQUdFX1NISUZUKSAqIHNp emVvZih4ZW5fcGZuX3QpKTsKKyAgICBpZiAoIHBhcnJheSA9PSBOVUxMICkKICAgICAgICAgcmV0 dXJuIC0xOwogCi0gICAgc3RzID0gc2V0dXBfZ3Vlc3QoeGNoLCBkb21pZCwgJmFyZ3MsIGltYWdl LCBpbWFnZV9zaXplKTsKLQotICAgIGlmICghc3RzKQorICAgIHJjID0geGNfaHZtX3BvcHVsYXRl X21lbW9yeSh4Y2gsIGRvbWlkLCAmYXJncywgcGFycmF5KTsKKyAgICBpZiAoIHJjICE9IDAgKQog ICAgIHsKLSAgICAgICAgLyogUmV0dXJuIG1vZHVsZSBsb2FkIGFkZHJlc3NlcyB0byBjYWxsZXIg Ki8KLSAgICAgICAgaHZtX2FyZ3MtPmFjcGlfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0ID0gCi0gICAg ICAgICAgICBhcmdzLmFjcGlfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0OwotICAgICAgICBodm1fYXJn cy0+c21iaW9zX21vZHVsZS5ndWVzdF9hZGRyX291dCA9IAotICAgICAgICAgICAgYXJncy5zbWJp b3NfbW9kdWxlLmd1ZXN0X2FkZHJfb3V0OworICAgICAgICBQRVJST1IoInhjX2h2bV9wb3B1bGF0 ZV9tZW1vcnkgZmFpbGVkIik7CisgICAgICAgIGdvdG8gb3V0OworICAgIH0KKyAgICByYyA9IHhj X2h2bV9sb2FkX2ltYWdlKHhjaCwgZG9taWQsICZhcmdzLCBwYXJyYXkpOworICAgIGlmICggcmMg IT0gMCApCisgICAgeworICAgICAgICBQRVJST1IoInhjX2h2bV9sb2FkX2ltYWdlIGZhaWxlZCIp OworICAgICAgICBnb3RvIG91dDsKKyAgICB9CisgICAgcmMgPSB4Y19odm1fcG9wdWxhdGVfcGFy YW1zKHhjaCwgZG9taWQsICZhcmdzKTsKKyAgICBpZiAoIHJjICE9IDAgKQorICAgIHsKKyAgICAg ICAgUEVSUk9SKCJ4Y19odm1fcG9wdWxhdGVfcGFyYW1zIGZhaWxlZCIpOworICAgICAgICBnb3Rv IG91dDsKICAgICB9CiAKLSAgICBmcmVlKGltYWdlKTsKKyAgICAvKiBSZXR1cm4gbW9kdWxlIGxv YWQgYWRkcmVzc2VzIHRvIGNhbGxlciAqLworICAgIGh2bV9hcmdzLT5hY3BpX21vZHVsZS5ndWVz dF9hZGRyX291dCA9IGFyZ3MuYWNwaV9tb2R1bGUuZ3Vlc3RfYWRkcl9vdXQ7CisgICAgaHZtX2Fy Z3MtPnNtYmlvc19tb2R1bGUuZ3Vlc3RfYWRkcl9vdXQgPSBhcmdzLnNtYmlvc19tb2R1bGUuZ3Vl c3RfYWRkcl9vdXQ7CiAKLSAgICByZXR1cm4gc3RzOworb3V0OgorICAgIGZyZWUocGFycmF5KTsK KworICAgIHJldHVybiByYzsKIH0KIAogLyogeGNfaHZtX2J1aWxkX3RhcmdldF9tZW06IAotLSAK MS45LjUgKEFwcGxlIEdpdC01MC4zKQoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QKWGVuLWRldmVsQGxpc3RzLnhl bi5vcmcKaHR0cDovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==