From mboxrd@z Thu Jan 1 00:00:00 1970 From: Wei Liu Subject: [PATCH v4 31/31] x86/mm: move {get, put}_page_from_l{2, 3, 4}e Date: Thu, 17 Aug 2017 15:44:56 +0100 Message-ID: <20170817144456.18989-32-wei.liu2@citrix.com> References: <20170817144456.18989-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.bemta3.messagelabs.com ([195.245.230.39]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1diM4P-00021j-W7 for xen-devel@lists.xenproject.org; Thu, 17 Aug 2017 14:46:51 +0000 In-Reply-To: <20170817144456.18989-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 VGhleSBhcmUgb25seSB1c2VkIGJ5IFBWIGNvZGUuCgpGaXggY29kaW5nIHN0eWxlIGlzc3VlcyB3 aGlsZSBtb3ZpbmcuIE1vdmUgZGVjbGFyYXRpb25zIHRvIFBWIHNwZWNpZmljCmhlYWRlciBmaWxl LgoKU2lnbmVkLW9mZi1ieTogV2VpIExpdSA8d2VpLmxpdTJAY2l0cml4LmNvbT4KLS0tCiB4ZW4v YXJjaC94ODYvbW0uYyAgICAgICAgICAgfCAyNTMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0KIHhlbi9hcmNoL3g4Ni9wdi9tbS5jICAgICAgICB8IDI0NiArKysr KysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysKIHhlbi9pbmNsdWRlL2FzbS14 ODYvbW0uaCAgICB8ICAxMCAtLQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9tbS5oIHwgIDI5ICsr KysrCiA0IGZpbGVzIGNoYW5nZWQsIDI3NSBpbnNlcnRpb25zKCspLCAyNjMgZGVsZXRpb25zKC0p CgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tLmMgYi94ZW4vYXJjaC94ODYvbW0uYwppbmRl eCA3MDU1OWM2ODdjLi45NzUwZjY1N2NhIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvbW0uYwor KysgYi94ZW4vYXJjaC94ODYvbW0uYwpAQCAtNTA3LDcyICs1MDcsNiBAQCBpbnQgZ2V0X3BhZ2Vf YW5kX3R5cGVfZnJvbV9tZm4obWZuX3QgbWZuLCB1bnNpZ25lZCBsb25nIHR5cGUsIHN0cnVjdCBk b21haW4gKmQsCiAgICAgcmV0dXJuIHJjOwogfQogCi1zdGF0aWMgdm9pZCBwdXRfZGF0YV9wYWdl KAotICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UsIGludCB3cml0ZWFibGUpCi17Ci0gICAgaWYg KCB3cml0ZWFibGUgKQotICAgICAgICBwdXRfcGFnZV9hbmRfdHlwZShwYWdlKTsKLSAgICBlbHNl Ci0gICAgICAgIHB1dF9wYWdlKHBhZ2UpOwotfQotCi0vKgotICogV2UgYWxsb3cgcm9vdCB0YWJs ZXMgdG8gbWFwIGVhY2ggb3RoZXIgKGEuay5hLiBsaW5lYXIgcGFnZSB0YWJsZXMpLiBJdAotICog bmVlZHMgc29tZSBzcGVjaWFsIGNhcmUgd2l0aCByZWZlcmVuY2UgY291bnRzIGFuZCBhY2Nlc3Mg cGVybWlzc2lvbnM6Ci0gKiAgMS4gVGhlIG1hcHBpbmcgZW50cnkgbXVzdCBiZSByZWFkLW9ubHks IG9yIHRoZSBndWVzdCBtYXkgZ2V0IHdyaXRlIGFjY2VzcwotICogICAgIHRvIGl0cyBvd24gUFRF cy4KLSAqICAyLiBXZSBtdXN0IG9ubHkgYnVtcCB0aGUgcmVmZXJlbmNlIGNvdW50cyBmb3IgYW4g KmFscmVhZHkgdmFsaWRhdGVkKgotICogICAgIEwyIHRhYmxlLCBvciB3ZSBjYW4gZW5kIHVwIGlu IGEgZGVhZGxvY2sgaW4gZ2V0X3BhZ2VfdHlwZSgpIGJ5IHdhaXRpbmcKLSAqICAgICBvbiBhIHZh bGlkYXRpb24gdGhhdCBpcyByZXF1aXJlZCB0byBjb21wbGV0ZSB0aGF0IHZhbGlkYXRpb24uCi0g KiAgMy4gV2Ugb25seSBuZWVkIHRvIGluY3JlbWVudCB0aGUgcmVmZXJlbmNlIGNvdW50cyBmb3Ig dGhlIG1hcHBlZCBwYWdlCi0gKiAgICAgZnJhbWUgaWYgaXQgaXMgbWFwcGVkIGJ5IGEgZGlmZmVy ZW50IHJvb3QgdGFibGUuIFRoaXMgaXMgc3VmZmljaWVudCBhbmQKLSAqICAgICBhbHNvIG5lY2Vz c2FyeSB0byBhbGxvdyB2YWxpZGF0aW9uIG9mIGEgcm9vdCB0YWJsZSBtYXBwaW5nIGl0c2VsZi4K LSAqLwotI2RlZmluZSBkZWZpbmVfZ2V0X2xpbmVhcl9wYWdldGFibGUobGV2ZWwpICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKLXN0YXRpYyBpbnQgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi1nZXRfIyNs ZXZlbCMjX2xpbmVhcl9wYWdldGFibGUoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAotICAgIGxldmVsIyNfcGdlbnRyeV90IHBkZSwgdW5zaWduZWQgbG9uZyBw ZGVfcGZuLCBzdHJ1Y3QgZG9tYWluICpkKSAgICAgICAgIFwKLXsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Ci0gICAgdW5zaWduZWQgbG9uZyB4LCB5OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAotICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2U7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICB1bnNpZ25l ZCBsb25nIHBmbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgIGlmICggKGxldmVsIyNlX2dldF9m bGFncyhwZGUpICYgX1BBR0VfUlcpICkgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAg ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCi0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgICAg ICAiQXR0ZW1wdCB0byBjcmVhdGUgbGluZWFyIHAudC4gd2l0aCB3cml0ZSBwZXJtc1xuIik7ICAg ICAgIFwKLSAgICAgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKLSAgICBpZiAoIChwZm4gPSBsZXZlbCMjZV9nZXRfcGZuKHBkZSkpICE9 IHBkZV9wZm4gKSAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAotICAgICAgICAvKiBNYWtlIHN1cmUgdGhlIG1hcHBlZCBmcmFtZSBiZWxvbmdzIHRvIHRoZSBj b3JyZWN0IGRvbWFpbi4gKi8gICAgIFwKLSAgICAgICAgaWYgKCB1bmxpa2VseSghZ2V0X3BhZ2Vf ZnJvbV9tZm4oX21mbihwZm4pLCBkKSkgKSAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAg ICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgLyogICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0g ICAgICAgICAqIEVuc3VyZSB0aGF0IHRoZSBtYXBwZWQgZnJhbWUgaXMgYW4gYWxyZWFkeS12YWxp ZGF0ZWQgcGFnZSB0YWJsZS4gXAotICAgICAgICAgKiBJZiBzbywgYXRvbWljYWxseSBpbmNyZW1l bnQgdGhlIGNvdW50IChjaGVja2luZyBmb3Igb3ZlcmZsb3cpLiAgIFwKLSAgICAgICAgICovICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCi0gICAgICAgIHBhZ2UgPSBtZm5fdG9fcGFnZShwZm4pOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICB5ID0gcGFnZS0+dS5pbnVzZS50 eXBlX2luZm87ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAg ICAgZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCi0gICAgICAgICAgICB4ID0geTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAotICAgICAgICAgICAgaWYgKCB1 bmxpa2VseSgoeCAmIFBHVF9jb3VudF9tYXNrKSA9PSBQR1RfY291bnRfbWFzaykgfHwgICAgICAg IFwKLSAgICAgICAgICAgICAgICAgdW5saWtlbHkoKHggJiAoUEdUX3R5cGVfbWFza3xQR1RfdmFs aWRhdGVkKSkgIT0gICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgICAgICAgICAgIChQR1Rf IyNsZXZlbCMjX3BhZ2VfdGFibGV8UEdUX3ZhbGlkYXRlZCkpICkgICAgICAgXAotICAgICAgICAg ICAgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICBwdXRfcGFnZShwYWdlKTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgICAgICAgICAgcmV0dXJu IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAot ICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAgICAgIHdoaWxl ICggKHkgPSBjbXB4Y2hnKCZwYWdlLT51LmludXNlLnR5cGVfaW5mbywgeCwgeCArIDEpKSAhPSB4 ICk7ICAgXAotICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKLSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCi0gICAg cmV0dXJuIDE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAotfQotCi0KIGJvb2wgaXNfaW9tZW1fcGFnZShtZm5fdCBtZm4pCiB7 CiAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGFnZTsKQEAgLTg2MiwxMDggKzc5Niw2IEBAIGdldF9w YWdlX2Zyb21fbDFlKAogfQogCiAKLS8qIE5CLiBWaXJ0dWFsIGFkZHJlc3MgJ2wyZScgbWFwcyB0 byBhIG1hY2hpbmUgYWRkcmVzcyB3aXRoaW4gZnJhbWUgJ3BmbicuICovCi0vKgotICogZ2V0X3Bh Z2VfZnJvbV9sMmUgcmV0dXJuczoKLSAqICAgMSA9PiBwYWdlIG5vdCBwcmVzZW50Ci0gKiAgIDAg PT4gc3VjY2VzcwotICogIDwwID0+IGVycm9yIGNvZGUKLSAqLwotZGVmaW5lX2dldF9saW5lYXJf cGFnZXRhYmxlKGwyKTsKLWludAotZ2V0X3BhZ2VfZnJvbV9sMmUoCi0gICAgbDJfcGdlbnRyeV90 IGwyZSwgdW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBkb21haW4gKmQpCi17Ci0gICAgdW5zaWdu ZWQgbG9uZyBtZm4gPSBsMmVfZ2V0X3BmbihsMmUpOwotICAgIGludCByYzsKLQotICAgIGlmICgg IShsMmVfZ2V0X2ZsYWdzKGwyZSkgJiBfUEFHRV9QUkVTRU5UKSApCi0gICAgICAgIHJldHVybiAx OwotCi0gICAgaWYgKCB1bmxpa2VseSgobDJlX2dldF9mbGFncyhsMmUpICYgTDJfRElTQUxMT1df TUFTSykpICkKLSAgICB7Ci0gICAgICAgIGdkcHJpbnRrKFhFTkxPR19XQVJOSU5HLCAiQmFkIEwy IGZsYWdzICV4XG4iLAotICAgICAgICAgICAgICAgICBsMmVfZ2V0X2ZsYWdzKGwyZSkgJiBMMl9E SVNBTExPV19NQVNLKTsKLSAgICAgICAgcmV0dXJuIC1FSU5WQUw7Ci0gICAgfQotCi0gICAgaWYg KCAhKGwyZV9nZXRfZmxhZ3MobDJlKSAmIF9QQUdFX1BTRSkgKQotICAgIHsKLSAgICAgICAgcmMg PSBnZXRfcGFnZV9hbmRfdHlwZV9mcm9tX21mbihfbWZuKG1mbiksIFBHVF9sMV9wYWdlX3RhYmxl LCBkLCAwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZhbHNlKTsK LSAgICAgICAgaWYgKCB1bmxpa2VseShyYyA9PSAtRUlOVkFMKSAmJiBnZXRfbDJfbGluZWFyX3Bh Z2V0YWJsZShsMmUsIHBmbiwgZCkgKQotICAgICAgICAgICAgcmMgPSAwOwotICAgICAgICByZXR1 cm4gcmM7Ci0gICAgfQotCi0gICAgcmV0dXJuIC1FSU5WQUw7Ci19Ci0KLQotLyoKLSAqIGdldF9w YWdlX2Zyb21fbDNlIHJldHVybnM6Ci0gKiAgIDEgPT4gcGFnZSBub3QgcHJlc2VudAotICogICAw ID0+IHN1Y2Nlc3MKLSAqICA8MCA9PiBlcnJvciBjb2RlCi0gKi8KLWRlZmluZV9nZXRfbGluZWFy X3BhZ2V0YWJsZShsMyk7Ci1pbnQKLWdldF9wYWdlX2Zyb21fbDNlKAotICAgIGwzX3BnZW50cnlf dCBsM2UsIHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgZG9tYWluICpkLCBpbnQgcGFydGlhbCkK LXsKLSAgICBpbnQgcmM7Ci0KLSAgICBpZiAoICEobDNlX2dldF9mbGFncyhsM2UpICYgX1BBR0Vf UFJFU0VOVCkgKQotICAgICAgICByZXR1cm4gMTsKLQotICAgIGlmICggdW5saWtlbHkoKGwzZV9n ZXRfZmxhZ3MobDNlKSAmIGwzX2Rpc2FsbG93X21hc2soZCkpKSApCi0gICAgewotICAgICAgICBn ZHByaW50ayhYRU5MT0dfV0FSTklORywgIkJhZCBMMyBmbGFncyAleFxuIiwKLSAgICAgICAgICAg ICAgICAgbDNlX2dldF9mbGFncyhsM2UpICYgbDNfZGlzYWxsb3dfbWFzayhkKSk7Ci0gICAgICAg IHJldHVybiAtRUlOVkFMOwotICAgIH0KLQotICAgIHJjID0gZ2V0X3BhZ2VfYW5kX3R5cGVfZnJv bV9tZm4oX21mbihsM2VfZ2V0X3BmbihsM2UpKSwgUEdUX2wyX3BhZ2VfdGFibGUsCi0gICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkLCBwYXJ0aWFsLCB0cnVlKTsKLSAgICBpZiAo IHVubGlrZWx5KHJjID09IC1FSU5WQUwpICYmCi0gICAgICAgICAhaXNfcHZfMzJiaXRfZG9tYWlu KGQpICYmCi0gICAgICAgICBnZXRfbDNfbGluZWFyX3BhZ2V0YWJsZShsM2UsIHBmbiwgZCkgKQot ICAgICAgICByYyA9IDA7Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KLS8qCi0gKiBnZXRfcGFnZV9m cm9tX2w0ZSByZXR1cm5zOgotICogICAxID0+IHBhZ2Ugbm90IHByZXNlbnQKLSAqICAgMCA9PiBz dWNjZXNzCi0gKiAgPDAgPT4gZXJyb3IgY29kZQotICovCi1kZWZpbmVfZ2V0X2xpbmVhcl9wYWdl dGFibGUobDQpOwotaW50Ci1nZXRfcGFnZV9mcm9tX2w0ZSgKLSAgICBsNF9wZ2VudHJ5X3QgbDRl LCB1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IGRvbWFpbiAqZCwgaW50IHBhcnRpYWwpCi17Ci0g ICAgaW50IHJjOwotCi0gICAgaWYgKCAhKGw0ZV9nZXRfZmxhZ3MobDRlKSAmIF9QQUdFX1BSRVNF TlQpICkKLSAgICAgICAgcmV0dXJuIDE7Ci0KLSAgICBpZiAoIHVubGlrZWx5KChsNGVfZ2V0X2Zs YWdzKGw0ZSkgJiBMNF9ESVNBTExPV19NQVNLKSkgKQotICAgIHsKLSAgICAgICAgZ2RwcmludGso WEVOTE9HX1dBUk5JTkcsICJCYWQgTDQgZmxhZ3MgJXhcbiIsCi0gICAgICAgICAgICAgICAgIGw0 ZV9nZXRfZmxhZ3MobDRlKSAmIEw0X0RJU0FMTE9XX01BU0spOwotICAgICAgICByZXR1cm4gLUVJ TlZBTDsKLSAgICB9Ci0KLSAgICByYyA9IGdldF9wYWdlX2FuZF90eXBlX2Zyb21fbWZuKF9tZm4o bDRlX2dldF9wZm4obDRlKSksIFBHVF9sM19wYWdlX3RhYmxlLAotICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgZCwgcGFydGlhbCwgdHJ1ZSk7Ci0gICAgaWYgKCB1bmxpa2VseShy YyA9PSAtRUlOVkFMKSAmJiBnZXRfbDRfbGluZWFyX3BhZ2V0YWJsZShsNGUsIHBmbiwgZCkgKQot ICAgICAgICByYyA9IDA7Ci0KLSAgICByZXR1cm4gcmM7Ci19Ci0KIHZvaWQgcHV0X3BhZ2VfZnJv bV9sMWUobDFfcGdlbnRyeV90IGwxZSwgc3RydWN0IGRvbWFpbiAqbDFlX293bmVyKQogewogICAg IHVuc2lnbmVkIGxvbmcgICAgIHBmbiA9IGwxZV9nZXRfcGZuKGwxZSk7CkBAIC0xMDI0LDkxICs4 NTYsNiBAQCB2b2lkIHB1dF9wYWdlX2Zyb21fbDFlKGwxX3BnZW50cnlfdCBsMWUsIHN0cnVjdCBk b21haW4gKmwxZV9vd25lcikKIH0KIAogCi0vKgotICogTkIuIFZpcnR1YWwgYWRkcmVzcyAnbDJl JyBtYXBzIHRvIGEgbWFjaGluZSBhZGRyZXNzIHdpdGhpbiBmcmFtZSAncGZuJy4KLSAqIE5vdGUg YWxzbyB0aGF0IHRoaXMgYXV0b21hdGljYWxseSBkZWFscyBjb3JyZWN0bHkgd2l0aCBsaW5lYXIg cC50LidzLgotICovCi1pbnQgcHV0X3BhZ2VfZnJvbV9sMmUobDJfcGdlbnRyeV90IGwyZSwgdW5z aWduZWQgbG9uZyBwZm4pCi17Ci0gICAgaWYgKCAhKGwyZV9nZXRfZmxhZ3MobDJlKSAmIF9QQUdF X1BSRVNFTlQpIHx8IChsMmVfZ2V0X3BmbihsMmUpID09IHBmbikgKQotICAgICAgICByZXR1cm4g MTsKLQotICAgIGlmICggbDJlX2dldF9mbGFncyhsMmUpICYgX1BBR0VfUFNFICkKLSAgICB7Ci0g ICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBhZ2UgPSBtZm5fdG9fcGFnZShsMmVfZ2V0X3Bmbihs MmUpKTsKLSAgICAgICAgdW5zaWduZWQgaW50IGk7Ci0KLSAgICAgICAgZm9yICggaSA9IDA7IGkg PCAoMXUgPDwgUEFHRVRBQkxFX09SREVSKTsgaSsrLCBwYWdlKysgKQotICAgICAgICAgICAgcHV0 X3BhZ2VfYW5kX3R5cGUocGFnZSk7Ci0gICAgfSBlbHNlCi0gICAgICAgIHB1dF9wYWdlX2FuZF90 eXBlKGwyZV9nZXRfcGFnZShsMmUpKTsKLQotICAgIHJldHVybiAwOwotfQotCi1pbnQgcHV0X3Bh Z2VfZnJvbV9sM2UobDNfcGdlbnRyeV90IGwzZSwgdW5zaWduZWQgbG9uZyBwZm4sIGludCBwYXJ0 aWFsLAotICAgICAgICAgICAgICAgICAgICAgIGJvb2wgZGVmZXIpCi17Ci0gICAgc3RydWN0IHBh Z2VfaW5mbyAqcGc7Ci0KLSAgICBpZiAoICEobDNlX2dldF9mbGFncyhsM2UpICYgX1BBR0VfUFJF U0VOVCkgfHwgKGwzZV9nZXRfcGZuKGwzZSkgPT0gcGZuKSApCi0gICAgICAgIHJldHVybiAxOwot Ci0gICAgaWYgKCB1bmxpa2VseShsM2VfZ2V0X2ZsYWdzKGwzZSkgJiBfUEFHRV9QU0UpICkKLSAg ICB7Ci0gICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuID0gbDNlX2dldF9wZm4obDNlKTsKLSAgICAg ICAgaW50IHdyaXRlYWJsZSA9IGwzZV9nZXRfZmxhZ3MobDNlKSAmIF9QQUdFX1JXOwotCi0gICAg ICAgIEFTU0VSVCghKG1mbiAmICgoMVVMIDw8IChMM19QQUdFVEFCTEVfU0hJRlQgLSBQQUdFX1NI SUZUKSkgLSAxKSkpOwotICAgICAgICBkbyB7Ci0gICAgICAgICAgICBwdXRfZGF0YV9wYWdlKG1m bl90b19wYWdlKG1mbiksIHdyaXRlYWJsZSk7Ci0gICAgICAgIH0gd2hpbGUgKCArK21mbiAmICgo MVVMIDw8IChMM19QQUdFVEFCTEVfU0hJRlQgLSBQQUdFX1NISUZUKSkgLSAxKSApOwotCi0gICAg ICAgIHJldHVybiAwOwotICAgIH0KLQotICAgIHBnID0gbDNlX2dldF9wYWdlKGwzZSk7Ci0KLSAg ICBpZiAoIHVubGlrZWx5KHBhcnRpYWwgPiAwKSApCi0gICAgewotICAgICAgICBBU1NFUlQoIWRl ZmVyKTsKLSAgICAgICAgcmV0dXJuIHB1dF9wYWdlX3R5cGVfcHJlZW1wdGlibGUocGcpOwotICAg IH0KLQotICAgIGlmICggZGVmZXIgKQotICAgIHsKLSAgICAgICAgY3VycmVudC0+YXJjaC5vbGRf Z3Vlc3RfdGFibGUgPSBwZzsKLSAgICAgICAgcmV0dXJuIDA7Ci0gICAgfQotCi0gICAgcmV0dXJu IHB1dF9wYWdlX2FuZF90eXBlX3ByZWVtcHRpYmxlKHBnKTsKLX0KLQotaW50IHB1dF9wYWdlX2Zy b21fbDRlKGw0X3BnZW50cnlfdCBsNGUsIHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgcGFydGlhbCwK LSAgICAgICAgICAgICAgICAgICAgICBib29sIGRlZmVyKQotewotICAgIGlmICggKGw0ZV9nZXRf ZmxhZ3MobDRlKSAmIF9QQUdFX1BSRVNFTlQpICYmCi0gICAgICAgICAobDRlX2dldF9wZm4obDRl KSAhPSBwZm4pICkKLSAgICB7Ci0gICAgICAgIHN0cnVjdCBwYWdlX2luZm8gKnBnID0gbDRlX2dl dF9wYWdlKGw0ZSk7Ci0KLSAgICAgICAgaWYgKCB1bmxpa2VseShwYXJ0aWFsID4gMCkgKQotICAg ICAgICB7Ci0gICAgICAgICAgICBBU1NFUlQoIWRlZmVyKTsKLSAgICAgICAgICAgIHJldHVybiBw dXRfcGFnZV90eXBlX3ByZWVtcHRpYmxlKHBnKTsKLSAgICAgICAgfQotCi0gICAgICAgIGlmICgg ZGVmZXIgKQotICAgICAgICB7Ci0gICAgICAgICAgICBjdXJyZW50LT5hcmNoLm9sZF9ndWVzdF90 YWJsZSA9IHBnOwotICAgICAgICAgICAgcmV0dXJuIDA7Ci0gICAgICAgIH0KLQotICAgICAgICBy ZXR1cm4gcHV0X3BhZ2VfYW5kX3R5cGVfcHJlZW1wdGlibGUocGcpOwotICAgIH0KLSAgICByZXR1 cm4gMTsKLX0KLQogYm9vbCBmaWxsX3JvX21wdCh1bnNpZ25lZCBsb25nIG1mbikKIHsKICAgICBs NF9wZ2VudHJ5X3QgKmw0dGFiID0gbWFwX2RvbWFpbl9wYWdlKF9tZm4obWZuKSk7CmRpZmYgLS1n aXQgYS94ZW4vYXJjaC94ODYvcHYvbW0uYyBiL3hlbi9hcmNoL3g4Ni9wdi9tbS5jCmluZGV4IDE5 YjJhZTU4OGUuLmFkMzU4MDhjNTEgMTAwNjQ0Ci0tLSBhL3hlbi9hcmNoL3g4Ni9wdi9tbS5jCisr KyBiL3hlbi9hcmNoL3g4Ni9wdi9tbS5jCkBAIC03NzcsNiArNzc3LDI1MiBAQCB2b2lkIHB2X2lu dmFsaWRhdGVfc2hhZG93X2xkdChzdHJ1Y3QgdmNwdSAqdiwgYm9vbCBmbHVzaCkKICAgICBzcGlu X3VubG9jaygmdi0+YXJjaC5wdl92Y3B1LnNoYWRvd19sZHRfbG9jayk7CiB9CiAKKy8qCisgKiBX ZSBhbGxvdyByb290IHRhYmxlcyB0byBtYXAgZWFjaCBvdGhlciAoYS5rLmEuIGxpbmVhciBwYWdl IHRhYmxlcykuIEl0CisgKiBuZWVkcyBzb21lIHNwZWNpYWwgY2FyZSB3aXRoIHJlZmVyZW5jZSBj b3VudHMgYW5kIGFjY2VzcyBwZXJtaXNzaW9uczoKKyAqICAxLiBUaGUgbWFwcGluZyBlbnRyeSBt dXN0IGJlIHJlYWQtb25seSwgb3IgdGhlIGd1ZXN0IG1heSBnZXQgd3JpdGUgYWNjZXNzCisgKiAg ICAgdG8gaXRzIG93biBQVEVzLgorICogIDIuIFdlIG11c3Qgb25seSBidW1wIHRoZSByZWZlcmVu Y2UgY291bnRzIGZvciBhbiAqYWxyZWFkeSB2YWxpZGF0ZWQqCisgKiAgICAgTDIgdGFibGUsIG9y IHdlIGNhbiBlbmQgdXAgaW4gYSBkZWFkbG9jayBpbiBnZXRfcGFnZV90eXBlKCkgYnkgd2FpdGlu ZworICogICAgIG9uIGEgdmFsaWRhdGlvbiB0aGF0IGlzIHJlcXVpcmVkIHRvIGNvbXBsZXRlIHRo YXQgdmFsaWRhdGlvbi4KKyAqICAzLiBXZSBvbmx5IG5lZWQgdG8gaW5jcmVtZW50IHRoZSByZWZl cmVuY2UgY291bnRzIGZvciB0aGUgbWFwcGVkIHBhZ2UKKyAqICAgICBmcmFtZSBpZiBpdCBpcyBt YXBwZWQgYnkgYSBkaWZmZXJlbnQgcm9vdCB0YWJsZS4gVGhpcyBpcyBzdWZmaWNpZW50IGFuZAor ICogICAgIGFsc28gbmVjZXNzYXJ5IHRvIGFsbG93IHZhbGlkYXRpb24gb2YgYSByb290IHRhYmxl IG1hcHBpbmcgaXRzZWxmLgorICovCisjZGVmaW5lIGRlZmluZV9nZXRfbGluZWFyX3BhZ2V0YWJs ZShsZXZlbCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorc3RhdGljIGludCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKK2dldF8jI2xldmVsIyNfbGluZWFyX3BhZ2V0YWJsZSggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgbGV2ZWwjI19wZ2VudHJ5X3QgcGRl LCB1bnNpZ25lZCBsb25nIHBkZV9wZm4sIHN0cnVjdCBkb21haW4gKmQpICAgICAgICAgXAoreyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgICB1bnNpZ25lZCBsb25nIHgsIHk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgc3RydWN0IHBhZ2Vf aW5mbyAqcGFnZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICAgIHVuc2lnbmVkIGxvbmcgcGZuOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgaWYg KCAobGV2ZWwjI2VfZ2V0X2ZsYWdzKHBkZSkgJiBfUEFHRV9SVykgKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICAgIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgZ2RwcmludGsoWEVO TE9HX1dBUk5JTkcsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgICAgICAgICAgICAgICAgICJBdHRlbXB0IHRvIGNyZWF0ZSBsaW5lYXIgcC50LiB3aXRoIHdy aXRlIHBlcm1zXG4iKTsgICAgICAgXAorICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICB9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIGlmICggKHBmbiA9IGxldmVsIyNl X2dldF9wZm4ocGRlKSkgIT0gcGRlX3BmbiApICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgIC8qIE1ha2Ugc3VyZSB0aGUgbWFwcGVkIGZyYW1l IGJlbG9uZ3MgdG8gdGhlIGNvcnJlY3QgZG9tYWluLiAqLyAgICAgXAorICAgICAgICBpZiAoIHVu bGlrZWx5KCFnZXRfcGFnZV9mcm9tX21mbihfbWZuKHBmbiksIGQpKSApICAgICAgICAgICAgICAg ICAgIFwKKyAgICAgICAgICAgIHJldHVybiAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICAvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICAgICAgICogRW5zdXJlIHRoYXQgdGhlIG1hcHBlZCBmcmFtZSBp cyBhbiBhbHJlYWR5LXZhbGlkYXRlZCBwYWdlIHRhYmxlLiBcCisgICAgICAgICAqIElmIHNvLCBh dG9taWNhbGx5IGluY3JlbWVudCB0aGUgY291bnQgKGNoZWNraW5nIGZvciBvdmVyZmxvdykuICAg XAorICAgICAgICAgKi8gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgcGFnZSA9IG1mbl90b19wYWdlKHBmbik7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgIHkg PSBwYWdlLT51LmludXNlLnR5cGVfaW5mbzsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAgICAgICAgIHggPSB5OyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg ICAgICAgICAgICBpZiAoIHVubGlrZWx5KCh4ICYgUEdUX2NvdW50X21hc2spID09IFBHVF9jb3Vu dF9tYXNrKSB8fCAgICAgICAgXAorICAgICAgICAgICAgICAgICB1bmxpa2VseSgoeCAmIChQR1Rf dHlwZV9tYXNrfFBHVF92YWxpZGF0ZWQpKSAhPSAgICAgICAgICAgIFwKKyAgICAgICAgICAgICAg ICAgICAgICAgICAgKFBHVF8jI2xldmVsIyNfcGFnZV90YWJsZXxQR1RfdmFsaWRhdGVkKSkgKSAg ICAgICBcCisgICAgICAgICAgICB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgICAgIHB1dF9wYWdlKHBh Z2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICAg ICAgICAgICAgICByZXR1cm4gMDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCisgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICB9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgICAgICAgd2hpbGUgKCAoeSA9IGNtcHhjaGcoJnBhZ2UtPnUuaW51c2UudHlwZV9pbmZv LCB4LCB4ICsgMSkpICE9IHggKTsgICBcCisgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgICByZXR1cm4gMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9CisKKy8qIE5CLiBWaXJ0dWFsIGFk ZHJlc3MgJ2wyZScgbWFwcyB0byBhIG1hY2hpbmUgYWRkcmVzcyB3aXRoaW4gZnJhbWUgJ3Bmbicu ICovCisvKgorICogZ2V0X3BhZ2VfZnJvbV9sMmUgcmV0dXJuczoKKyAqICAgMSA9PiBwYWdlIG5v dCBwcmVzZW50CisgKiAgIDAgPT4gc3VjY2VzcworICogIDwwID0+IGVycm9yIGNvZGUKKyAqLwor ZGVmaW5lX2dldF9saW5lYXJfcGFnZXRhYmxlKGwyKTsKK2ludCBnZXRfcGFnZV9mcm9tX2wyZShs Ml9wZ2VudHJ5X3QgbDJlLCB1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IGRvbWFpbiAqZCkKK3sK KyAgICB1bnNpZ25lZCBsb25nIG1mbiA9IGwyZV9nZXRfcGZuKGwyZSk7CisgICAgaW50IHJjOwor CisgICAgaWYgKCAhKGwyZV9nZXRfZmxhZ3MobDJlKSAmIF9QQUdFX1BSRVNFTlQpICkKKyAgICAg ICAgcmV0dXJuIDE7CisKKyAgICBpZiAoIHVubGlrZWx5KChsMmVfZ2V0X2ZsYWdzKGwyZSkgJiBM Ml9ESVNBTExPV19NQVNLKSkgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5J TkcsICJCYWQgTDIgZmxhZ3MgJXhcbiIsCisgICAgICAgICAgICAgICAgIGwyZV9nZXRfZmxhZ3Mo bDJlKSAmIEwyX0RJU0FMTE9XX01BU0spOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9 CisKKyAgICBpZiAoICEobDJlX2dldF9mbGFncyhsMmUpICYgX1BBR0VfUFNFKSApCisgICAgewor ICAgICAgICByYyA9IGdldF9wYWdlX2FuZF90eXBlX2Zyb21fbWZuKF9tZm4obWZuKSwgUEdUX2wx X3BhZ2VfdGFibGUsIGQsIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgZmFsc2UpOworICAgICAgICBpZiAoIHVubGlrZWx5KHJjID09IC1FSU5WQUwpICYmIGdldF9s Ml9saW5lYXJfcGFnZXRhYmxlKGwyZSwgcGZuLCBkKSApCisgICAgICAgICAgICByYyA9IDA7Cisg ICAgICAgIHJldHVybiByYzsKKyAgICB9CisKKyAgICByZXR1cm4gLUVJTlZBTDsKK30KKworLyoK KyAqIGdldF9wYWdlX2Zyb21fbDNlIHJldHVybnM6CisgKiAgIDEgPT4gcGFnZSBub3QgcHJlc2Vu dAorICogICAwID0+IHN1Y2Nlc3MKKyAqICA8MCA9PiBlcnJvciBjb2RlCisgKi8KK2RlZmluZV9n ZXRfbGluZWFyX3BhZ2V0YWJsZShsMyk7CitpbnQgZ2V0X3BhZ2VfZnJvbV9sM2UobDNfcGdlbnRy eV90IGwzZSwgdW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBkb21haW4gKmQsCisgICAgICAgICAg ICAgICAgICAgICAgaW50IHBhcnRpYWwpCit7CisgICAgaW50IHJjOworCisgICAgaWYgKCAhKGwz ZV9nZXRfZmxhZ3MobDNlKSAmIF9QQUdFX1BSRVNFTlQpICkKKyAgICAgICAgcmV0dXJuIDE7CisK KyAgICBpZiAoIHVubGlrZWx5KChsM2VfZ2V0X2ZsYWdzKGwzZSkgJiBsM19kaXNhbGxvd19tYXNr KGQpKSkgKQorICAgIHsKKyAgICAgICAgZ2RwcmludGsoWEVOTE9HX1dBUk5JTkcsICJCYWQgTDMg ZmxhZ3MgJXhcbiIsCisgICAgICAgICAgICAgICAgIGwzZV9nZXRfZmxhZ3MobDNlKSAmIGwzX2Rp c2FsbG93X21hc2soZCkpOworICAgICAgICByZXR1cm4gLUVJTlZBTDsKKyAgICB9CisKKyAgICBy YyA9IGdldF9wYWdlX2FuZF90eXBlX2Zyb21fbWZuKF9tZm4obDNlX2dldF9wZm4obDNlKSksIFBH VF9sMl9wYWdlX3RhYmxlLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZCwg cGFydGlhbCwgdHJ1ZSk7CisgICAgaWYgKCB1bmxpa2VseShyYyA9PSAtRUlOVkFMKSAmJgorICAg ICAgICAgIWlzX3B2XzMyYml0X2RvbWFpbihkKSAmJgorICAgICAgICAgZ2V0X2wzX2xpbmVhcl9w YWdldGFibGUobDNlLCBwZm4sIGQpICkKKyAgICAgICAgcmMgPSAwOworCisgICAgcmV0dXJuIHJj OworfQorCisvKgorICogZ2V0X3BhZ2VfZnJvbV9sNGUgcmV0dXJuczoKKyAqICAgMSA9PiBwYWdl IG5vdCBwcmVzZW50CisgKiAgIDAgPT4gc3VjY2VzcworICogIDwwID0+IGVycm9yIGNvZGUKKyAq LworZGVmaW5lX2dldF9saW5lYXJfcGFnZXRhYmxlKGw0KTsKK2ludCBnZXRfcGFnZV9mcm9tX2w0 ZShsNF9wZ2VudHJ5X3QgbDRlLCB1bnNpZ25lZCBsb25nIHBmbiwgc3RydWN0IGRvbWFpbiAqZCwK KyAgICAgICAgICAgICAgICAgICAgICBpbnQgcGFydGlhbCkKK3sKKyAgICBpbnQgcmM7CisKKyAg ICBpZiAoICEobDRlX2dldF9mbGFncyhsNGUpICYgX1BBR0VfUFJFU0VOVCkgKQorICAgICAgICBy ZXR1cm4gMTsKKworICAgIGlmICggdW5saWtlbHkoKGw0ZV9nZXRfZmxhZ3MobDRlKSAmIEw0X0RJ U0FMTE9XX01BU0spKSApCisgICAgeworICAgICAgICBnZHByaW50ayhYRU5MT0dfV0FSTklORywg IkJhZCBMNCBmbGFncyAleFxuIiwKKyAgICAgICAgICAgICAgICAgbDRlX2dldF9mbGFncyhsNGUp ICYgTDRfRElTQUxMT1dfTUFTSyk7CisgICAgICAgIHJldHVybiAtRUlOVkFMOworICAgIH0KKwor ICAgIHJjID0gZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9tZm4oX21mbihsNGVfZ2V0X3BmbihsNGUp KSwgUEdUX2wzX3BhZ2VfdGFibGUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBkLCBwYXJ0aWFsLCB0cnVlKTsKKyAgICBpZiAoIHVubGlrZWx5KHJjID09IC1FSU5WQUwpICYm IGdldF9sNF9saW5lYXJfcGFnZXRhYmxlKGw0ZSwgcGZuLCBkKSApCisgICAgICAgIHJjID0gMDsK KworICAgIHJldHVybiByYzsKK30KKworLyoKKyAqIE5CLiBWaXJ0dWFsIGFkZHJlc3MgJ2wyZScg bWFwcyB0byBhIG1hY2hpbmUgYWRkcmVzcyB3aXRoaW4gZnJhbWUgJ3BmbicuCisgKiBOb3RlIGFs c28gdGhhdCB0aGlzIGF1dG9tYXRpY2FsbHkgZGVhbHMgY29ycmVjdGx5IHdpdGggbGluZWFyIHAu dC4ncy4KKyAqLworaW50IHB1dF9wYWdlX2Zyb21fbDJlKGwyX3BnZW50cnlfdCBsMmUsIHVuc2ln bmVkIGxvbmcgcGZuKQoreworICAgIGlmICggIShsMmVfZ2V0X2ZsYWdzKGwyZSkgJiBfUEFHRV9Q UkVTRU5UKSB8fCAobDJlX2dldF9wZm4obDJlKSA9PSBwZm4pICkKKyAgICAgICAgcmV0dXJuIDE7 CisKKyAgICBpZiAoIGwyZV9nZXRfZmxhZ3MobDJlKSAmIF9QQUdFX1BTRSApCisgICAgeworICAg ICAgICBzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlID0gbWZuX3RvX3BhZ2UobDJlX2dldF9wZm4obDJl KSk7CisgICAgICAgIHVuc2lnbmVkIGludCBpOworCisgICAgICAgIGZvciAoIGkgPSAwOyBpIDwg KDF1IDw8IFBBR0VUQUJMRV9PUkRFUik7IGkrKywgcGFnZSsrICkKKyAgICAgICAgICAgIHB1dF9w YWdlX2FuZF90eXBlKHBhZ2UpOworICAgIH0gZWxzZQorICAgICAgICBwdXRfcGFnZV9hbmRfdHlw ZShsMmVfZ2V0X3BhZ2UobDJlKSk7CisKKyAgICByZXR1cm4gMDsKK30KKworc3RhdGljIHZvaWQg cHV0X2RhdGFfcGFnZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCBib29sIHdyaXRlYWJsZSkKK3sK KyAgICBpZiAoIHdyaXRlYWJsZSApCisgICAgICAgIHB1dF9wYWdlX2FuZF90eXBlKHBhZ2UpOwor ICAgIGVsc2UKKyAgICAgICAgcHV0X3BhZ2UocGFnZSk7Cit9CisKK2ludCBwdXRfcGFnZV9mcm9t X2wzZShsM19wZ2VudHJ5X3QgbDNlLCB1bnNpZ25lZCBsb25nIHBmbiwgaW50IHBhcnRpYWwsCisg ICAgICAgICAgICAgICAgICAgICAgYm9vbCBkZWZlcikKK3sKKyAgICBzdHJ1Y3QgcGFnZV9pbmZv ICpwZzsKKworICAgIGlmICggIShsM2VfZ2V0X2ZsYWdzKGwzZSkgJiBfUEFHRV9QUkVTRU5UKSB8 fCAobDNlX2dldF9wZm4obDNlKSA9PSBwZm4pICkKKyAgICAgICAgcmV0dXJuIDE7CisKKyAgICBp ZiAoIHVubGlrZWx5KGwzZV9nZXRfZmxhZ3MobDNlKSAmIF9QQUdFX1BTRSkgKQorICAgIHsKKyAg ICAgICAgdW5zaWduZWQgbG9uZyBtZm4gPSBsM2VfZ2V0X3BmbihsM2UpOworICAgICAgICBpbnQg d3JpdGVhYmxlID0gbDNlX2dldF9mbGFncyhsM2UpICYgX1BBR0VfUlc7CisKKyAgICAgICAgQVNT RVJUKCEobWZuICYgKCgxVUwgPDwgKEwzX1BBR0VUQUJMRV9TSElGVCAtIFBBR0VfU0hJRlQpKSAt IDEpKSk7CisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIHB1dF9kYXRhX3BhZ2UobWZuX3RvX3Bh Z2UobWZuKSwgd3JpdGVhYmxlKTsKKyAgICAgICAgfSB3aGlsZSAoICsrbWZuICYgKCgxVUwgPDwg KEwzX1BBR0VUQUJMRV9TSElGVCAtIFBBR0VfU0hJRlQpKSAtIDEpICk7CisKKyAgICAgICAgcmV0 dXJuIDA7CisgICAgfQorCisgICAgcGcgPSBsM2VfZ2V0X3BhZ2UobDNlKTsKKworICAgIGlmICgg dW5saWtlbHkocGFydGlhbCA+IDApICkKKyAgICB7CisgICAgICAgIEFTU0VSVCghZGVmZXIpOwor ICAgICAgICByZXR1cm4gcHV0X3BhZ2VfdHlwZV9wcmVlbXB0aWJsZShwZyk7CisgICAgfQorCisg ICAgaWYgKCBkZWZlciApCisgICAgeworICAgICAgICBjdXJyZW50LT5hcmNoLm9sZF9ndWVzdF90 YWJsZSA9IHBnOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICByZXR1cm4gcHV0X3Bh Z2VfYW5kX3R5cGVfcHJlZW1wdGlibGUocGcpOworfQorCitpbnQgcHV0X3BhZ2VfZnJvbV9sNGUo bDRfcGdlbnRyeV90IGw0ZSwgdW5zaWduZWQgbG9uZyBwZm4sIGludCBwYXJ0aWFsLAorICAgICAg ICAgICAgICAgICAgICAgIGJvb2wgZGVmZXIpCit7CisgICAgaWYgKCAobDRlX2dldF9mbGFncyhs NGUpICYgX1BBR0VfUFJFU0VOVCkgJiYKKyAgICAgICAgIChsNGVfZ2V0X3BmbihsNGUpICE9IHBm bikgKQorICAgIHsKKyAgICAgICAgc3RydWN0IHBhZ2VfaW5mbyAqcGcgPSBsNGVfZ2V0X3BhZ2Uo bDRlKTsKKworICAgICAgICBpZiAoIHVubGlrZWx5KHBhcnRpYWwgPiAwKSApCisgICAgICAgIHsK KyAgICAgICAgICAgIEFTU0VSVCghZGVmZXIpOworICAgICAgICAgICAgcmV0dXJuIHB1dF9wYWdl X3R5cGVfcHJlZW1wdGlibGUocGcpOworICAgICAgICB9CisKKyAgICAgICAgaWYgKCBkZWZlciAp CisgICAgICAgIHsKKyAgICAgICAgICAgIGN1cnJlbnQtPmFyY2gub2xkX2d1ZXN0X3RhYmxlID0g cGc7CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgfQorCisgICAgICAgIHJldHVybiBw dXRfcGFnZV9hbmRfdHlwZV9wcmVlbXB0aWJsZShwZyk7CisgICAgfQorICAgIHJldHVybiAxOwor fQorCiAvKgogICogTG9jYWwgdmFyaWFibGVzOgogICogbW9kZTogQwpkaWZmIC0tZ2l0IGEveGVu L2luY2x1ZGUvYXNtLXg4Ni9tbS5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9tbS5oCmluZGV4IDc0 ODAzNDEyNDAuLjRlZWFmNzA5YzEgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvbW0u aAorKysgYi94ZW4vaW5jbHVkZS9hc20teDg2L21tLmgKQEAgLTM1OCwxNiArMzU4LDYgQEAgaW50 ICBwdXRfb2xkX2d1ZXN0X3RhYmxlKHN0cnVjdCB2Y3B1ICopOwogaW50ICBnZXRfcGFnZV9mcm9t X2wxZShsMV9wZ2VudHJ5X3QgbDFlLCBzdHJ1Y3QgZG9tYWluICpsMWVfb3duZXIsCiAgICAgICAg ICAgICAgICAgICAgICAgIHN0cnVjdCBkb21haW4gKnBnX293bmVyKTsKIHZvaWQgcHV0X3BhZ2Vf ZnJvbV9sMWUobDFfcGdlbnRyeV90IGwxZSwgc3RydWN0IGRvbWFpbiAqbDFlX293bmVyKTsKLWlu dCBnZXRfcGFnZV9mcm9tX2wyZShsMl9wZ2VudHJ5X3QgbDJlLCB1bnNpZ25lZCBsb25nIHBmbiwg c3RydWN0IGRvbWFpbiAqZCk7Ci1pbnQgcHV0X3BhZ2VfZnJvbV9sMmUobDJfcGdlbnRyeV90IGwy ZSwgdW5zaWduZWQgbG9uZyBwZm4pOwotaW50IGdldF9wYWdlX2Zyb21fbDNlKGwzX3BnZW50cnlf dCBsM2UsIHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgZG9tYWluICpkLAotICAgICAgICAgICAg ICAgICAgICAgIGludCBwYXJ0aWFsKTsKLWludCBwdXRfcGFnZV9mcm9tX2wzZShsM19wZ2VudHJ5 X3QgbDNlLCB1bnNpZ25lZCBsb25nIHBmbiwgaW50IHBhcnRpYWwsCi0gICAgICAgICAgICAgICAg ICAgICAgYm9vbCBkZWZlcik7Ci1pbnQgZ2V0X3BhZ2VfZnJvbV9sNGUobDRfcGdlbnRyeV90IGw0 ZSwgdW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBkb21haW4gKmQsCi0gICAgICAgICAgICAgICAg ICAgICAgaW50IHBhcnRpYWwpOwotaW50IHB1dF9wYWdlX2Zyb21fbDRlKGw0X3BnZW50cnlfdCBs NGUsIHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgcGFydGlhbCwKLSAgICAgICAgICAgICAgICAgICAg ICBib29sIGRlZmVyKTsKIHZvaWQgZ2V0X3BhZ2VfbGlnaHQoc3RydWN0IHBhZ2VfaW5mbyAqcGFn ZSk7CiBib29sIGdldF9wYWdlX2Zyb21fbWZuKG1mbl90IG1mbiwgc3RydWN0IGRvbWFpbiAqZCk7 CiBpbnQgZ2V0X3BhZ2VfYW5kX3R5cGVfZnJvbV9tZm4obWZuX3QgbWZuLCB1bnNpZ25lZCBsb25n IHR5cGUsIHN0cnVjdCBkb21haW4gKmQsCmRpZmYgLS1naXQgYS94ZW4vaW5jbHVkZS9hc20teDg2 L3B2L21tLmggYi94ZW4vaW5jbHVkZS9hc20teDg2L3B2L21tLmgKaW5kZXggMWUyODcxZmI1OC4u YWNhYjdiN2M0MiAxMDA2NDQKLS0tIGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9tbS5oCisrKyBi L3hlbi9pbmNsdWRlL2FzbS14ODYvcHYvbW0uaApAQCAtMTAyLDYgKzEwMiwxNyBAQCBpbnQgcHZf ZnJlZV9wYWdlX3R5cGUoc3RydWN0IHBhZ2VfaW5mbyAqcGFnZSwgdW5zaWduZWQgbG9uZyB0eXBl LAogCiB2b2lkIHB2X2ludmFsaWRhdGVfc2hhZG93X2xkdChzdHJ1Y3QgdmNwdSAqdiwgYm9vbCBm bHVzaCk7CiAKK2ludCBnZXRfcGFnZV9mcm9tX2wyZShsMl9wZ2VudHJ5X3QgbDJlLCB1bnNpZ25l ZCBsb25nIHBmbiwgc3RydWN0IGRvbWFpbiAqZCk7CitpbnQgcHV0X3BhZ2VfZnJvbV9sMmUobDJf cGdlbnRyeV90IGwyZSwgdW5zaWduZWQgbG9uZyBwZm4pOworaW50IGdldF9wYWdlX2Zyb21fbDNl KGwzX3BnZW50cnlfdCBsM2UsIHVuc2lnbmVkIGxvbmcgcGZuLCBzdHJ1Y3QgZG9tYWluICpkLAor ICAgICAgICAgICAgICAgICAgICAgIGludCBwYXJ0aWFsKTsKK2ludCBwdXRfcGFnZV9mcm9tX2wz ZShsM19wZ2VudHJ5X3QgbDNlLCB1bnNpZ25lZCBsb25nIHBmbiwgaW50IHBhcnRpYWwsCisgICAg ICAgICAgICAgICAgICAgICAgYm9vbCBkZWZlcik7CitpbnQgZ2V0X3BhZ2VfZnJvbV9sNGUobDRf cGdlbnRyeV90IGw0ZSwgdW5zaWduZWQgbG9uZyBwZm4sIHN0cnVjdCBkb21haW4gKmQsCisgICAg ICAgICAgICAgICAgICAgICAgaW50IHBhcnRpYWwpOworaW50IHB1dF9wYWdlX2Zyb21fbDRlKGw0 X3BnZW50cnlfdCBsNGUsIHVuc2lnbmVkIGxvbmcgcGZuLCBpbnQgcGFydGlhbCwKKyAgICAgICAg ICAgICAgICAgICAgICBib29sIGRlZmVyKTsKKwogI2Vsc2UKIAogI2luY2x1ZGUgPHhlbi9lcnJu by5oPgpAQCAtMTQzLDYgKzE1NCwyNCBAQCBzdGF0aWMgaW5saW5lIGludCBwdl9mcmVlX3BhZ2Vf dHlwZShzdHJ1Y3QgcGFnZV9pbmZvICpwYWdlLCB1bnNpZ25lZCBsb25nIHR5cGUsCiAKIHN0YXRp YyBpbmxpbmUgdm9pZCBwdl9pbnZhbGlkYXRlX3NoYWRvd19sZHQoc3RydWN0IHZjcHUgKnYsIGJv b2wgZmx1c2gpIHt9CiAKK3N0YXRpYyBpbmxpbmUgaW50IGdldF9wYWdlX2Zyb21fbDJlKGwyX3Bn ZW50cnlfdCBsMmUsIHVuc2lnbmVkIGxvbmcgcGZuLAorICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgc3RydWN0IGRvbWFpbiAqZCkKK3sgcmV0dXJuIC1FSU5WQUw7IH0KK3N0YXRp YyBpbmxpbmUgaW50IHB1dF9wYWdlX2Zyb21fbDJlKGwyX3BnZW50cnlfdCBsMmUsIHVuc2lnbmVk IGxvbmcgcGZuKQoreyByZXR1cm4gLUVJTlZBTDsgfQorc3RhdGljIGlubGluZSBpbnQgZ2V0X3Bh Z2VfZnJvbV9sM2UobDNfcGdlbnRyeV90IGwzZSwgdW5zaWduZWQgbG9uZyBwZm4sCisgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBzdHJ1Y3QgZG9tYWluICpkLCBpbnQgcGFydGlh bCkKK3sgcmV0dXJuIC1FSU5WQUw7IH0KK3N0YXRpYyBpbmxpbmUgaW50IHB1dF9wYWdlX2Zyb21f bDNlKGwzX3BnZW50cnlfdCBsM2UsIHVuc2lnbmVkIGxvbmcgcGZuLAorICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgaW50IHBhcnRpYWwsIGJvb2wgZGVmZXIpCit7IHJldHVybiAt RUlOVkFMOyB9CitzdGF0aWMgaW5saW5lIGludCBnZXRfcGFnZV9mcm9tX2w0ZShsNF9wZ2VudHJ5 X3QgbDRlLCB1bnNpZ25lZCBsb25nIHBmbiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIHN0cnVjdCBkb21haW4gKmQsIGludCBwYXJ0aWFsKQoreyByZXR1cm4gLUVJTlZBTDsg fQorc3RhdGljIGlubGluZSBpbnQgcHV0X3BhZ2VfZnJvbV9sNGUobDRfcGdlbnRyeV90IGw0ZSwg dW5zaWduZWQgbG9uZyBwZm4sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBp bnQgcGFydGlhbCwgYm9vbCBkZWZlcikKK3sgcmV0dXJuIC1FSU5WQUw7IH0KKwogI2VuZGlmCiAK ICNlbmRpZiAvKiBfX1g4Nl9QVl9NTV9IX18gKi8KLS0gCjIuMTEuMAoKCl9fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fClhlbi1kZXZlbCBtYWlsaW5nIGxpc3QK WGVuLWRldmVsQGxpc3RzLnhlbi5vcmcKaHR0cHM6Ly9saXN0cy54ZW4ub3JnL3hlbi1kZXZlbAo=