From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v3 11/21] x86/mm: split out writable pagetable emulation code Date: Thu, 20 Jul 2017 17:04:16 +0100 Message-ID: <20170720160426.2343-12-wei.liu2@citrix.com> References: <20170720160426.2343-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 1dYE7l-0002m7-Sv for xen-devel@lists.xenproject.org; Thu, 20 Jul 2017 16:16:26 +0000 In-Reply-To: <20170720160426.2343-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: George Dunlap , Andrew Cooper , Wei Liu , Jan Beulich List-Id: xen-devel@lists.xenproject.org TW92ZSB0aGUgY29kZSB0byBwdi9lbXVsLXB0d3Itb3AuYy4gRml4IGNvZGluZyBzdHlsZSBpc3N1 ZXMgd2hpbGUKbW92aW5nIHRoZSBjb2RlLgoKUmVuYW1lIHB0d3JfZW11bGF0ZWRfcmVhZCB0byBw dl9lbXVsX3B0d3JfcmVhZCBhbmQgZXhwb3J0IGl0IHZpYQpwdi9tbS5oIGJlY2F1c2UgaXQgaXMg bmVlZGVkIGJ5IG90aGVyIGVtdWxhdGlvbiBjb2RlLgoKU2lnbmVkLW9mZi1ieTogV2VpIExpdSA8 d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB4ZW4vYXJjaC94ODYvbW0uYyAgICAgICAgICAgICAg fCAzMDggKy0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIHhlbi9hcmNoL3g4 Ni9wdi9NYWtlZmlsZSAgICAgICB8ICAgMSArCiB4ZW4vYXJjaC94ODYvcHYvZW11bC1wdHdyLW9w LmMgfCAzMjcgKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhlbi9h cmNoL3g4Ni9wdi9lbXVsYXRlLmggICAgICB8ICAgMiArCiA0IGZpbGVzIGNoYW5nZWQsIDMzMiBp bnNlcnRpb25zKCspLCAzMDYgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgeGVuL2Fy Y2gveDg2L3B2L2VtdWwtcHR3ci1vcC5jCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tLmMg Yi94ZW4vYXJjaC94ODYvbW0uYwppbmRleCAyNmIwYmQ0MjEyLi41NDg3ODBhYmE2IDEwMDY0NAot LS0gYS94ZW4vYXJjaC94ODYvbW0uYworKysgYi94ZW4vYXJjaC94ODYvbW0uYwpAQCAtNTAxNCwz MTAgKzUwMTQsNiBAQCBsb25nIGFyY2hfbWVtb3J5X29wKHVuc2lnbmVkIGxvbmcgY21kLCBYRU5f R1VFU1RfSEFORExFX1BBUkFNKHZvaWQpIGFyZykKIH0KIAogCi0vKioqKioqKioqKioqKioqKioq KioqKioqKgotICogV3JpdGFibGUgUGFnZXRhYmxlcwotICovCi0KLXN0cnVjdCBwdHdyX2VtdWxh dGVfY3R4dCB7Ci0gICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgY3R4dDsKLSAgICB1bnNpZ25l ZCBsb25nIGNyMjsKLSAgICBsMV9wZ2VudHJ5X3QgIHB0ZTsKLX07Ci0KLXN0YXRpYyBpbnQgcHR3 cl9lbXVsYXRlZF9yZWFkKAotICAgIGVudW0geDg2X3NlZ21lbnQgc2VnLAotICAgIHVuc2lnbmVk IGxvbmcgb2Zmc2V0LAotICAgIHZvaWQgKnBfZGF0YSwKLSAgICB1bnNpZ25lZCBpbnQgYnl0ZXMs Ci0gICAgc3RydWN0IHg4Nl9lbXVsYXRlX2N0eHQgKmN0eHQpCi17Ci0gICAgdW5zaWduZWQgaW50 IHJjID0gYnl0ZXM7Ci0gICAgdW5zaWduZWQgbG9uZyBhZGRyID0gb2Zmc2V0OwotCi0gICAgaWYg KCAhX19hZGRyX29rKGFkZHIpIHx8Ci0gICAgICAgICAocmMgPSBfX2NvcHlfZnJvbV91c2VyKHBf ZGF0YSwgKHZvaWQgKilhZGRyLCBieXRlcykpICkKLSAgICB7Ci0gICAgICAgIHg4Nl9lbXVsX3Bh Z2VmYXVsdCgwLCBhZGRyICsgYnl0ZXMgLSByYywgY3R4dCk7ICAvKiBSZWFkIGZhdWx0LiAqLwot ICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENFUFRJT047Ci0gICAgfQotCi0gICAgcmV0dXJuIFg4 NkVNVUxfT0tBWTsKLX0KLQotc3RhdGljIGludCBwdHdyX2VtdWxhdGVkX3VwZGF0ZSgKLSAgICB1 bnNpZ25lZCBsb25nIGFkZHIsCi0gICAgcGFkZHJfdCBvbGQsCi0gICAgcGFkZHJfdCB2YWwsCi0g ICAgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgIHVuc2lnbmVkIGludCBkb19jbXB4Y2hnLAotICAg IHN0cnVjdCBwdHdyX2VtdWxhdGVfY3R4dCAqcHR3cl9jdHh0KQotewotICAgIHVuc2lnbmVkIGxv bmcgbWZuOwotICAgIHVuc2lnbmVkIGxvbmcgdW5hbGlnbmVkX2FkZHIgPSBhZGRyOwotICAgIHN0 cnVjdCBwYWdlX2luZm8gKnBhZ2U7Ci0gICAgbDFfcGdlbnRyeV90IHB0ZSwgb2wxZSwgbmwxZSwg KnBsMWU7Ci0gICAgc3RydWN0IHZjcHUgKnYgPSBjdXJyZW50OwotICAgIHN0cnVjdCBkb21haW4g KmQgPSB2LT5kb21haW47Ci0gICAgaW50IHJldDsKLQotICAgIC8qIE9ubHkgYWxsb3cgbmF0dXJh bGx5LWFsaWduZWQgc3RvcmVzIHdpdGhpbiB0aGUgb3JpZ2luYWwgJWNyMiBwYWdlLiAqLwotICAg IGlmICggdW5saWtlbHkoKChhZGRyIF4gcHR3cl9jdHh0LT5jcjIpICYgUEFHRV9NQVNLKSB8fAot ICAgICAgICAgICAgICAgICAgKGFkZHIgJiAoYnl0ZXMgLSAxKSkpICkKLSAgICB7Ci0gICAgICAg IGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiYmFkIGFjY2VzcyAoY3IyPSVseCwgYWRkcj0lbHgs IGJ5dGVzPSV1KVxuIiwKLSAgICAgICAgICAgICAgICAgcHR3cl9jdHh0LT5jcjIsIGFkZHIsIGJ5 dGVzKTsKLSAgICAgICAgcmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotICAgIH0KLQotICAg IC8qIFR1cm4gYSBzdWItd29yZCBhY2Nlc3MgaW50byBhIGZ1bGwtd29yZCBhY2Nlc3MuICovCi0g ICAgaWYgKCBieXRlcyAhPSBzaXplb2YocGFkZHJfdCkgKQotICAgIHsKLSAgICAgICAgcGFkZHJf dCAgICAgIGZ1bGw7Ci0gICAgICAgIHVuc2lnbmVkIGludCByYywgb2Zmc2V0ID0gYWRkciAmIChz aXplb2YocGFkZHJfdCkgLSAxKTsKLQotICAgICAgICAvKiBBbGlnbiBhZGRyZXNzOyByZWFkIGZ1 bGwgd29yZC4gKi8KLSAgICAgICAgYWRkciAmPSB+KHNpemVvZihwYWRkcl90KSAtIDEpOwotICAg ICAgICBpZiAoIChyYyA9IGNvcHlfZnJvbV91c2VyKCZmdWxsLCAodm9pZCAqKWFkZHIsIHNpemVv ZihwYWRkcl90KSkpICE9IDAgKQotICAgICAgICB7Ci0gICAgICAgICAgICB4ODZfZW11bF9wYWdl ZmF1bHQoMCwgLyogUmVhZCBmYXVsdC4gKi8KLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBhZGRyICsgc2l6ZW9mKHBhZGRyX3QpIC0gcmMsCi0gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgJnB0d3JfY3R4dC0+Y3R4dCk7Ci0gICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9FWENF UFRJT047Ci0gICAgICAgIH0KLSAgICAgICAgLyogTWFzayBvdXQgYml0cyBwcm92aWRlZCBieSBj YWxsZXIuICovCi0gICAgICAgIGZ1bGwgJj0gfigoKChwYWRkcl90KTEgPDwgKGJ5dGVzICogOCkp IC0gMSkgPDwgKG9mZnNldCAqIDgpKTsKLSAgICAgICAgLyogU2hpZnQgdGhlIGNhbGxlciB2YWx1 ZSBhbmQgT1IgaW4gdGhlIG1pc3NpbmcgYml0cy4gKi8KLSAgICAgICAgdmFsICAmPSAoKChwYWRk cl90KTEgPDwgKGJ5dGVzICogOCkpIC0gMSk7Ci0gICAgICAgIHZhbCA8PD0gKG9mZnNldCkgKiA4 OwotICAgICAgICB2YWwgIHw9IGZ1bGw7Ci0gICAgICAgIC8qIEFsc28gZmlsbCBpbiBtaXNzaW5n IHBhcnRzIG9mIHRoZSBjbXB4Y2hnIG9sZCB2YWx1ZS4gKi8KLSAgICAgICAgb2xkICAmPSAoKChw YWRkcl90KTEgPDwgKGJ5dGVzICogOCkpIC0gMSk7Ci0gICAgICAgIG9sZCA8PD0gKG9mZnNldCkg KiA4OwotICAgICAgICBvbGQgIHw9IGZ1bGw7Ci0gICAgfQotCi0gICAgcHRlICA9IHB0d3JfY3R4 dC0+cHRlOwotICAgIG1mbiAgPSBsMWVfZ2V0X3BmbihwdGUpOwotICAgIHBhZ2UgPSBtZm5fdG9f cGFnZShtZm4pOwotCi0gICAgLyogV2UgYXJlIGxvb2tpbmcgb25seSBmb3IgcmVhZC1vbmx5IG1h cHBpbmdzIG9mIHAudC4gcGFnZXMuICovCi0gICAgQVNTRVJUKChsMWVfZ2V0X2ZsYWdzKHB0ZSkg JiAoX1BBR0VfUld8X1BBR0VfUFJFU0VOVCkpID09IF9QQUdFX1BSRVNFTlQpOwotICAgIEFTU0VS VChtZm5fdmFsaWQoX21mbihtZm4pKSk7Ci0gICAgQVNTRVJUKChwYWdlLT51LmludXNlLnR5cGVf aW5mbyAmIFBHVF90eXBlX21hc2spID09IFBHVF9sMV9wYWdlX3RhYmxlKTsKLSAgICBBU1NFUlQo KHBhZ2UtPnUuaW51c2UudHlwZV9pbmZvICYgUEdUX2NvdW50X21hc2spICE9IDApOwotICAgIEFT U0VSVChwYWdlX2dldF9vd25lcihwYWdlKSA9PSBkKTsKLQotICAgIC8qIENoZWNrIHRoZSBuZXcg UFRFLiAqLwotICAgIG5sMWUgPSBsMWVfZnJvbV9pbnRwdGUodmFsKTsKLSAgICBzd2l0Y2ggKCBy ZXQgPSBnZXRfcGFnZV9mcm9tX2wxZShubDFlLCBkLCBkKSApCi0gICAgewotICAgIGRlZmF1bHQ6 Ci0gICAgICAgIGlmICggaXNfcHZfMzJiaXRfZG9tYWluKGQpICYmIChieXRlcyA9PSA0KSAmJiAo dW5hbGlnbmVkX2FkZHIgJiA0KSAmJgotICAgICAgICAgICAgICFkb19jbXB4Y2hnICYmIChsMWVf Z2V0X2ZsYWdzKG5sMWUpICYgX1BBR0VfUFJFU0VOVCkgKQotICAgICAgICB7Ci0gICAgICAgICAg ICAvKgotICAgICAgICAgICAgICogSWYgdGhpcyBpcyBhbiB1cHBlci1oYWxmIHdyaXRlIHRvIGEg UEFFIFBURSB0aGVuIHdlIGFzc3VtZSB0aGF0Ci0gICAgICAgICAgICAgKiB0aGUgZ3Vlc3QgaGFz IHNpbXBseSBnb3QgdGhlIHR3byB3cml0ZXMgdGhlIHdyb25nIHdheSByb3VuZC4gV2UKLSAgICAg ICAgICAgICAqIHphcCB0aGUgUFJFU0VOVCBiaXQgb24gdGhlIGFzc3VtcHRpb24gdGhhdCB0aGUg Ym90dG9tIGhhbGYgd2lsbAotICAgICAgICAgICAgICogYmUgd3JpdHRlbiBpbW1lZGlhdGVseSBh ZnRlciB3ZSByZXR1cm4gdG8gdGhlIGd1ZXN0LgotICAgICAgICAgICAgICovCi0gICAgICAgICAg ICBnZHByaW50ayhYRU5MT0dfREVCVUcsICJwdHdyX2VtdWxhdGU6IGZpeGluZyB1cCBpbnZhbGlk IFBBRSBQVEUgJSIKLSAgICAgICAgICAgICAgICAgICAgIFBSSXB0ZSJcbiIsIGwxZV9nZXRfaW50 cHRlKG5sMWUpKTsKLSAgICAgICAgICAgIGwxZV9yZW1vdmVfZmxhZ3MobmwxZSwgX1BBR0VfUFJF U0VOVCk7Ci0gICAgICAgIH0KLSAgICAgICAgZWxzZQotICAgICAgICB7Ci0gICAgICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywgImNvdWxkIG5vdCBnZXRfcGFnZV9mcm9tX2wxZSgpXG4i KTsKLSAgICAgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJMRTsKLSAgICAgICAgfQot ICAgICAgICBicmVhazsKLSAgICBjYXNlIDA6Ci0gICAgICAgIGJyZWFrOwotICAgIGNhc2UgX1BB R0VfUlcgLi4uIF9QQUdFX1JXIHwgUEFHRV9DQUNIRV9BVFRSUzoKLSAgICAgICAgQVNTRVJUKCEo cmV0ICYgfihfUEFHRV9SVyB8IFBBR0VfQ0FDSEVfQVRUUlMpKSk7Ci0gICAgICAgIGwxZV9mbGlw X2ZsYWdzKG5sMWUsIHJldCk7Ci0gICAgICAgIGJyZWFrOwotICAgIH0KLQotICAgIGFkanVzdF9n dWVzdF9sMWUobmwxZSwgZCk7Ci0KLSAgICAvKiBDaGVja2VkIHN1Y2Nlc3NmdWxseTogZG8gdGhl IHVwZGF0ZSAod3JpdGUgb3IgY21weGNoZykuICovCi0gICAgcGwxZSA9IG1hcF9kb21haW5fcGFn ZShfbWZuKG1mbikpOwotICAgIHBsMWUgPSAobDFfcGdlbnRyeV90ICopKCh1bnNpZ25lZCBsb25n KXBsMWUgKyAoYWRkciAmIH5QQUdFX01BU0spKTsKLSAgICBpZiAoIGRvX2NtcHhjaGcgKQotICAg IHsKLSAgICAgICAgYm9vbCBva2F5OwotICAgICAgICBpbnRwdGVfdCB0ID0gb2xkOwotCi0gICAg ICAgIG9sMWUgPSBsMWVfZnJvbV9pbnRwdGUob2xkKTsKLSAgICAgICAgb2theSA9IHBhZ2luZ19j bXB4Y2hnX2d1ZXN0X2VudHJ5KHYsICZsMWVfZ2V0X2ludHB0ZSgqcGwxZSksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmdCwgbDFlX2dldF9pbnRwdGUobmwxZSks IF9tZm4obWZuKSk7Ci0gICAgICAgIG9rYXkgPSAob2theSAmJiB0ID09IG9sZCk7Ci0KLSAgICAg ICAgaWYgKCAhb2theSApCi0gICAgICAgIHsKLSAgICAgICAgICAgIHVubWFwX2RvbWFpbl9wYWdl KHBsMWUpOwotICAgICAgICAgICAgcHV0X3BhZ2VfZnJvbV9sMWUobmwxZSwgZCk7Ci0gICAgICAg ICAgICByZXR1cm4gWDg2RU1VTF9SRVRSWTsKLSAgICAgICAgfQotICAgIH0KLSAgICBlbHNlCi0g ICAgewotICAgICAgICBvbDFlID0gKnBsMWU7Ci0gICAgICAgIGlmICggIVVQREFURV9FTlRSWShs MSwgcGwxZSwgb2wxZSwgbmwxZSwgbWZuLCB2LCAwKSApCi0gICAgICAgICAgICBCVUcoKTsKLSAg ICB9Ci0KLSAgICB0cmFjZV9wdHdyX2VtdWxhdGlvbihhZGRyLCBubDFlKTsKLQotICAgIHVubWFw X2RvbWFpbl9wYWdlKHBsMWUpOwotCi0gICAgLyogRmluYWxseSwgZHJvcCB0aGUgb2xkIFBURS4g Ki8KLSAgICBwdXRfcGFnZV9mcm9tX2wxZShvbDFlLCBkKTsKLQotICAgIHJldHVybiBYODZFTVVM X09LQVk7Ci19Ci0KLXN0YXRpYyBpbnQgcHR3cl9lbXVsYXRlZF93cml0ZSgKLSAgICBlbnVtIHg4 Nl9zZWdtZW50IHNlZywKLSAgICB1bnNpZ25lZCBsb25nIG9mZnNldCwKLSAgICB2b2lkICpwX2Rh dGEsCi0gICAgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0 ICpjdHh0KQotewotICAgIHBhZGRyX3QgdmFsID0gMDsKLQotICAgIGlmICggKGJ5dGVzID4gc2l6 ZW9mKHBhZGRyX3QpKSB8fCAoYnl0ZXMgJiAoYnl0ZXMgLSAxKSkgfHwgIWJ5dGVzICkKLSAgICB7 Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiYmFkIHdyaXRlIHNpemUgKGFkZHI9 JWx4LCBieXRlcz0ldSlcbiIsCi0gICAgICAgICAgICAgICAgIG9mZnNldCwgYnl0ZXMpOwotICAg ICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7Ci0gICAgfQotCi0gICAgbWVtY3B5KCZ2 YWwsIHBfZGF0YSwgYnl0ZXMpOwotCi0gICAgcmV0dXJuIHB0d3JfZW11bGF0ZWRfdXBkYXRlKAot ICAgICAgICBvZmZzZXQsIDAsIHZhbCwgYnl0ZXMsIDAsCi0gICAgICAgIGNvbnRhaW5lcl9vZihj dHh0LCBzdHJ1Y3QgcHR3cl9lbXVsYXRlX2N0eHQsIGN0eHQpKTsKLX0KLQotc3RhdGljIGludCBw dHdyX2VtdWxhdGVkX2NtcHhjaGcoCi0gICAgZW51bSB4ODZfc2VnbWVudCBzZWcsCi0gICAgdW5z aWduZWQgbG9uZyBvZmZzZXQsCi0gICAgdm9pZCAqcF9vbGQsCi0gICAgdm9pZCAqcF9uZXcsCi0g ICAgdW5zaWduZWQgaW50IGJ5dGVzLAotICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0 KQotewotICAgIHBhZGRyX3Qgb2xkID0gMCwgbmV3ID0gMDsKLQotICAgIGlmICggKGJ5dGVzID4g c2l6ZW9mKHBhZGRyX3QpKSB8fCAoYnl0ZXMgJiAoYnl0ZXMgLSAxKSkgKQotICAgIHsKLSAgICAg ICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJiYWQgY21weGNoZyBzaXplIChhZGRyPSVseCwg Ynl0ZXM9JXUpXG4iLAotICAgICAgICAgICAgICAgICBvZmZzZXQsIGJ5dGVzKTsKLSAgICAgICAg cmV0dXJuIFg4NkVNVUxfVU5IQU5ETEVBQkxFOwotICAgIH0KLQotICAgIG1lbWNweSgmb2xkLCBw X29sZCwgYnl0ZXMpOwotICAgIG1lbWNweSgmbmV3LCBwX25ldywgYnl0ZXMpOwotCi0gICAgcmV0 dXJuIHB0d3JfZW11bGF0ZWRfdXBkYXRlKAotICAgICAgICBvZmZzZXQsIG9sZCwgbmV3LCBieXRl cywgMSwKLSAgICAgICAgY29udGFpbmVyX29mKGN0eHQsIHN0cnVjdCBwdHdyX2VtdWxhdGVfY3R4 dCwgY3R4dCkpOwotfQotCi1zdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29wcyBwdHdy X2VtdWxhdGVfb3BzID0gewotICAgIC5yZWFkICAgICAgID0gcHR3cl9lbXVsYXRlZF9yZWFkLAot ICAgIC5pbnNuX2ZldGNoID0gcHR3cl9lbXVsYXRlZF9yZWFkLAotICAgIC53cml0ZSAgICAgID0g cHR3cl9lbXVsYXRlZF93cml0ZSwKLSAgICAuY21weGNoZyAgICA9IHB0d3JfZW11bGF0ZWRfY21w eGNoZywKLSAgICAudmFsaWRhdGUgICA9IHB2X2VtdWxfaXNfbWVtX3dyaXRlLAotICAgIC5jcHVp ZCAgICAgID0gcHZfZW11bF9jcHVpZCwKLX07Ci0KLS8qIFdyaXRlIHBhZ2UgZmF1bHQgaGFuZGxl cjogY2hlY2sgaWYgZ3Vlc3QgaXMgdHJ5aW5nIHRvIG1vZGlmeSBhIFBURS4gKi8KLWludCBwdHdy X2RvX3BhZ2VfZmF1bHQoc3RydWN0IHZjcHUgKnYsIHVuc2lnbmVkIGxvbmcgYWRkciwKLSAgICAg ICAgICAgICAgICAgICAgICAgc3RydWN0IGNwdV91c2VyX3JlZ3MgKnJlZ3MpCi17Ci0gICAgc3Ry dWN0IGRvbWFpbiAqZCA9IHYtPmRvbWFpbjsKLSAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOwot ICAgIGwxX3BnZW50cnlfdCAgICAgIHB0ZTsKLSAgICBzdHJ1Y3QgcHR3cl9lbXVsYXRlX2N0eHQg cHR3cl9jdHh0ID0gewotICAgICAgICAuY3R4dCA9IHsKLSAgICAgICAgICAgIC5yZWdzID0gcmVn cywKLSAgICAgICAgICAgIC52ZW5kb3IgPSBkLT5hcmNoLmNwdWlkLT54ODZfdmVuZG9yLAotICAg ICAgICAgICAgLmFkZHJfc2l6ZSA9IGlzX3B2XzMyYml0X2RvbWFpbihkKSA/IDMyIDogQklUU19Q RVJfTE9ORywKLSAgICAgICAgICAgIC5zcF9zaXplICAgPSBpc19wdl8zMmJpdF9kb21haW4oZCkg PyAzMiA6IEJJVFNfUEVSX0xPTkcsCi0gICAgICAgICAgICAubG1hICAgICAgID0gIWlzX3B2XzMy Yml0X2RvbWFpbihkKSwKLSAgICAgICAgfSwKLSAgICB9OwotICAgIGludCByYzsKLQotICAgIC8q IEF0dGVtcHQgdG8gcmVhZCB0aGUgUFRFIHRoYXQgbWFwcyB0aGUgVkEgYmVpbmcgYWNjZXNzZWQu ICovCi0gICAgcHZfZ2V0X2d1ZXN0X2VmZl9sMWUoYWRkciwgJnB0ZSk7Ci0KLSAgICAvKiBXZSBh cmUgbG9va2luZyBvbmx5IGZvciByZWFkLW9ubHkgbWFwcGluZ3Mgb2YgcC50LiBwYWdlcy4gKi8K LSAgICBpZiAoICgobDFlX2dldF9mbGFncyhwdGUpICYgKF9QQUdFX1BSRVNFTlR8X1BBR0VfUlcp KSAhPSBfUEFHRV9QUkVTRU5UKSB8fAotICAgICAgICAgcmFuZ2VzZXRfY29udGFpbnNfc2luZ2xl dG9uKG1taW9fcm9fcmFuZ2VzLCBsMWVfZ2V0X3BmbihwdGUpKSB8fAotICAgICAgICAgZ2V0X3Bh Z2VfZnJvbV9wYWdlbnIobDFlX2dldF9wZm4ocHRlKSwgZCkgKQotICAgICAgICBnb3RvIGJhaWw7 Ci0KLSAgICBwYWdlID0gbDFlX2dldF9wYWdlKHB0ZSk7Ci0gICAgaWYgKCAhcGFnZV9sb2NrKHBh Z2UpICkKLSAgICB7Ci0gICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotICAgICAgICBnb3RvIGJhaWw7 Ci0gICAgfQotCi0gICAgaWYgKCAocGFnZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9t YXNrKSAhPSBQR1RfbDFfcGFnZV90YWJsZSApCi0gICAgewotICAgICAgICBwYWdlX3VubG9jayhw YWdlKTsKLSAgICAgICAgcHV0X3BhZ2UocGFnZSk7Ci0gICAgICAgIGdvdG8gYmFpbDsKLSAgICB9 Ci0KLSAgICBwdHdyX2N0eHQuY3IyID0gYWRkcjsKLSAgICBwdHdyX2N0eHQucHRlID0gcHRlOwot Ci0gICAgcmMgPSB4ODZfZW11bGF0ZSgmcHR3cl9jdHh0LmN0eHQsICZwdHdyX2VtdWxhdGVfb3Bz KTsKLQotICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOwotICAgIHB1dF9wYWdlKHBhZ2UpOwotCi0gICAg c3dpdGNoICggcmMgKQotICAgIHsKLSAgICBjYXNlIFg4NkVNVUxfRVhDRVBUSU9OOgotICAgICAg ICAvKgotICAgICAgICAgKiBUaGlzIGVtdWxhdGlvbiBvbmx5IGNvdmVycyB3cml0ZXMgdG8gcGFn ZXRhYmxlcyB3aGljaCBhcmUgbWFya2VkCi0gICAgICAgICAqIHJlYWQtb25seSBieSBYZW4uICBX ZSB0b2xlcmF0ZSAjUEYgKGluIGNhc2UgYSBjb25jdXJyZW50IHBhZ2V0YWJsZQotICAgICAgICAg KiB1cGRhdGUgaGFzIHN1Y2NlZWRlZCBvbiBhIGRpZmZlcmVudCB2Y3B1KS4gIEFueXRoaW5nIGVs c2UgaXMgYW4KLSAgICAgICAgICogZW11bGF0aW9uIGJ1Zywgb3IgYSBndWVzdCBwbGF5aW5nIHdp dGggdGhlIGluc3RydWN0aW9uIHN0cmVhbSB1bmRlcgotICAgICAgICAgKiBYZW4ncyBmZWV0Lgot ICAgICAgICAgKi8KLSAgICAgICAgaWYgKCBwdHdyX2N0eHQuY3R4dC5ldmVudC50eXBlID09IFg4 Nl9FVkVOVFRZUEVfSFdfRVhDRVBUSU9OICYmCi0gICAgICAgICAgICAgcHR3cl9jdHh0LmN0eHQu ZXZlbnQudmVjdG9yID09IFRSQVBfcGFnZV9mYXVsdCApCi0gICAgICAgICAgICBwdl9pbmplY3Rf ZXZlbnQoJnB0d3JfY3R4dC5jdHh0LmV2ZW50KTsKLSAgICAgICAgZWxzZQotICAgICAgICAgICAg Z2RwcmludGsoWEVOTE9HX1dBUk5JTkcsCi0gICAgICAgICAgICAgICAgICAgICAiVW5leHBlY3Rl ZCBldmVudCAodHlwZSAldSwgdmVjdG9yICUjeCkgZnJvbSBlbXVsYXRpb25cbiIsCi0gICAgICAg ICAgICAgICAgICAgICBwdHdyX2N0eHQuY3R4dC5ldmVudC50eXBlLCBwdHdyX2N0eHQuY3R4dC5l dmVudC52ZWN0b3IpOwotCi0gICAgICAgIC8qIEZhbGx0aHJvdWdoICovCi0gICAgY2FzZSBYODZF TVVMX09LQVk6Ci0KLSAgICAgICAgaWYgKCBwdHdyX2N0eHQuY3R4dC5yZXRpcmUuc2luZ2xlc3Rl cCApCi0gICAgICAgICAgICBwdl9pbmplY3RfaHdfZXhjZXB0aW9uKFRSQVBfZGVidWcsIFg4Nl9F VkVOVF9OT19FQyk7Ci0KLSAgICAgICAgLyogRmFsbHRocm91Z2ggKi8KLSAgICBjYXNlIFg4NkVN VUxfUkVUUlk6Ci0gICAgICAgIHBlcmZjX2luY3IocHR3cl9lbXVsYXRpb25zKTsKLSAgICAgICAg cmV0dXJuIEVYQ1JFVF9mYXVsdF9maXhlZDsKLSAgICB9Ci0KLSBiYWlsOgotICAgIHJldHVybiAw OwotfQotCiAvKioqKioqKioqKioqKioqKioqKioqKioqKgogICogZmF1bHQgaGFuZGxpbmcgZm9y IHJlYWQtb25seSBNTUlPIHBhZ2VzCiAgKi8KQEAgLTUzNDUsNyArNTA0MSw3IEBAIGludCBtbWlv X3JvX2VtdWxhdGVkX3dyaXRlKAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX29w cyBtbWlvX3JvX2VtdWxhdGVfb3BzID0gewogICAgIC5yZWFkICAgICAgID0geDg2ZW11bF91bmhh bmRsZWFibGVfcncsCi0gICAgLmluc25fZmV0Y2ggPSBwdHdyX2VtdWxhdGVkX3JlYWQsCisgICAg Lmluc25fZmV0Y2ggPSBwdl9lbXVsX3B0d3JfcmVhZCwKICAgICAud3JpdGUgICAgICA9IG1taW9f cm9fZW11bGF0ZWRfd3JpdGUsCiAgICAgLnZhbGlkYXRlICAgPSBwdl9lbXVsX2lzX21lbV93cml0 ZSwKICAgICAuY3B1aWQgICAgICA9IHB2X2VtdWxfY3B1aWQsCkBAIC01Mzg0LDcgKzUwODAsNyBA QCBpbnQgbW1jZmdfaW50ZXJjZXB0X3dyaXRlKAogCiBzdGF0aWMgY29uc3Qgc3RydWN0IHg4Nl9l bXVsYXRlX29wcyBtbWNmZ19pbnRlcmNlcHRfb3BzID0gewogICAgIC5yZWFkICAgICAgID0geDg2 ZW11bF91bmhhbmRsZWFibGVfcncsCi0gICAgLmluc25fZmV0Y2ggPSBwdHdyX2VtdWxhdGVkX3Jl YWQsCisgICAgLmluc25fZmV0Y2ggPSBwdl9lbXVsX3B0d3JfcmVhZCwKICAgICAud3JpdGUgICAg ICA9IG1tY2ZnX2ludGVyY2VwdF93cml0ZSwKICAgICAudmFsaWRhdGUgICA9IHB2X2VtdWxfaXNf bWVtX3dyaXRlLAogICAgIC5jcHVpZCAgICAgID0gcHZfZW11bF9jcHVpZCwKZGlmZiAtLWdpdCBh L3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZSBiL3hlbi9hcmNoL3g4Ni9wdi9NYWtlZmlsZQppbmRl eCBjODNhZWQ0OTNiLi5jYmQ4OTBjNWYyIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvcHYvTWFr ZWZpbGUKKysrIGIveGVuL2FyY2gveDg2L3B2L01ha2VmaWxlCkBAIC00LDYgKzQsNyBAQCBvYmot eSArPSBlbXVsYXRlLm8KIG9iai15ICs9IGVtdWwtZ2F0ZS1vcC5vCiBvYmoteSArPSBlbXVsLWlu di1vcC5vCiBvYmoteSArPSBlbXVsLXByaXYtb3Aubworb2JqLXkgKz0gZW11bC1wdHdyLW9wLm8K IG9iai15ICs9IGh5cGVyY2FsbC5vCiBvYmoteSArPSBpcmV0Lm8KIG9iai15ICs9IG1pc2MtaHlw ZXJjYWxscy5vCmRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYvZW11bC1wdHdyLW9wLmMgYi94 ZW4vYXJjaC94ODYvcHYvZW11bC1wdHdyLW9wLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg MDAwMDAwMDAwMC4uMTA2NGJiNjNmNQotLS0gL2Rldi9udWxsCisrKyBiL3hlbi9hcmNoL3g4Ni9w di9lbXVsLXB0d3Itb3AuYwpAQCAtMCwwICsxLDMyNyBAQAorLyoqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KgorICogYXJjaC94ODYvcHYvZW11bC1wdHdyLW9wLmMKKyAqCisgKiBFbXVsYXRlIHdyaXRhYmxl IHBhZ2V0YWJsZSBmb3IgUFYgZ3Vlc3RzCisgKgorICogQ29weXJpZ2h0IChjKSAyMDAyLTIwMDUg SyBBIEZyYXNlcgorICogQ29weXJpZ2h0IChjKSAyMDA0IENocmlzdGlhbiBMaW1wYWNoCisgKgor ICogVGhpcyBwcm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0 IGFuZC9vciBtb2RpZnkKKyAqIGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIEdlbmVyYWwg UHVibGljIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5CisgKiB0aGUgRnJlZSBTb2Z0d2FyZSBGb3Vu ZGF0aW9uOyBlaXRoZXIgdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvcgorICogKGF0IHlvdXIg b3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIHByb2dyYW0gaXMgZGlzdHJp YnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKKyAqIGJ1dCBXSVRIT1VU IEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiBN RVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUg dGhlCisgKiBHTlUgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoK KyAqIFlvdSBzaG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBHZW5lcmFsIFB1 YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgcHJvZ3JhbTsgSWYgbm90LCBzZWUgPGh0 dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy8+LgorICovCisKKyNpbmNsdWRlIDx4ZW4vZ3Vlc3Rf YWNjZXNzLmg+CisjaW5jbHVkZSA8eGVuL3RyYWNlLmg+CisKKyNpbmNsdWRlIDxhc20vcHYvbW0u aD4KKworI2luY2x1ZGUgImVtdWxhdGUuaCIKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioK KyAqIFdyaXRhYmxlIFBhZ2V0YWJsZXMKKyAqLworCitzdHJ1Y3QgcHR3cl9lbXVsYXRlX2N0eHQg eworICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0IGN0eHQ7CisgICAgdW5zaWduZWQgbG9uZyBj cjI7CisgICAgbDFfcGdlbnRyeV90ICBwdGU7Cit9OworCitpbnQgcHZfZW11bF9wdHdyX3JlYWQo ZW51bSB4ODZfc2VnbWVudCBzZWcsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LCB2b2lkICpwX2RhdGEs CisgICAgICAgICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGJ5dGVzLCBzdHJ1Y3QgeDg2X2Vt dWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgcmMgPSBieXRlczsKKyAgICB1 bnNpZ25lZCBsb25nIGFkZHIgPSBvZmZzZXQ7CisKKyAgICBpZiAoICFfX2FkZHJfb2soYWRkcikg fHwKKyAgICAgICAgIChyYyA9IF9fY29weV9mcm9tX3VzZXIocF9kYXRhLCAodm9pZCAqKWFkZHIs IGJ5dGVzKSkgKQorICAgIHsKKyAgICAgICAgeDg2X2VtdWxfcGFnZWZhdWx0KDAsIGFkZHIgKyBi eXRlcyAtIHJjLCBjdHh0KTsgIC8qIFJlYWQgZmF1bHQuICovCisgICAgICAgIHJldHVybiBYODZF TVVMX0VYQ0VQVElPTjsKKyAgICB9CisKKyAgICByZXR1cm4gWDg2RU1VTF9PS0FZOworfQorCitz dGF0aWMgaW50IHB0d3JfZW11bGF0ZWRfdXBkYXRlKHVuc2lnbmVkIGxvbmcgYWRkciwgcGFkZHJf dCBvbGQsIHBhZGRyX3QgdmFsLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNp Z25lZCBpbnQgYnl0ZXMsIHVuc2lnbmVkIGludCBkb19jbXB4Y2hnLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBzdHJ1Y3QgcHR3cl9lbXVsYXRlX2N0eHQgKnB0d3JfY3R4dCkKK3sK KyAgICB1bnNpZ25lZCBsb25nIG1mbjsKKyAgICB1bnNpZ25lZCBsb25nIHVuYWxpZ25lZF9hZGRy ID0gYWRkcjsKKyAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlOworICAgIGwxX3BnZW50cnlfdCBw dGUsIG9sMWUsIG5sMWUsICpwbDFlOworICAgIHN0cnVjdCB2Y3B1ICp2ID0gY3VycmVudDsKKyAg ICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWluOworICAgIGludCByZXQ7CisKKyAgICAvKiBP bmx5IGFsbG93IG5hdHVyYWxseS1hbGlnbmVkIHN0b3JlcyB3aXRoaW4gdGhlIG9yaWdpbmFsICVj cjIgcGFnZS4gKi8KKyAgICBpZiAoIHVubGlrZWx5KCgoYWRkciBeIHB0d3JfY3R4dC0+Y3IyKSAm IFBBR0VfTUFTSykgfHwKKyAgICAgICAgICAgICAgICAgIChhZGRyICYgKGJ5dGVzIC0gMSkpKSAp CisgICAgeworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywgImJhZCBhY2Nlc3MgKGNy Mj0lbHgsIGFkZHI9JWx4LCBieXRlcz0ldSlcbiIsCisgICAgICAgICAgICAgICAgIHB0d3JfY3R4 dC0+Y3IyLCBhZGRyLCBieXRlcyk7CisgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExFQUJM RTsKKyAgICB9CisKKyAgICAvKiBUdXJuIGEgc3ViLXdvcmQgYWNjZXNzIGludG8gYSBmdWxsLXdv cmQgYWNjZXNzLiAqLworICAgIGlmICggYnl0ZXMgIT0gc2l6ZW9mKHBhZGRyX3QpICkKKyAgICB7 CisgICAgICAgIHBhZGRyX3QgICAgICBmdWxsOworICAgICAgICB1bnNpZ25lZCBpbnQgcmMsIG9m ZnNldCA9IGFkZHIgJiAoc2l6ZW9mKHBhZGRyX3QpIC0gMSk7CisKKyAgICAgICAgLyogQWxpZ24g YWRkcmVzczsgcmVhZCBmdWxsIHdvcmQuICovCisgICAgICAgIGFkZHIgJj0gfihzaXplb2YocGFk ZHJfdCkgLSAxKTsKKyAgICAgICAgaWYgKCAocmMgPSBjb3B5X2Zyb21fdXNlcigmZnVsbCwgKHZv aWQgKilhZGRyLCBzaXplb2YocGFkZHJfdCkpKSAhPSAwICkKKyAgICAgICAgeworICAgICAgICAg ICAgeDg2X2VtdWxfcGFnZWZhdWx0KDAsIC8qIFJlYWQgZmF1bHQuICovCisgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYWRkciArIHNpemVvZihwYWRkcl90KSAtIHJjLAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICZwdHdyX2N0eHQtPmN0eHQpOworICAgICAgICAgICAgcmV0 dXJuIFg4NkVNVUxfRVhDRVBUSU9OOworICAgICAgICB9CisgICAgICAgIC8qIE1hc2sgb3V0IGJp dHMgcHJvdmlkZWQgYnkgY2FsbGVyLiAqLworICAgICAgICBmdWxsICY9IH4oKCgocGFkZHJfdCkx IDw8IChieXRlcyAqIDgpKSAtIDEpIDw8IChvZmZzZXQgKiA4KSk7CisgICAgICAgIC8qIFNoaWZ0 IHRoZSBjYWxsZXIgdmFsdWUgYW5kIE9SIGluIHRoZSBtaXNzaW5nIGJpdHMuICovCisgICAgICAg IHZhbCAgJj0gKCgocGFkZHJfdCkxIDw8IChieXRlcyAqIDgpKSAtIDEpOworICAgICAgICB2YWwg PDw9IChvZmZzZXQpICogODsKKyAgICAgICAgdmFsICB8PSBmdWxsOworICAgICAgICAvKiBBbHNv IGZpbGwgaW4gbWlzc2luZyBwYXJ0cyBvZiB0aGUgY21weGNoZyBvbGQgdmFsdWUuICovCisgICAg ICAgIG9sZCAgJj0gKCgocGFkZHJfdCkxIDw8IChieXRlcyAqIDgpKSAtIDEpOworICAgICAgICBv bGQgPDw9IChvZmZzZXQpICogODsKKyAgICAgICAgb2xkICB8PSBmdWxsOworICAgIH0KKworICAg IHB0ZSAgPSBwdHdyX2N0eHQtPnB0ZTsKKyAgICBtZm4gID0gbDFlX2dldF9wZm4ocHRlKTsKKyAg ICBwYWdlID0gbWZuX3RvX3BhZ2UobWZuKTsKKworICAgIC8qIFdlIGFyZSBsb29raW5nIG9ubHkg Zm9yIHJlYWQtb25seSBtYXBwaW5ncyBvZiBwLnQuIHBhZ2VzLiAqLworICAgIEFTU0VSVCgobDFl X2dldF9mbGFncyhwdGUpICYgKF9QQUdFX1JXfF9QQUdFX1BSRVNFTlQpKSA9PSBfUEFHRV9QUkVT RU5UKTsKKyAgICBBU1NFUlQobWZuX3ZhbGlkKF9tZm4obWZuKSkpOworICAgIEFTU0VSVCgocGFn ZS0+dS5pbnVzZS50eXBlX2luZm8gJiBQR1RfdHlwZV9tYXNrKSA9PSBQR1RfbDFfcGFnZV90YWJs ZSk7CisgICAgQVNTRVJUKChwYWdlLT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF9jb3VudF9tYXNr KSAhPSAwKTsKKyAgICBBU1NFUlQocGFnZV9nZXRfb3duZXIocGFnZSkgPT0gZCk7CisKKyAgICAv KiBDaGVjayB0aGUgbmV3IFBURS4gKi8KKyAgICBubDFlID0gbDFlX2Zyb21faW50cHRlKHZhbCk7 CisgICAgc3dpdGNoICggcmV0ID0gZ2V0X3BhZ2VfZnJvbV9sMWUobmwxZSwgZCwgZCkgKQorICAg IHsKKyAgICBkZWZhdWx0OgorICAgICAgICBpZiAoIGlzX3B2XzMyYml0X2RvbWFpbihkKSAmJiAo Ynl0ZXMgPT0gNCkgJiYgKHVuYWxpZ25lZF9hZGRyICYgNCkgJiYKKyAgICAgICAgICAgICAhZG9f Y21weGNoZyAmJiAobDFlX2dldF9mbGFncyhubDFlKSAmIF9QQUdFX1BSRVNFTlQpICkKKyAgICAg ICAgeworICAgICAgICAgICAgLyoKKyAgICAgICAgICAgICAqIElmIHRoaXMgaXMgYW4gdXBwZXIt aGFsZiB3cml0ZSB0byBhIFBBRSBQVEUgdGhlbiB3ZSBhc3N1bWUgdGhhdAorICAgICAgICAgICAg ICogdGhlIGd1ZXN0IGhhcyBzaW1wbHkgZ290IHRoZSB0d28gd3JpdGVzIHRoZSB3cm9uZyB3YXkg cm91bmQuIFdlCisgICAgICAgICAgICAgKiB6YXAgdGhlIFBSRVNFTlQgYml0IG9uIHRoZSBhc3N1 bXB0aW9uIHRoYXQgdGhlIGJvdHRvbSBoYWxmIHdpbGwKKyAgICAgICAgICAgICAqIGJlIHdyaXR0 ZW4gaW1tZWRpYXRlbHkgYWZ0ZXIgd2UgcmV0dXJuIHRvIHRoZSBndWVzdC4KKyAgICAgICAgICAg ICAqLworICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX0RFQlVHLCAicHR3cl9lbXVsYXRlOiBm aXhpbmcgdXAgaW52YWxpZCBQQUUgUFRFICUiCisgICAgICAgICAgICAgICAgICAgICBQUklwdGUi XG4iLCBsMWVfZ2V0X2ludHB0ZShubDFlKSk7CisgICAgICAgICAgICBsMWVfcmVtb3ZlX2ZsYWdz KG5sMWUsIF9QQUdFX1BSRVNFTlQpOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAg eworICAgICAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJjb3VsZCBub3QgZ2V0X3Bh Z2VfZnJvbV9sMWUoKVxuIik7CisgICAgICAgICAgICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFC TEU7CisgICAgICAgIH0KKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSAwOgorICAgICAgICBicmVh azsKKyAgICBjYXNlIF9QQUdFX1JXIC4uLiBfUEFHRV9SVyB8IFBBR0VfQ0FDSEVfQVRUUlM6Cisg ICAgICAgIEFTU0VSVCghKHJldCAmIH4oX1BBR0VfUlcgfCBQQUdFX0NBQ0hFX0FUVFJTKSkpOwor ICAgICAgICBsMWVfZmxpcF9mbGFncyhubDFlLCByZXQpOworICAgICAgICBicmVhazsKKyAgICB9 CisKKyAgICBhZGp1c3RfZ3Vlc3RfbDFlKG5sMWUsIGQpOworCisgICAgLyogQ2hlY2tlZCBzdWNj ZXNzZnVsbHk6IGRvIHRoZSB1cGRhdGUgKHdyaXRlIG9yIGNtcHhjaGcpLiAqLworICAgIHBsMWUg PSBtYXBfZG9tYWluX3BhZ2UoX21mbihtZm4pKTsKKyAgICBwbDFlID0gKGwxX3BnZW50cnlfdCAq KSgodW5zaWduZWQgbG9uZylwbDFlICsgKGFkZHIgJiB+UEFHRV9NQVNLKSk7CisgICAgaWYgKCBk b19jbXB4Y2hnICkKKyAgICB7CisgICAgICAgIGJvb2wgb2theTsKKyAgICAgICAgaW50cHRlX3Qg dCA9IG9sZDsKKworICAgICAgICBvbDFlID0gbDFlX2Zyb21faW50cHRlKG9sZCk7CisgICAgICAg IG9rYXkgPSBwYWdpbmdfY21weGNoZ19ndWVzdF9lbnRyeSh2LCAmbDFlX2dldF9pbnRwdGUoKnBs MWUpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJnQsIGwxZV9n ZXRfaW50cHRlKG5sMWUpLCBfbWZuKG1mbikpOworICAgICAgICBva2F5ID0gKG9rYXkgJiYgdCA9 PSBvbGQpOworCisgICAgICAgIGlmICggIW9rYXkgKQorICAgICAgICB7CisgICAgICAgICAgICB1 bm1hcF9kb21haW5fcGFnZShwbDFlKTsKKyAgICAgICAgICAgIHB1dF9wYWdlX2Zyb21fbDFlKG5s MWUsIGQpOworICAgICAgICAgICAgcmV0dXJuIFg4NkVNVUxfUkVUUlk7CisgICAgICAgIH0KKyAg ICB9CisgICAgZWxzZQorICAgIHsKKyAgICAgICAgb2wxZSA9ICpwbDFlOworICAgICAgICBpZiAo ICFVUERBVEVfRU5UUlkobDEsIHBsMWUsIG9sMWUsIG5sMWUsIG1mbiwgdiwgMCkgKQorICAgICAg ICAgICAgQlVHKCk7CisgICAgfQorCisgICAgdHJhY2VfcHR3cl9lbXVsYXRpb24oYWRkciwgbmwx ZSk7CisKKyAgICB1bm1hcF9kb21haW5fcGFnZShwbDFlKTsKKworICAgIC8qIEZpbmFsbHksIGRy b3AgdGhlIG9sZCBQVEUuICovCisgICAgcHV0X3BhZ2VfZnJvbV9sMWUob2wxZSwgZCk7CisKKyAg ICByZXR1cm4gWDg2RU1VTF9PS0FZOworfQorCitzdGF0aWMgaW50IHB0d3JfZW11bGF0ZWRfd3Jp dGUoZW51bSB4ODZfc2VnbWVudCBzZWcsIHVuc2lnbmVkIGxvbmcgb2Zmc2V0LAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHZvaWQgKnBfZGF0YSwgdW5zaWduZWQgaW50IGJ5dGVzLAor ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpj dHh0KQoreworICAgIHBhZGRyX3QgdmFsID0gMDsKKworICAgIGlmICggKGJ5dGVzID4gc2l6ZW9m KHBhZGRyX3QpKSB8fCAoYnl0ZXMgJiAoYnl0ZXMgLSAxKSkgfHwgIWJ5dGVzICkKKyAgICB7Cisg ICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiYmFkIHdyaXRlIHNpemUgKGFkZHI9JWx4 LCBieXRlcz0ldSlcbiIsCisgICAgICAgICAgICAgICAgIG9mZnNldCwgYnl0ZXMpOworICAgICAg ICByZXR1cm4gWDg2RU1VTF9VTkhBTkRMRUFCTEU7CisgICAgfQorCisgICAgbWVtY3B5KCZ2YWws IHBfZGF0YSwgYnl0ZXMpOworCisgICAgcmV0dXJuIHB0d3JfZW11bGF0ZWRfdXBkYXRlKAorICAg ICAgICBvZmZzZXQsIDAsIHZhbCwgYnl0ZXMsIDAsCisgICAgICAgIGNvbnRhaW5lcl9vZihjdHh0 LCBzdHJ1Y3QgcHR3cl9lbXVsYXRlX2N0eHQsIGN0eHQpKTsKK30KKworc3RhdGljIGludCBwdHdy X2VtdWxhdGVkX2NtcHhjaGcoZW51bSB4ODZfc2VnbWVudCBzZWcsIHVuc2lnbmVkIGxvbmcgb2Zm c2V0LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCAqcF9vbGQsIHZvaWQg KnBfbmV3LCB1bnNpZ25lZCBpbnQgYnl0ZXMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCkKK3sKKyAgICBwYWRkcl90IG9sZCA9 IDAsIG5ldyA9IDA7CisKKyAgICBpZiAoIChieXRlcyA+IHNpemVvZihwYWRkcl90KSkgfHwgKGJ5 dGVzICYgKGJ5dGVzIC0gMSkpICkKKyAgICB7CisgICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJO SU5HLCAiYmFkIGNtcHhjaGcgc2l6ZSAoYWRkcj0lbHgsIGJ5dGVzPSV1KVxuIiwKKyAgICAgICAg ICAgICAgICAgb2Zmc2V0LCBieXRlcyk7CisgICAgICAgIHJldHVybiBYODZFTVVMX1VOSEFORExF QUJMRTsKKyAgICB9CisKKyAgICBtZW1jcHkoJm9sZCwgcF9vbGQsIGJ5dGVzKTsKKyAgICBtZW1j cHkoJm5ldywgcF9uZXcsIGJ5dGVzKTsKKworICAgIHJldHVybiBwdHdyX2VtdWxhdGVkX3VwZGF0 ZSgKKyAgICAgICAgb2Zmc2V0LCBvbGQsIG5ldywgYnl0ZXMsIDEsCisgICAgICAgIGNvbnRhaW5l cl9vZihjdHh0LCBzdHJ1Y3QgcHR3cl9lbXVsYXRlX2N0eHQsIGN0eHQpKTsKK30KKworc3RhdGlj IGNvbnN0IHN0cnVjdCB4ODZfZW11bGF0ZV9vcHMgcHR3cl9lbXVsYXRlX29wcyA9IHsKKyAgICAu cmVhZCAgICAgICA9IHB2X2VtdWxfcHR3cl9yZWFkLAorICAgIC5pbnNuX2ZldGNoID0gcHZfZW11 bF9wdHdyX3JlYWQsCisgICAgLndyaXRlICAgICAgPSBwdHdyX2VtdWxhdGVkX3dyaXRlLAorICAg IC5jbXB4Y2hnICAgID0gcHR3cl9lbXVsYXRlZF9jbXB4Y2hnLAorICAgIC52YWxpZGF0ZSAgID0g cHZfZW11bF9pc19tZW1fd3JpdGUsCisgICAgLmNwdWlkICAgICAgPSBwdl9lbXVsX2NwdWlkLAor fTsKKworLyogV3JpdGUgcGFnZSBmYXVsdCBoYW5kbGVyOiBjaGVjayBpZiBndWVzdCBpcyB0cnlp bmcgdG8gbW9kaWZ5IGEgUFRFLiAqLworaW50IHB0d3JfZG9fcGFnZV9mYXVsdChzdHJ1Y3QgdmNw dSAqdiwgdW5zaWduZWQgbG9uZyBhZGRyLAorICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3Qg Y3B1X3VzZXJfcmVncyAqcmVncykKK3sKKyAgICBzdHJ1Y3QgZG9tYWluICpkID0gdi0+ZG9tYWlu OworICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7CisgICAgbDFfcGdlbnRyeV90ICAgICAgcHRl OworICAgIHN0cnVjdCBwdHdyX2VtdWxhdGVfY3R4dCBwdHdyX2N0eHQgPSB7CisgICAgICAgIC5j dHh0ID0geworICAgICAgICAgICAgLnJlZ3MgPSByZWdzLAorICAgICAgICAgICAgLnZlbmRvciA9 IGQtPmFyY2guY3B1aWQtPng4Nl92ZW5kb3IsCisgICAgICAgICAgICAuYWRkcl9zaXplID0gaXNf cHZfMzJiaXRfZG9tYWluKGQpID8gMzIgOiBCSVRTX1BFUl9MT05HLAorICAgICAgICAgICAgLnNw X3NpemUgICA9IGlzX3B2XzMyYml0X2RvbWFpbihkKSA/IDMyIDogQklUU19QRVJfTE9ORywKKyAg ICAgICAgICAgIC5sbWEgICAgICAgPSAhaXNfcHZfMzJiaXRfZG9tYWluKGQpLAorICAgICAgICB9 LAorICAgIH07CisgICAgaW50IHJjOworCisgICAgLyogQXR0ZW1wdCB0byByZWFkIHRoZSBQVEUg dGhhdCBtYXBzIHRoZSBWQSBiZWluZyBhY2Nlc3NlZC4gKi8KKyAgICBwdl9nZXRfZ3Vlc3RfZWZm X2wxZShhZGRyLCAmcHRlKTsKKworICAgIC8qIFdlIGFyZSBsb29raW5nIG9ubHkgZm9yIHJlYWQt b25seSBtYXBwaW5ncyBvZiBwLnQuIHBhZ2VzLiAqLworICAgIGlmICggKChsMWVfZ2V0X2ZsYWdz KHB0ZSkgJiAoX1BBR0VfUFJFU0VOVHxfUEFHRV9SVykpICE9IF9QQUdFX1BSRVNFTlQpIHx8Cisg ICAgICAgICByYW5nZXNldF9jb250YWluc19zaW5nbGV0b24obW1pb19yb19yYW5nZXMsIGwxZV9n ZXRfcGZuKHB0ZSkpIHx8CisgICAgICAgICBnZXRfcGFnZV9mcm9tX3BhZ2VucihsMWVfZ2V0X3Bm bihwdGUpLCBkKSApCisgICAgICAgIGdvdG8gYmFpbDsKKworICAgIHBhZ2UgPSBsMWVfZ2V0X3Bh Z2UocHRlKTsKKyAgICBpZiAoICFwYWdlX2xvY2socGFnZSkgKQorICAgIHsKKyAgICAgICAgcHV0 X3BhZ2UocGFnZSk7CisgICAgICAgIGdvdG8gYmFpbDsKKyAgICB9CisKKyAgICBpZiAoIChwYWdl LT51LmludXNlLnR5cGVfaW5mbyAmIFBHVF90eXBlX21hc2spICE9IFBHVF9sMV9wYWdlX3RhYmxl ICkKKyAgICB7CisgICAgICAgIHBhZ2VfdW5sb2NrKHBhZ2UpOworICAgICAgICBwdXRfcGFnZShw YWdlKTsKKyAgICAgICAgZ290byBiYWlsOworICAgIH0KKworICAgIHB0d3JfY3R4dC5jcjIgPSBh ZGRyOworICAgIHB0d3JfY3R4dC5wdGUgPSBwdGU7CisKKyAgICByYyA9IHg4Nl9lbXVsYXRlKCZw dHdyX2N0eHQuY3R4dCwgJnB0d3JfZW11bGF0ZV9vcHMpOworCisgICAgcGFnZV91bmxvY2socGFn ZSk7CisgICAgcHV0X3BhZ2UocGFnZSk7CisKKyAgICBzd2l0Y2ggKCByYyApCisgICAgeworICAg IGNhc2UgWDg2RU1VTF9FWENFUFRJT046CisgICAgICAgIC8qCisgICAgICAgICAqIFRoaXMgZW11 bGF0aW9uIG9ubHkgY292ZXJzIHdyaXRlcyB0byBwYWdldGFibGVzIHdoaWNoIGFyZSBtYXJrZWQK KyAgICAgICAgICogcmVhZC1vbmx5IGJ5IFhlbi4gIFdlIHRvbGVyYXRlICNQRiAoaW4gY2FzZSBh IGNvbmN1cnJlbnQgcGFnZXRhYmxlCisgICAgICAgICAqIHVwZGF0ZSBoYXMgc3VjY2VlZGVkIG9u IGEgZGlmZmVyZW50IHZjcHUpLiAgQW55dGhpbmcgZWxzZSBpcyBhbgorICAgICAgICAgKiBlbXVs YXRpb24gYnVnLCBvciBhIGd1ZXN0IHBsYXlpbmcgd2l0aCB0aGUgaW5zdHJ1Y3Rpb24gc3RyZWFt IHVuZGVyCisgICAgICAgICAqIFhlbidzIGZlZXQuCisgICAgICAgICAqLworICAgICAgICBpZiAo IHB0d3JfY3R4dC5jdHh0LmV2ZW50LnR5cGUgPT0gWDg2X0VWRU5UVFlQRV9IV19FWENFUFRJT04g JiYKKyAgICAgICAgICAgICBwdHdyX2N0eHQuY3R4dC5ldmVudC52ZWN0b3IgPT0gVFJBUF9wYWdl X2ZhdWx0ICkKKyAgICAgICAgICAgIHB2X2luamVjdF9ldmVudCgmcHR3cl9jdHh0LmN0eHQuZXZl bnQpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywK KyAgICAgICAgICAgICAgICAgICAgICJVbmV4cGVjdGVkIGV2ZW50ICh0eXBlICV1LCB2ZWN0b3Ig JSN4KSBmcm9tIGVtdWxhdGlvblxuIiwKKyAgICAgICAgICAgICAgICAgICAgIHB0d3JfY3R4dC5j dHh0LmV2ZW50LnR5cGUsIHB0d3JfY3R4dC5jdHh0LmV2ZW50LnZlY3Rvcik7CisKKyAgICAgICAg LyogRmFsbHRocm91Z2ggKi8KKyAgICBjYXNlIFg4NkVNVUxfT0tBWToKKworICAgICAgICBpZiAo IHB0d3JfY3R4dC5jdHh0LnJldGlyZS5zaW5nbGVzdGVwICkKKyAgICAgICAgICAgIHB2X2luamVj dF9od19leGNlcHRpb24oVFJBUF9kZWJ1ZywgWDg2X0VWRU5UX05PX0VDKTsKKworICAgICAgICAv KiBGYWxsdGhyb3VnaCAqLworICAgIGNhc2UgWDg2RU1VTF9SRVRSWToKKyAgICAgICAgcGVyZmNf aW5jcihwdHdyX2VtdWxhdGlvbnMpOworICAgICAgICByZXR1cm4gRVhDUkVUX2ZhdWx0X2ZpeGVk OworICAgIH0KKworIGJhaWw6CisgICAgcmV0dXJuIDA7Cit9CisKKy8qCisgKiBMb2NhbCB2YXJp YWJsZXM6CisgKiBtb2RlOiBDCisgKiBjLWZpbGUtc3R5bGU6ICJCU0QiCisgKiBjLWJhc2ljLW9m ZnNldDogNAorICogdGFiLXdpZHRoOiA0CisgKiBpbmRlbnQtdGFicy1tb2RlOiBuaWwKKyAqIEVu ZDoKKyAqLwpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L3B2L2VtdWxhdGUuaCBiL3hlbi9hcmNo L3g4Ni9wdi9lbXVsYXRlLmgKaW5kZXggODlhYmJlMDEwZi4uN2ZiNTY4YWRjMCAxMDA2NDQKLS0t IGEveGVuL2FyY2gveDg2L3B2L2VtdWxhdGUuaAorKysgYi94ZW4vYXJjaC94ODYvcHYvZW11bGF0 ZS5oCkBAIC0xMCw0ICsxMCw2IEBAIHZvaWQgcHZfZW11bF9pbnN0cnVjdGlvbl9kb25lKHN0cnVj dCBjcHVfdXNlcl9yZWdzICpyZWdzLCB1bnNpZ25lZCBsb25nIHJpcCk7CiBpbnQgcHZfZW11bF9p c19tZW1fd3JpdGUoY29uc3Qgc3RydWN0IHg4Nl9lbXVsYXRlX3N0YXRlICpzdGF0ZSwKICAgICAg ICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgeDg2X2VtdWxhdGVfY3R4dCAqY3R4dCk7CiAKK2lu dCBwdl9lbXVsX3B0d3JfcmVhZChlbnVtIHg4Nl9zZWdtZW50IHNlZywgdW5zaWduZWQgbG9uZyBv ZmZzZXQsIHZvaWQgKnBfZGF0YSwKKyAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQg Ynl0ZXMsIHN0cnVjdCB4ODZfZW11bGF0ZV9jdHh0ICpjdHh0KTsKICNlbmRpZiAvKiBfX1BWX0VN VUxBVEVfSF9fICovCi0tIAoyLjExLjAKCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZlbEBsaXN0cy54 ZW4ub3JnCmh0dHBzOi8vbGlzdHMueGVuLm9yZy94ZW4tZGV2ZWwK