From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vitaly Kuznetsov Subject: [RFC PATCH KERNEL 3/4] x86/xen: put setup.c, mmu.c and p2m.c under CONFIG_XEN_PV Date: Mon, 14 Nov 2016 18:17:48 +0100 Message-ID: <1479143869-27611-4-git-send-email-vkuznets@redhat.com> References: <1479143869-27611-1-git-send-email-vkuznets@redhat.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.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c6KtN-0003tY-F1 for xen-devel@lists.xenproject.org; Mon, 14 Nov 2016 17:18:01 +0000 In-Reply-To: <1479143869-27611-1-git-send-email-vkuznets@redhat.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xen.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , Boris Ostrovsky , x86@kernel.org, Andrew Jones , David Vrabel List-Id: xen-devel@lists.xenproject.org VGhlc2UgdGhyZWUgZmlsZXMgKG1tdS5jLCBwMm0uYywgc2V0dXAuYykgYXJlIG1vc3RseSByZXF1 aXJlZCB0bwpzdXBwb3J0IFBWIGd1ZXN0cywgaW4gZmFjdCBwMm0uYyBhbmQgc2V0dXAuYyBoYXZl IG5vIGNvZGUgZm9yIFBWSFZNCmF0IGFsbC4gbW11LmMgaGFzIHNvbWUsIG1vdmUgaXQgdG8gbW11 X2NvbW1vbi5jIGFuZCBtbXVfaHZtLmMuCgpTb21lIGFkZGl0aW9uYWwgY2hhbmdlcyBhcmUgcmVx dWlyZWQ6Ci0gSW4gdGhlIGJhbGxvb24gZHJpdmVyIHdlIGNhbid0IHVzZSB4ZW5fc3RhcnRfaW5m bywgeGVuX3JlbGVhc2VkX3BhZ2VzCiAgYW5kIHhlbl9leHRyYV9tZW0gaXQgaXMgUFYtb25seS4g RGVjb3JhdGUgaXQgd2l0aCAjaWZkZWYgQ09ORklHX1hFTl9QVgoKLSBTb21lIFBWLW9ubHkgZnVu Y3Rpb25zIGFyZSB1c2VkIGJ5IGRyaXZlcnMgYW5kIGZvciBQVkhWTSBndWVzdHMgdGhlc2UKICBm dW5jdGlvbnMgaGF2ZSAnaWYgKHhlbl9mZWF0dXJlKFhFTkZFQVRfYXV0b190cmFuc2xhdGVkX3Bo eXNtYXApKScgY2hlY2sKICBpbiB0aGUgYmVnaW5uaW5nLiBDcmVhdGUgcmVxdWlyZWQgc3R1YnMg Zm9yIFBWSFZNLW9ubHkgYnVpbGRzLgoKU2lnbmVkLW9mZi1ieTogVml0YWx5IEt1em5ldHNvdiA8 dmt1em5ldHNAcmVkaGF0LmNvbT4KLS0tCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS94ZW4vcGFnZS5o IHwgIDQ0ICsrKysrKy0KIGFyY2gveDg2L3hlbi9NYWtlZmlsZSAgICAgICAgICAgfCAgMTAgKy0K IGFyY2gveDg2L3hlbi9tbXUuYyAgICAgICAgICAgICAgfCAyODQgLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLQogYXJjaC94ODYveGVuL21tdV9jb21tb24uYyAgICAgICB8 IDIxOSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrCiBhcmNoL3g4Ni94ZW4vbW11X2h2 bS5jICAgICAgICAgIHwgIDc3ICsrKysrKysrKysrCiBkcml2ZXJzL3hlbi9iYWxsb29uLmMgICAg ICAgICAgIHwgIDMwICsrKy0tCiBpbmNsdWRlL3hlbi94ZW4tb3BzLmggICAgICAgICAgIHwgIDEz ICsrCiA3IGZpbGVzIGNoYW5nZWQsIDM3NiBpbnNlcnRpb25zKCspLCAzMDEgZGVsZXRpb25zKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC94ODYveGVuL21tdV9jb21tb24uYwogY3JlYXRlIG1v ZGUgMTAwNjQ0IGFyY2gveDg2L3hlbi9tbXVfaHZtLmMKCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni9p bmNsdWRlL2FzbS94ZW4vcGFnZS5oIGIvYXJjaC94ODYvaW5jbHVkZS9hc20veGVuL3BhZ2UuaApp bmRleCBmNWZiODQwLi4zMjQ0ZWNmIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9pbmNsdWRlL2FzbS94 ZW4vcGFnZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3hlbi9wYWdlLmgKQEAgLTQzLDkg KzQzLDEwIEBAIGV4dGVybiB1bnNpZ25lZCBsb25nICp4ZW5fcDJtX2FkZHI7CiBleHRlcm4gdW5z aWduZWQgbG9uZyAgeGVuX3AybV9zaXplOwogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgIHhlbl9tYXhf cDJtX3BmbjsKIAotZXh0ZXJuIGludCB4ZW5fYWxsb2NfcDJtX2VudHJ5KHVuc2lnbmVkIGxvbmcg cGZuKTsKLQogZXh0ZXJuIHVuc2lnbmVkIGxvbmcgZ2V0X3BoeXNfdG9fbWFjaGluZSh1bnNpZ25l ZCBsb25nIHBmbik7CisKKyNpZmRlZiBDT05GSUdfWEVOX1BWCitleHRlcm4gaW50IHhlbl9hbGxv Y19wMm1fZW50cnkodW5zaWduZWQgbG9uZyBwZm4pOwogZXh0ZXJuIGJvb2wgc2V0X3BoeXNfdG9f bWFjaGluZSh1bnNpZ25lZCBsb25nIHBmbiwgdW5zaWduZWQgbG9uZyBtZm4pOwogZXh0ZXJuIGJv b2wgX19zZXRfcGh5c190b19tYWNoaW5lKHVuc2lnbmVkIGxvbmcgcGZuLCB1bnNpZ25lZCBsb25n IG1mbik7CiBleHRlcm4gdW5zaWduZWQgbG9uZyBfX2luaXQgc2V0X3BoeXNfcmFuZ2VfaWRlbnRp dHkodW5zaWduZWQgbG9uZyBwZm5fcywKQEAgLTU3LDYgKzU4LDM4IEBAIGV4dGVybiBpbnQgc2V0 X2ZvcmVpZ25fcDJtX21hcHBpbmcoc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmICptYXBfb3Bz LAogZXh0ZXJuIGludCBjbGVhcl9mb3JlaWduX3AybV9tYXBwaW5nKHN0cnVjdCBnbnR0YWJfdW5t YXBfZ3JhbnRfcmVmICp1bm1hcF9vcHMsCiAJCQkJICAgICBzdHJ1Y3QgZ250dGFiX3VubWFwX2dy YW50X3JlZiAqa3VubWFwX29wcywKIAkJCQkgICAgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2ln bmVkIGludCBjb3VudCk7CisjZWxzZSAvKiBDT05GSUdfWEVOX1BWICovCitzdGF0aWMgaW5saW5l IGludCB4ZW5fYWxsb2NfcDJtX2VudHJ5KHVuc2lnbmVkIGxvbmcgcGZuKQoreworCXJldHVybiAw OworfQorCitzdGF0aWMgaW5saW5lIGJvb2wgc2V0X3BoeXNfdG9fbWFjaGluZSh1bnNpZ25lZCBs b25nIHBmbiwgdW5zaWduZWQgbG9uZyBtZm4pCit7CisJcmV0dXJuIHRydWU7Cit9CisKK3N0YXRp YyBpbmxpbmUgYm9vbCBfX3NldF9waHlzX3RvX21hY2hpbmUodW5zaWduZWQgbG9uZyBwZm4sIHVu c2lnbmVkIGxvbmcgbWZuKQoreworCXJldHVybiB0cnVlOworfQorCitzdGF0aWMgaW5saW5lIGlu dAorc2V0X2ZvcmVpZ25fcDJtX21hcHBpbmcoc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmICpt YXBfb3BzLAorCQkJc3RydWN0IGdudHRhYl9tYXBfZ3JhbnRfcmVmICprbWFwX29wcywKKwkJCXN0 cnVjdCBwYWdlICoqcGFnZXMsIHVuc2lnbmVkIGludCBjb3VudCkKK3sKKwlyZXR1cm4gMDsKK30K Kworc3RhdGljIGlubGluZSBpbnQKK2NsZWFyX2ZvcmVpZ25fcDJtX21hcHBpbmcoc3RydWN0IGdu dHRhYl91bm1hcF9ncmFudF9yZWYgKnVubWFwX29wcywKKwkJCSAgc3RydWN0IGdudHRhYl91bm1h cF9ncmFudF9yZWYgKmt1bm1hcF9vcHMsCisJCQkgIHN0cnVjdCBwYWdlICoqcGFnZXMsIHVuc2ln bmVkIGludCBjb3VudCkKK3sKKwlyZXR1cm4gMDsKK30KKyNlbmRpZiAvKiBDT05GSUdfWEVOX1BW ICovCiAKIC8qCiAgKiBIZWxwZXIgZnVuY3Rpb25zIHRvIHdyaXRlIG9yIHJlYWQgdW5zaWduZWQg bG9uZyB2YWx1ZXMgdG8vZnJvbQpAQCAtODIsNiArMTE1LDcgQEAgc3RhdGljIGlubGluZSBpbnQg eGVuX3NhZmVfcmVhZF91bG9uZyh1bnNpZ25lZCBsb25nICphZGRyLCB1bnNpZ25lZCBsb25nICp2 YWwpCiAgKiAtIGdldF9waHlzX3RvX21hY2hpbmUoKSBpcyB0byBiZSBjYWxsZWQgYnkgX19wZm5f dG9fbWZuKCkgb25seSBpbiBzcGVjaWFsCiAgKiAgIGNhc2VzIG5lZWRpbmcgYW4gZXh0ZW5kZWQg aGFuZGxpbmcuCiAgKi8KKyNpZmRlZiBDT05GSUdfWEVOX1BWCiBzdGF0aWMgaW5saW5lIHVuc2ln bmVkIGxvbmcgX19wZm5fdG9fbWZuKHVuc2lnbmVkIGxvbmcgcGZuKQogewogCXVuc2lnbmVkIGxv bmcgbWZuOwpAQCAtOTgsNiArMTMyLDEyIEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBf X3Bmbl90b19tZm4odW5zaWduZWQgbG9uZyBwZm4pCiAKIAlyZXR1cm4gbWZuOwogfQorI2Vsc2UK K3N0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBfX3Bmbl90b19tZm4odW5zaWduZWQgbG9uZyBw Zm4pCit7CisJcmV0dXJuIHBmbjsKK30KKyNlbmRpZgogCiBzdGF0aWMgaW5saW5lIHVuc2lnbmVk IGxvbmcgcGZuX3RvX21mbih1bnNpZ25lZCBsb25nIHBmbikKIHsKZGlmZiAtLWdpdCBhL2FyY2gv eDg2L3hlbi9NYWtlZmlsZSBiL2FyY2gveDg2L3hlbi9NYWtlZmlsZQppbmRleCBhYTZjZDVlLi4x MjFhMzY4IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vTWFrZWZpbGUKKysrIGIvYXJjaC94ODYv eGVuL01ha2VmaWxlCkBAIC0xMCwxMyArMTAsMTMgQEAgbm9zdGFja3AgOj0gJChjYWxsIGNjLW9w dGlvbiwgLWZuby1zdGFjay1wcm90ZWN0b3IpCiBDRkxBR1NfZW5saWdodGVuLm8JCTo9ICQobm9z dGFja3ApCiBDRkxBR1NfbW11Lm8JCQk6PSAkKG5vc3RhY2twKQogCi1vYmoteQkJOj0gZW5saWdo dGVuX2NvbW1vbi5vIHNldHVwLm8gbXVsdGljYWxscy5vIFwKLQkJCW1tdS5vIGlycS5vIHRpbWUu byB4ZW4tYXNtLm8geGVuLWFzbV8kKEJJVFMpLm8gXAorb2JqLXkJCTo9IGVubGlnaHRlbl9jb21t b24ubyBtdWx0aWNhbGxzLm8gXAorCQkJaXJxLm8gdGltZS5vIHhlbi1hc20ubyB4ZW4tYXNtXyQo QklUUykubyBcCiAJCQlncmFudC10YWJsZS5vIHN1c3BlbmQubyBwbGF0Zm9ybS1wY2ktdW5wbHVn Lm8gXAotCQkJcDJtLm8gYXBpYy5vIHBtdS5vCisJCQlhcGljLm8gcG11Lm8gbW11X2NvbW1vbi5v CiAKLW9iai0kKENPTkZJR19YRU5fUFYpCQkrPSBlbmxpZ2h0ZW4ubwotb2JqLSQoQ09ORklHX1hF Tl9QVkhWTSkJCSs9IGVubGlnaHRlbl9odm0ubworb2JqLSQoQ09ORklHX1hFTl9QVikJCSs9IGVu bGlnaHRlbi5vIHNldHVwLm8gbW11Lm8gcDJtLm8KK29iai0kKENPTkZJR19YRU5fUFZIVk0pCQkr PSBlbmxpZ2h0ZW5faHZtLm8gbW11X2h2bS5vCiAKIG9iai0kKENPTkZJR19FVkVOVF9UUkFDSU5H KSArPSB0cmFjZS5vCiAKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9tbXUuYyBiL2FyY2gveDg2 L3hlbi9tbXUuYwppbmRleCA2NWUxODRiLi45NGIxODA2IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94 ZW4vbW11LmMKKysrIGIvYXJjaC94ODYveGVuL21tdS5jCkBAIC04MCwxMiArODAsNiBAQAogI2lu Y2x1ZGUgIm1tdS5oIgogI2luY2x1ZGUgImRlYnVnZnMuaCIKIAotLyoKLSAqIFByb3RlY3RzIGF0 b21pYyByZXNlcnZhdGlvbiBkZWNyZWFzZS9pbmNyZWFzZSBhZ2FpbnN0IGNvbmN1cnJlbnQgaW5j cmVhc2VzLgotICogQWxzbyBwcm90ZWN0cyBub24tYXRvbWljIHVwZGF0ZXMgb2YgY3VycmVudF9w YWdlcyBhbmQgYmFsbG9vbiBsaXN0cy4KLSAqLwotREVGSU5FX1NQSU5MT0NLKHhlbl9yZXNlcnZh dGlvbl9sb2NrKTsKLQogI2lmZGVmIENPTkZJR19YODZfMzIKIC8qCiAgKiBJZGVudGl0eSBtYXAs IGluIGFkZGl0aW9uIHRvIHBsYWluIGtlcm5lbCBtYXAuICBUaGlzIG5lZWRzIHRvIGJlCkBAIC0x MjUsMzYgKzExOSw2IEBAIHN0YXRpYyBwaHlzX2FkZHJfdCB4ZW5fcHRfYmFzZSwgeGVuX3B0X3Np emUgX19pbml0ZGF0YTsKICAqLwogI2RlZmluZSBVU0VSX0xJTUlUCSgoU1RBQ0tfVE9QX01BWCAr IFBHRElSX1NJWkUgLSAxKSAmIFBHRElSX01BU0spCiAKLXVuc2lnbmVkIGxvbmcgYXJiaXRyYXJ5 X3ZpcnRfdG9fbWZuKHZvaWQgKnZhZGRyKQotewotCXhtYWRkcl90IG1hZGRyID0gYXJiaXRyYXJ5 X3ZpcnRfdG9fbWFjaGluZSh2YWRkcik7Ci0KLQlyZXR1cm4gUEZOX0RPV04obWFkZHIubWFkZHIp OwotfQotCi14bWFkZHJfdCBhcmJpdHJhcnlfdmlydF90b19tYWNoaW5lKHZvaWQgKnZhZGRyKQot ewotCXVuc2lnbmVkIGxvbmcgYWRkcmVzcyA9ICh1bnNpZ25lZCBsb25nKXZhZGRyOwotCXVuc2ln bmVkIGludCBsZXZlbDsKLQlwdGVfdCAqcHRlOwotCXVuc2lnbmVkIG9mZnNldDsKLQotCS8qCi0J ICogaWYgdGhlIFBGTiBpcyBpbiB0aGUgbGluZWFyIG1hcHBlZCB2YWRkciByYW5nZSwgd2UgY2Fu IGp1c3QgdXNlCi0JICogdGhlIChxdWljaykgdmlydF90b19tYWNoaW5lKCkgcDJtIGxvb2t1cAot CSAqLwotCWlmICh2aXJ0X2FkZHJfdmFsaWQodmFkZHIpKQotCQlyZXR1cm4gdmlydF90b19tYWNo aW5lKHZhZGRyKTsKLQotCS8qIG90aGVyd2lzZSB3ZSBoYXZlIHRvIGRvIGEgKHNsb3dlcikgZnVs bCBwYWdlLXRhYmxlIHdhbGsgKi8KLQotCXB0ZSA9IGxvb2t1cF9hZGRyZXNzKGFkZHJlc3MsICZs ZXZlbCk7Ci0JQlVHX09OKHB0ZSA9PSBOVUxMKTsKLQlvZmZzZXQgPSBhZGRyZXNzICYgflBBR0Vf TUFTSzsKLQlyZXR1cm4gWE1BRERSKCgocGh5c19hZGRyX3QpcHRlX21mbigqcHRlKSA8PCBQQUdF X1NISUZUKSArIG9mZnNldCk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTChhcmJpdHJhcnlfdmlydF90 b19tYWNoaW5lKTsKLQogdm9pZCBtYWtlX2xvd21lbV9wYWdlX3JlYWRvbmx5KHZvaWQgKnZhZGRy KQogewogCXB0ZV90ICpwdGUsIHB0ZXY7CkBAIC0xMzE0LDI1ICsxMjc4LDYgQEAgdW5zaWduZWQg bG9uZyB4ZW5fcmVhZF9jcjJfZGlyZWN0KHZvaWQpCiAJcmV0dXJuIHRoaXNfY3B1X3JlYWQoeGVu X3ZjcHVfaW5mby5hcmNoLmNyMik7CiB9CiAKLXZvaWQgeGVuX2ZsdXNoX3RsYl9hbGwodm9pZCkK LXsKLQlzdHJ1Y3QgbW11ZXh0X29wICpvcDsKLQlzdHJ1Y3QgbXVsdGljYWxsX3NwYWNlIG1jczsK LQotCXRyYWNlX3hlbl9tbXVfZmx1c2hfdGxiX2FsbCgwKTsKLQotCXByZWVtcHRfZGlzYWJsZSgp OwotCi0JbWNzID0geGVuX21jX2VudHJ5KHNpemVvZigqb3ApKTsKLQotCW9wID0gbWNzLmFyZ3M7 Ci0Jb3AtPmNtZCA9IE1NVUVYVF9UTEJfRkxVU0hfQUxMOwotCU1VTFRJX21tdWV4dF9vcChtY3Mu bWMsIG9wLCAxLCBOVUxMLCBET01JRF9TRUxGKTsKLQotCXhlbl9tY19pc3N1ZShQQVJBVklSVF9M QVpZX01NVSk7Ci0KLQlwcmVlbXB0X2VuYWJsZSgpOwotfQogc3RhdGljIHZvaWQgeGVuX2ZsdXNo X3RsYih2b2lkKQogewogCXN0cnVjdCBtbXVleHRfb3AgKm9wOwpAQCAtMjY5NSwyMzIgKzI2NDAs MyBAQCB2b2lkIHhlbl9kZXN0cm95X2NvbnRpZ3VvdXNfcmVnaW9uKHBoeXNfYWRkcl90IHBzdGFy dCwgdW5zaWduZWQgaW50IG9yZGVyKQogCXNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhlbl9yZXNl cnZhdGlvbl9sb2NrLCBmbGFncyk7CiB9CiBFWFBPUlRfU1lNQk9MX0dQTCh4ZW5fZGVzdHJveV9j b250aWd1b3VzX3JlZ2lvbik7Ci0KLSNpZmRlZiBDT05GSUdfWEVOX1BWSFZNCi0jaWZkZWYgQ09O RklHX1BST0NfVk1DT1JFCi0vKgotICogVGhpcyBmdW5jdGlvbiBpcyB1c2VkIGluIHR3byBjb250 ZXh0czoKLSAqIC0gdGhlIGtkdW1wIGtlcm5lbCBoYXMgdG8gY2hlY2sgd2hldGhlciBhIHBmbiBv ZiB0aGUgY3Jhc2hlZCBrZXJuZWwKLSAqICAgd2FzIGEgYmFsbG9vbmVkIHBhZ2UuIHZtY29yZSBp cyB1c2luZyB0aGlzIGZ1bmN0aW9uIHRvIGRlY2lkZQotICogICB3aGV0aGVyIHRvIGFjY2VzcyBh IHBmbiBvZiB0aGUgY3Jhc2hlZCBrZXJuZWwuCi0gKiAtIHRoZSBrZXhlYyBrZXJuZWwgaGFzIHRv IGNoZWNrIHdoZXRoZXIgYSBwZm4gd2FzIGJhbGxvb25lZCBieSB0aGUKLSAqICAgcHJldmlvdXMg a2VybmVsLiBJZiB0aGUgcGZuIGlzIGJhbGxvb25lZCwgaGFuZGxlIGl0IHByb3Blcmx5LgotICog UmV0dXJucyAwIGlmIHRoZSBwZm4gaXMgbm90IGJhY2tlZCBieSBhIFJBTSBwYWdlLCB0aGUgY2Fs bGVyIG1heQotICogaGFuZGxlIHRoZSBwZm4gc3BlY2lhbCBpbiB0aGlzIGNhc2UuCi0gKi8KLXN0 YXRpYyBpbnQgeGVuX29sZG1lbV9wZm5faXNfcmFtKHVuc2lnbmVkIGxvbmcgcGZuKQotewotCXN0 cnVjdCB4ZW5faHZtX2dldF9tZW1fdHlwZSBhID0gewotCQkuZG9taWQgPSBET01JRF9TRUxGLAot CQkucGZuID0gcGZuLAotCX07Ci0JaW50IHJhbTsKLQotCWlmIChIWVBFUlZJU09SX2h2bV9vcChI Vk1PUF9nZXRfbWVtX3R5cGUsICZhKSkKLQkJcmV0dXJuIC1FTlhJTzsKLQotCXN3aXRjaCAoYS5t ZW1fdHlwZSkgewotCQljYXNlIEhWTU1FTV9tbWlvX2RtOgotCQkJcmFtID0gMDsKLQkJCWJyZWFr OwotCQljYXNlIEhWTU1FTV9yYW1fcnc6Ci0JCWNhc2UgSFZNTUVNX3JhbV9ybzoKLQkJZGVmYXVs dDoKLQkJCXJhbSA9IDE7Ci0JCQlicmVhazsKLQl9Ci0KLQlyZXR1cm4gcmFtOwotfQotI2VuZGlm Ci0KLXN0YXRpYyB2b2lkIHhlbl9odm1fZXhpdF9tbWFwKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tKQot ewotCXN0cnVjdCB4ZW5faHZtX3BhZ2V0YWJsZV9keWluZyBhOwotCWludCByYzsKLQotCWEuZG9t aWQgPSBET01JRF9TRUxGOwotCWEuZ3BhID0gX19wYShtbS0+cGdkKTsKLQlyYyA9IEhZUEVSVklT T1JfaHZtX29wKEhWTU9QX3BhZ2V0YWJsZV9keWluZywgJmEpOwotCVdBUk5fT05fT05DRShyYyA8 IDApOwotfQotCi1zdGF0aWMgaW50IGlzX3BhZ2V0YWJsZV9keWluZ19zdXBwb3J0ZWQodm9pZCkK LXsKLQlzdHJ1Y3QgeGVuX2h2bV9wYWdldGFibGVfZHlpbmcgYTsKLQlpbnQgcmMgPSAwOwotCi0J YS5kb21pZCA9IERPTUlEX1NFTEY7Ci0JYS5ncGEgPSAweDAwOwotCXJjID0gSFlQRVJWSVNPUl9o dm1fb3AoSFZNT1BfcGFnZXRhYmxlX2R5aW5nLCAmYSk7Ci0JaWYgKHJjIDwgMCkgewotCQlwcmlu dGsoS0VSTl9ERUJVRyAiSFZNT1BfcGFnZXRhYmxlX2R5aW5nIG5vdCBzdXBwb3J0ZWRcbiIpOwot CQlyZXR1cm4gMDsKLQl9Ci0JcmV0dXJuIDE7Ci19Ci0KLXZvaWQgX19pbml0IHhlbl9odm1faW5p dF9tbXVfb3BzKHZvaWQpCi17Ci0JaWYgKGlzX3BhZ2V0YWJsZV9keWluZ19zdXBwb3J0ZWQoKSkK LQkJcHZfbW11X29wcy5leGl0X21tYXAgPSB4ZW5faHZtX2V4aXRfbW1hcDsKLSNpZmRlZiBDT05G SUdfUFJPQ19WTUNPUkUKLQlyZWdpc3Rlcl9vbGRtZW1fcGZuX2lzX3JhbSgmeGVuX29sZG1lbV9w Zm5faXNfcmFtKTsKLSNlbmRpZgotfQotI2VuZGlmCi0KLSNkZWZpbmUgUkVNQVBfQkFUQ0hfU0la RSAxNgotCi1zdHJ1Y3QgcmVtYXBfZGF0YSB7Ci0JeGVuX3Bmbl90ICptZm47Ci0JYm9vbCBjb250 aWd1b3VzOwotCXBncHJvdF90IHByb3Q7Ci0Jc3RydWN0IG1tdV91cGRhdGUgKm1tdV91cGRhdGU7 Ci19OwotCi1zdGF0aWMgaW50IHJlbWFwX2FyZWFfbWZuX3B0ZV9mbihwdGVfdCAqcHRlcCwgcGd0 YWJsZV90IHRva2VuLAotCQkJCSB1bnNpZ25lZCBsb25nIGFkZHIsIHZvaWQgKmRhdGEpCi17Ci0J c3RydWN0IHJlbWFwX2RhdGEgKnJtZCA9IGRhdGE7Ci0JcHRlX3QgcHRlID0gcHRlX21rc3BlY2lh bChtZm5fcHRlKCpybWQtPm1mbiwgcm1kLT5wcm90KSk7Ci0KLQkvKiBJZiB3ZSBoYXZlIGEgY29u dGlndW91cyByYW5nZSwganVzdCB1cGRhdGUgdGhlIG1mbiBpdHNlbGYsCi0JICAgZWxzZSB1cGRh dGUgcG9pbnRlciB0byBiZSAibmV4dCBtZm4iLiAqLwotCWlmIChybWQtPmNvbnRpZ3VvdXMpCi0J CSgqcm1kLT5tZm4pKys7Ci0JZWxzZQotCQlybWQtPm1mbisrOwotCi0Jcm1kLT5tbXVfdXBkYXRl LT5wdHIgPSB2aXJ0X3RvX21hY2hpbmUocHRlcCkubWFkZHI7Ci0Jcm1kLT5tbXVfdXBkYXRlLT52 YWwgPSBwdGVfdmFsX21hKHB0ZSk7Ci0Jcm1kLT5tbXVfdXBkYXRlKys7Ci0KLQlyZXR1cm4gMDsK LX0KLQotc3RhdGljIGludCBkb19yZW1hcF9nZm4oc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEs Ci0JCQl1bnNpZ25lZCBsb25nIGFkZHIsCi0JCQl4ZW5fcGZuX3QgKmdmbiwgaW50IG5yLAotCQkJ aW50ICplcnJfcHRyLCBwZ3Byb3RfdCBwcm90LAotCQkJdW5zaWduZWQgZG9taWQsCi0JCQlzdHJ1 Y3QgcGFnZSAqKnBhZ2VzKQotewotCWludCBlcnIgPSAwOwotCXN0cnVjdCByZW1hcF9kYXRhIHJt ZDsKLQlzdHJ1Y3QgbW11X3VwZGF0ZSBtbXVfdXBkYXRlW1JFTUFQX0JBVENIX1NJWkVdOwotCXVu c2lnbmVkIGxvbmcgcmFuZ2U7Ci0JaW50IG1hcHBlZCA9IDA7Ci0KLQlCVUdfT04oISgodm1hLT52 bV9mbGFncyAmIChWTV9QRk5NQVAgfCBWTV9JTykpID09IChWTV9QRk5NQVAgfCBWTV9JTykpKTsK LQotCWlmICh4ZW5fZmVhdHVyZShYRU5GRUFUX2F1dG9fdHJhbnNsYXRlZF9waHlzbWFwKSkgewot I2lmZGVmIENPTkZJR19YRU5fUFZICi0JCS8qIFdlIG5lZWQgdG8gdXBkYXRlIHRoZSBsb2NhbCBw YWdlIHRhYmxlcyBhbmQgdGhlIHhlbiBIQVAgKi8KLQkJcmV0dXJuIHhlbl94bGF0ZV9yZW1hcF9n Zm5fYXJyYXkodm1hLCBhZGRyLCBnZm4sIG5yLCBlcnJfcHRyLAotCQkJCQkJIHByb3QsIGRvbWlk LCBwYWdlcyk7Ci0jZWxzZQotCQlyZXR1cm4gLUVJTlZBTDsKLSNlbmRpZgotICAgICAgICB9Ci0K LQlybWQubWZuID0gZ2ZuOwotCXJtZC5wcm90ID0gcHJvdDsKLQkvKiBXZSB1c2UgdGhlIGVycl9w dHIgdG8gaW5kaWNhdGUgaWYgdGhlcmUgd2UgYXJlIGRvaW5nIGEgY29udGlndW91cwotCSAqIG1h cHBpbmcgb3IgYSBkaXNjb250aWdpb3VzIG1hcHBpbmcuICovCi0Jcm1kLmNvbnRpZ3VvdXMgPSAh ZXJyX3B0cjsKLQotCXdoaWxlIChucikgewotCQlpbnQgaW5kZXggPSAwOwotCQlpbnQgZG9uZSA9 IDA7Ci0JCWludCBiYXRjaCA9IG1pbihSRU1BUF9CQVRDSF9TSVpFLCBucik7Ci0JCWludCBiYXRj aF9sZWZ0ID0gYmF0Y2g7Ci0JCXJhbmdlID0gKHVuc2lnbmVkIGxvbmcpYmF0Y2ggPDwgUEFHRV9T SElGVDsKLQotCQlybWQubW11X3VwZGF0ZSA9IG1tdV91cGRhdGU7Ci0JCWVyciA9IGFwcGx5X3Rv X3BhZ2VfcmFuZ2Uodm1hLT52bV9tbSwgYWRkciwgcmFuZ2UsCi0JCQkJCSAgcmVtYXBfYXJlYV9t Zm5fcHRlX2ZuLCAmcm1kKTsKLQkJaWYgKGVycikKLQkJCWdvdG8gb3V0OwotCi0JCS8qIFdlIHJl Y29yZCB0aGUgZXJyb3IgZm9yIGVhY2ggcGFnZSB0aGF0IGdpdmVzIGFuIGVycm9yLCBidXQKLQkJ ICogY29udGludWUgbWFwcGluZyB1bnRpbCB0aGUgd2hvbGUgc2V0IGlzIGRvbmUgKi8KLQkJZG8g ewotCQkJaW50IGk7Ci0KLQkJCWVyciA9IEhZUEVSVklTT1JfbW11X3VwZGF0ZSgmbW11X3VwZGF0 ZVtpbmRleF0sCi0JCQkJCQkgICAgYmF0Y2hfbGVmdCwgJmRvbmUsIGRvbWlkKTsKLQotCQkJLyoK LQkJCSAqIEBlcnJfcHRyIG1heSBiZSB0aGUgc2FtZSBidWZmZXIgYXMgQGdmbiwgc28KLQkJCSAq IG9ubHkgY2xlYXIgaXQgYWZ0ZXIgZWFjaCBjaHVuayBvZiBAZ2ZuIGlzCi0JCQkgKiB1c2VkLgot CQkJICovCi0JCQlpZiAoZXJyX3B0cikgewotCQkJCWZvciAoaSA9IGluZGV4OyBpIDwgaW5kZXgg KyBkb25lOyBpKyspCi0JCQkJCWVycl9wdHJbaV0gPSAwOwotCQkJfQotCQkJaWYgKGVyciA8IDAp IHsKLQkJCQlpZiAoIWVycl9wdHIpCi0JCQkJCWdvdG8gb3V0OwotCQkJCWVycl9wdHJbaV0gPSBl cnI7Ci0JCQkJZG9uZSsrOyAvKiBTa2lwIGZhaWxlZCBmcmFtZS4gKi8KLQkJCX0gZWxzZQotCQkJ CW1hcHBlZCArPSBkb25lOwotCQkJYmF0Y2hfbGVmdCAtPSBkb25lOwotCQkJaW5kZXggKz0gZG9u ZTsKLQkJfSB3aGlsZSAoYmF0Y2hfbGVmdCk7Ci0KLQkJbnIgLT0gYmF0Y2g7Ci0JCWFkZHIgKz0g cmFuZ2U7Ci0JCWlmIChlcnJfcHRyKQotCQkJZXJyX3B0ciArPSBiYXRjaDsKLQkJY29uZF9yZXNj aGVkKCk7Ci0JfQotb3V0OgotCi0JeGVuX2ZsdXNoX3RsYl9hbGwoKTsKLQotCXJldHVybiBlcnIg PCAwID8gZXJyIDogbWFwcGVkOwotfQotCi1pbnQgeGVuX3JlbWFwX2RvbWFpbl9nZm5fcmFuZ2Uo c3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRy LAotCQkJICAgICAgIHhlbl9wZm5fdCBnZm4sIGludCBuciwKLQkJCSAgICAgICBwZ3Byb3RfdCBw cm90LCB1bnNpZ25lZCBkb21pZCwKLQkJCSAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQotewot CXJldHVybiBkb19yZW1hcF9nZm4odm1hLCBhZGRyLCAmZ2ZuLCBuciwgTlVMTCwgcHJvdCwgZG9t aWQsIHBhZ2VzKTsKLX0KLUVYUE9SVF9TWU1CT0xfR1BMKHhlbl9yZW1hcF9kb21haW5fZ2ZuX3Jh bmdlKTsKLQotaW50IHhlbl9yZW1hcF9kb21haW5fZ2ZuX2FycmF5KHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hLAotCQkJICAgICAgIHVuc2lnbmVkIGxvbmcgYWRkciwKLQkJCSAgICAgICB4ZW5f cGZuX3QgKmdmbiwgaW50IG5yLAotCQkJICAgICAgIGludCAqZXJyX3B0ciwgcGdwcm90X3QgcHJv dCwKLQkJCSAgICAgICB1bnNpZ25lZCBkb21pZCwgc3RydWN0IHBhZ2UgKipwYWdlcykKLXsKLQkv KiBXZSBCVUdfT04gYmVjYXVzZSBpdCdzIGEgcHJvZ3JhbW1lciBlcnJvciB0byBwYXNzIGEgTlVM TCBlcnJfcHRyLAotCSAqIGFuZCB0aGUgY29uc2VxdWVuY2VzIGxhdGVyIGlzIHF1aXRlIGhhcmQg dG8gZGV0ZWN0IHdoYXQgdGhlIGFjdHVhbAotCSAqIGNhdXNlIG9mICJ3cm9uZyBtZW1vcnkgd2Fz IG1hcHBlZCBpbiIuCi0JICovCi0JQlVHX09OKGVycl9wdHIgPT0gTlVMTCk7Ci0JcmV0dXJuIGRv X3JlbWFwX2dmbih2bWEsIGFkZHIsIGdmbiwgbnIsIGVycl9wdHIsIHByb3QsIGRvbWlkLCBwYWdl cyk7Ci19Ci1FWFBPUlRfU1lNQk9MX0dQTCh4ZW5fcmVtYXBfZG9tYWluX2dmbl9hcnJheSk7Ci0K LQotLyogUmV0dXJuczogMCBzdWNjZXNzICovCi1pbnQgeGVuX3VubWFwX2RvbWFpbl9nZm5fcmFu Z2Uoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEsCi0JCQkgICAgICAgaW50IG51bXBncywgc3Ry dWN0IHBhZ2UgKipwYWdlcykKLXsKLQlpZiAoIXBhZ2VzIHx8ICF4ZW5fZmVhdHVyZShYRU5GRUFU X2F1dG9fdHJhbnNsYXRlZF9waHlzbWFwKSkKLQkJcmV0dXJuIDA7Ci0KLSNpZmRlZiBDT05GSUdf WEVOX1BWSAotCXJldHVybiB4ZW5feGxhdGVfdW5tYXBfZ2ZuX3JhbmdlKHZtYSwgbnVtcGdzLCBw YWdlcyk7Ci0jZWxzZQotCXJldHVybiAtRUlOVkFMOwotI2VuZGlmCi19Ci1FWFBPUlRfU1lNQk9M X0dQTCh4ZW5fdW5tYXBfZG9tYWluX2dmbl9yYW5nZSk7CmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94 ZW4vbW11X2NvbW1vbi5jIGIvYXJjaC94ODYveGVuL21tdV9jb21tb24uYwpuZXcgZmlsZSBtb2Rl IDEwMDY0NAppbmRleCAwMDAwMDAwLi5kMTM0Y2Q5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94 ODYveGVuL21tdV9jb21tb24uYwpAQCAtMCwwICsxLDIxOSBAQAorI2luY2x1ZGUgPGxpbnV4L3Bm bi5oPgorCisjaW5jbHVkZSA8YXNtL3hlbi9wYWdlLmg+CisjaW5jbHVkZSA8YXNtL3hlbi9oeXBl cmNhbGwuaD4KKworI2luY2x1ZGUgPHhlbi9pbnRlcmZhY2UvbWVtb3J5Lmg+CisKKyNpbmNsdWRl ICJtdWx0aWNhbGxzLmgiCisjaW5jbHVkZSAibW11LmgiCisKKy8qCisgKiBQcm90ZWN0cyBhdG9t aWMgcmVzZXJ2YXRpb24gZGVjcmVhc2UvaW5jcmVhc2UgYWdhaW5zdCBjb25jdXJyZW50IGluY3Jl YXNlcy4KKyAqIEFsc28gcHJvdGVjdHMgbm9uLWF0b21pYyB1cGRhdGVzIG9mIGN1cnJlbnRfcGFn ZXMgYW5kIGJhbGxvb24gbGlzdHMuCisgKi8KK0RFRklORV9TUElOTE9DSyh4ZW5fcmVzZXJ2YXRp b25fbG9jayk7CisKKyNkZWZpbmUgUkVNQVBfQkFUQ0hfU0laRSAxNgorCitzdHJ1Y3QgcmVtYXBf ZGF0YSB7CisJeGVuX3Bmbl90ICptZm47CisJYm9vbCBjb250aWd1b3VzOworCXBncHJvdF90IHBy b3Q7CisJc3RydWN0IG1tdV91cGRhdGUgKm1tdV91cGRhdGU7Cit9OworCit2b2lkIHhlbl9mbHVz aF90bGJfYWxsKHZvaWQpCit7CisJc3RydWN0IG1tdWV4dF9vcCAqb3A7CisJc3RydWN0IG11bHRp Y2FsbF9zcGFjZSBtY3M7CisKKwl0cmFjZV94ZW5fbW11X2ZsdXNoX3RsYl9hbGwoMCk7CisKKwlw cmVlbXB0X2Rpc2FibGUoKTsKKworCW1jcyA9IHhlbl9tY19lbnRyeShzaXplb2YoKm9wKSk7CisK KwlvcCA9IG1jcy5hcmdzOworCW9wLT5jbWQgPSBNTVVFWFRfVExCX0ZMVVNIX0FMTDsKKwlNVUxU SV9tbXVleHRfb3AobWNzLm1jLCBvcCwgMSwgTlVMTCwgRE9NSURfU0VMRik7CisKKwl4ZW5fbWNf aXNzdWUoUEFSQVZJUlRfTEFaWV9NTVUpOworCisJcHJlZW1wdF9lbmFibGUoKTsKK30KKworc3Rh dGljIGludCByZW1hcF9hcmVhX21mbl9wdGVfZm4ocHRlX3QgKnB0ZXAsIHBndGFibGVfdCB0b2tl biwKKwkJCQkgdW5zaWduZWQgbG9uZyBhZGRyLCB2b2lkICpkYXRhKQoreworCXN0cnVjdCByZW1h cF9kYXRhICpybWQgPSBkYXRhOworCXB0ZV90IHB0ZSA9IHB0ZV9ta3NwZWNpYWwobWZuX3B0ZSgq cm1kLT5tZm4sIHJtZC0+cHJvdCkpOworCisJLyogSWYgd2UgaGF2ZSBhIGNvbnRpZ3VvdXMgcmFu Z2UsIGp1c3QgdXBkYXRlIHRoZSBtZm4gaXRzZWxmLAorCSAgIGVsc2UgdXBkYXRlIHBvaW50ZXIg dG8gYmUgIm5leHQgbWZuIi4gKi8KKwlpZiAocm1kLT5jb250aWd1b3VzKQorCQkoKnJtZC0+bWZu KSsrOworCWVsc2UKKwkJcm1kLT5tZm4rKzsKKworCXJtZC0+bW11X3VwZGF0ZS0+cHRyID0gdmly dF90b19tYWNoaW5lKHB0ZXApLm1hZGRyOworCXJtZC0+bW11X3VwZGF0ZS0+dmFsID0gcHRlX3Zh bF9tYShwdGUpOworCXJtZC0+bW11X3VwZGF0ZSsrOworCisJcmV0dXJuIDA7Cit9CisKK3N0YXRp YyBpbnQgZG9fcmVtYXBfZ2ZuKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJdW5zaWdu ZWQgbG9uZyBhZGRyLAorCQkJeGVuX3Bmbl90ICpnZm4sIGludCBuciwKKwkJCWludCAqZXJyX3B0 ciwgcGdwcm90X3QgcHJvdCwKKwkJCXVuc2lnbmVkIGRvbWlkLAorCQkJc3RydWN0IHBhZ2UgKipw YWdlcykKK3sKKwlpbnQgZXJyID0gMDsKKwlzdHJ1Y3QgcmVtYXBfZGF0YSBybWQ7CisJc3RydWN0 IG1tdV91cGRhdGUgbW11X3VwZGF0ZVtSRU1BUF9CQVRDSF9TSVpFXTsKKwl1bnNpZ25lZCBsb25n IHJhbmdlOworCWludCBtYXBwZWQgPSAwOworCisJQlVHX09OKCEoKHZtYS0+dm1fZmxhZ3MgJiAo Vk1fUEZOTUFQIHwgVk1fSU8pKSA9PSAoVk1fUEZOTUFQIHwgVk1fSU8pKSk7CisKKwlpZiAoeGVu X2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5c21hcCkpIHsKKyNpZmRlZiBDT05G SUdfWEVOX1BWSAorCQkvKiBXZSBuZWVkIHRvIHVwZGF0ZSB0aGUgbG9jYWwgcGFnZSB0YWJsZXMg YW5kIHRoZSB4ZW4gSEFQICovCisJCXJldHVybiB4ZW5feGxhdGVfcmVtYXBfZ2ZuX2FycmF5KHZt YSwgYWRkciwgZ2ZuLCBuciwgZXJyX3B0ciwKKwkJCQkJCSBwcm90LCBkb21pZCwgcGFnZXMpOwor I2Vsc2UKKwkJcmV0dXJuIC1FSU5WQUw7CisjZW5kaWYKKwl9CisKKwlybWQubWZuID0gZ2ZuOwor CXJtZC5wcm90ID0gcHJvdDsKKwkvKiBXZSB1c2UgdGhlIGVycl9wdHIgdG8gaW5kaWNhdGUgaWYg dGhlcmUgd2UgYXJlIGRvaW5nIGEgY29udGlndW91cworCSAqIG1hcHBpbmcgb3IgYSBkaXNjb250 aWdpb3VzIG1hcHBpbmcuICovCisJcm1kLmNvbnRpZ3VvdXMgPSAhZXJyX3B0cjsKKworCXdoaWxl IChucikgeworCQlpbnQgaW5kZXggPSAwOworCQlpbnQgZG9uZSA9IDA7CisJCWludCBiYXRjaCA9 IG1pbihSRU1BUF9CQVRDSF9TSVpFLCBucik7CisJCWludCBiYXRjaF9sZWZ0ID0gYmF0Y2g7CisJ CXJhbmdlID0gKHVuc2lnbmVkIGxvbmcpYmF0Y2ggPDwgUEFHRV9TSElGVDsKKworCQlybWQubW11 X3VwZGF0ZSA9IG1tdV91cGRhdGU7CisJCWVyciA9IGFwcGx5X3RvX3BhZ2VfcmFuZ2Uodm1hLT52 bV9tbSwgYWRkciwgcmFuZ2UsCisJCQkJCSAgcmVtYXBfYXJlYV9tZm5fcHRlX2ZuLCAmcm1kKTsK KwkJaWYgKGVycikKKwkJCWdvdG8gb3V0OworCisJCS8qIFdlIHJlY29yZCB0aGUgZXJyb3IgZm9y IGVhY2ggcGFnZSB0aGF0IGdpdmVzIGFuIGVycm9yLCBidXQKKwkJICogY29udGludWUgbWFwcGlu ZyB1bnRpbCB0aGUgd2hvbGUgc2V0IGlzIGRvbmUgKi8KKwkJZG8geworCQkJaW50IGk7CisKKwkJ CWVyciA9IEhZUEVSVklTT1JfbW11X3VwZGF0ZSgmbW11X3VwZGF0ZVtpbmRleF0sCisJCQkJCQkg ICAgYmF0Y2hfbGVmdCwgJmRvbmUsIGRvbWlkKTsKKworCQkJLyoKKwkJCSAqIEBlcnJfcHRyIG1h eSBiZSB0aGUgc2FtZSBidWZmZXIgYXMgQGdmbiwgc28KKwkJCSAqIG9ubHkgY2xlYXIgaXQgYWZ0 ZXIgZWFjaCBjaHVuayBvZiBAZ2ZuIGlzCisJCQkgKiB1c2VkLgorCQkJICovCisJCQlpZiAoZXJy X3B0cikgeworCQkJCWZvciAoaSA9IGluZGV4OyBpIDwgaW5kZXggKyBkb25lOyBpKyspCisJCQkJ CWVycl9wdHJbaV0gPSAwOworCQkJfQorCQkJaWYgKGVyciA8IDApIHsKKwkJCQlpZiAoIWVycl9w dHIpCisJCQkJCWdvdG8gb3V0OworCQkJCWVycl9wdHJbaV0gPSBlcnI7CisJCQkJZG9uZSsrOyAv KiBTa2lwIGZhaWxlZCBmcmFtZS4gKi8KKwkJCX0gZWxzZQorCQkJCW1hcHBlZCArPSBkb25lOwor CQkJYmF0Y2hfbGVmdCAtPSBkb25lOworCQkJaW5kZXggKz0gZG9uZTsKKwkJfSB3aGlsZSAoYmF0 Y2hfbGVmdCk7CisKKwkJbnIgLT0gYmF0Y2g7CisJCWFkZHIgKz0gcmFuZ2U7CisJCWlmIChlcnJf cHRyKQorCQkJZXJyX3B0ciArPSBiYXRjaDsKKwkJY29uZF9yZXNjaGVkKCk7CisJfQorb3V0Ogor CisJeGVuX2ZsdXNoX3RsYl9hbGwoKTsKKworCXJldHVybiBlcnIgPCAwID8gZXJyIDogbWFwcGVk OworfQorCitpbnQgeGVuX3JlbWFwX2RvbWFpbl9nZm5fcmFuZ2Uoc3RydWN0IHZtX2FyZWFfc3Ry dWN0ICp2bWEsCisJCQkgICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLAorCQkJICAgICAgIHhlbl9w Zm5fdCBnZm4sIGludCBuciwKKwkJCSAgICAgICBwZ3Byb3RfdCBwcm90LCB1bnNpZ25lZCBkb21p ZCwKKwkJCSAgICAgICBzdHJ1Y3QgcGFnZSAqKnBhZ2VzKQoreworCXJldHVybiBkb19yZW1hcF9n Zm4odm1hLCBhZGRyLCAmZ2ZuLCBuciwgTlVMTCwgcHJvdCwgZG9taWQsIHBhZ2VzKTsKK30KK0VY UE9SVF9TWU1CT0xfR1BMKHhlbl9yZW1hcF9kb21haW5fZ2ZuX3JhbmdlKTsKKworaW50IHhlbl9y ZW1hcF9kb21haW5fZ2ZuX2FycmF5KHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAorCQkJICAg ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwKKwkJCSAgICAgICB4ZW5fcGZuX3QgKmdmbiwgaW50IG5y LAorCQkJICAgICAgIGludCAqZXJyX3B0ciwgcGdwcm90X3QgcHJvdCwKKwkJCSAgICAgICB1bnNp Z25lZCBkb21pZCwgc3RydWN0IHBhZ2UgKipwYWdlcykKK3sKKwkvKiBXZSBCVUdfT04gYmVjYXVz ZSBpdCdzIGEgcHJvZ3JhbW1lciBlcnJvciB0byBwYXNzIGEgTlVMTCBlcnJfcHRyLAorCSAqIGFu ZCB0aGUgY29uc2VxdWVuY2VzIGxhdGVyIGlzIHF1aXRlIGhhcmQgdG8gZGV0ZWN0IHdoYXQgdGhl IGFjdHVhbAorCSAqIGNhdXNlIG9mICJ3cm9uZyBtZW1vcnkgd2FzIG1hcHBlZCBpbiIuCisJICov CisJQlVHX09OKGVycl9wdHIgPT0gTlVMTCk7CisJcmV0dXJuIGRvX3JlbWFwX2dmbih2bWEsIGFk ZHIsIGdmbiwgbnIsIGVycl9wdHIsIHByb3QsIGRvbWlkLCBwYWdlcyk7Cit9CitFWFBPUlRfU1lN Qk9MX0dQTCh4ZW5fcmVtYXBfZG9tYWluX2dmbl9hcnJheSk7CisKKy8qIFJldHVybnM6IDAgc3Vj Y2VzcyAqLworaW50IHhlbl91bm1hcF9kb21haW5fZ2ZuX3JhbmdlKHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hLAorCQkJICAgICAgIGludCBudW1wZ3MsIHN0cnVjdCBwYWdlICoqcGFnZXMpCit7 CisJaWYgKCFwYWdlcyB8fCAheGVuX2ZlYXR1cmUoWEVORkVBVF9hdXRvX3RyYW5zbGF0ZWRfcGh5 c21hcCkpCisJCXJldHVybiAwOworCisjaWZkZWYgQ09ORklHX1hFTl9QVkgKKwlyZXR1cm4geGVu X3hsYXRlX3VubWFwX2dmbl9yYW5nZSh2bWEsIG51bXBncywgcGFnZXMpOworI2Vsc2UKKwlyZXR1 cm4gLUVJTlZBTDsKKyNlbmRpZgorfQorRVhQT1JUX1NZTUJPTF9HUEwoeGVuX3VubWFwX2RvbWFp bl9nZm5fcmFuZ2UpOworCit1bnNpZ25lZCBsb25nIGFyYml0cmFyeV92aXJ0X3RvX21mbih2b2lk ICp2YWRkcikKK3sKKwl4bWFkZHJfdCBtYWRkciA9IGFyYml0cmFyeV92aXJ0X3RvX21hY2hpbmUo dmFkZHIpOworCisJcmV0dXJuIFBGTl9ET1dOKG1hZGRyLm1hZGRyKTsKK30KKworeG1hZGRyX3Qg YXJiaXRyYXJ5X3ZpcnRfdG9fbWFjaGluZSh2b2lkICp2YWRkcikKK3sKKwl1bnNpZ25lZCBsb25n IGFkZHJlc3MgPSAodW5zaWduZWQgbG9uZyl2YWRkcjsKKwl1bnNpZ25lZCBpbnQgbGV2ZWw7CisJ cHRlX3QgKnB0ZTsKKwl1bnNpZ25lZCBvZmZzZXQ7CisKKwkvKgorCSAqIGlmIHRoZSBQRk4gaXMg aW4gdGhlIGxpbmVhciBtYXBwZWQgdmFkZHIgcmFuZ2UsIHdlIGNhbiBqdXN0IHVzZQorCSAqIHRo ZSAocXVpY2spIHZpcnRfdG9fbWFjaGluZSgpIHAybSBsb29rdXAKKwkgKi8KKwlpZiAodmlydF9h ZGRyX3ZhbGlkKHZhZGRyKSkKKwkJcmV0dXJuIHZpcnRfdG9fbWFjaGluZSh2YWRkcik7CisKKwkv KiBvdGhlcndpc2Ugd2UgaGF2ZSB0byBkbyBhIChzbG93ZXIpIGZ1bGwgcGFnZS10YWJsZSB3YWxr ICovCisKKwlwdGUgPSBsb29rdXBfYWRkcmVzcyhhZGRyZXNzLCAmbGV2ZWwpOworCUJVR19PTihw dGUgPT0gTlVMTCk7CisJb2Zmc2V0ID0gYWRkcmVzcyAmIH5QQUdFX01BU0s7CisJcmV0dXJuIFhN QUREUigoKHBoeXNfYWRkcl90KXB0ZV9tZm4oKnB0ZSkgPDwgUEFHRV9TSElGVCkgKyBvZmZzZXQp OworfQorRVhQT1JUX1NZTUJPTF9HUEwoYXJiaXRyYXJ5X3ZpcnRfdG9fbWFjaGluZSk7CmRpZmYg LS1naXQgYS9hcmNoL3g4Ni94ZW4vbW11X2h2bS5jIGIvYXJjaC94ODYveGVuL21tdV9odm0uYwpu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi5jMGVjYjkyCi0tLSAvZGV2L251bGwK KysrIGIvYXJjaC94ODYveGVuL21tdV9odm0uYwpAQCAtMCwwICsxLDc3IEBACisjaW5jbHVkZSA8 bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxsaW51eC9jcmFzaF9kdW1wLmg+CisKKyNpbmNsdWRl IDx4ZW4vaW50ZXJmYWNlL3hlbi5oPgorI2luY2x1ZGUgPHhlbi9odm0uaD4KKworI2lmZGVmIENP TkZJR19QUk9DX1ZNQ09SRQorLyoKKyAqIFRoaXMgZnVuY3Rpb24gaXMgdXNlZCBpbiB0d28gY29u dGV4dHM6CisgKiAtIHRoZSBrZHVtcCBrZXJuZWwgaGFzIHRvIGNoZWNrIHdoZXRoZXIgYSBwZm4g b2YgdGhlIGNyYXNoZWQga2VybmVsCisgKiAgIHdhcyBhIGJhbGxvb25lZCBwYWdlLiB2bWNvcmUg aXMgdXNpbmcgdGhpcyBmdW5jdGlvbiB0byBkZWNpZGUKKyAqICAgd2hldGhlciB0byBhY2Nlc3Mg YSBwZm4gb2YgdGhlIGNyYXNoZWQga2VybmVsLgorICogLSB0aGUga2V4ZWMga2VybmVsIGhhcyB0 byBjaGVjayB3aGV0aGVyIGEgcGZuIHdhcyBiYWxsb29uZWQgYnkgdGhlCisgKiAgIHByZXZpb3Vz IGtlcm5lbC4gSWYgdGhlIHBmbiBpcyBiYWxsb29uZWQsIGhhbmRsZSBpdCBwcm9wZXJseS4KKyAq IFJldHVybnMgMCBpZiB0aGUgcGZuIGlzIG5vdCBiYWNrZWQgYnkgYSBSQU0gcGFnZSwgdGhlIGNh bGxlciBtYXkKKyAqIGhhbmRsZSB0aGUgcGZuIHNwZWNpYWwgaW4gdGhpcyBjYXNlLgorICovCitz dGF0aWMgaW50IHhlbl9vbGRtZW1fcGZuX2lzX3JhbSh1bnNpZ25lZCBsb25nIHBmbikKK3sKKwlz dHJ1Y3QgeGVuX2h2bV9nZXRfbWVtX3R5cGUgYSA9IHsKKwkJLmRvbWlkID0gRE9NSURfU0VMRiwK KwkJLnBmbiA9IHBmbiwKKwl9OworCWludCByYW07CisKKwlpZiAoSFlQRVJWSVNPUl9odm1fb3Ao SFZNT1BfZ2V0X21lbV90eXBlLCAmYSkpCisJCXJldHVybiAtRU5YSU87CisKKwlzd2l0Y2ggKGEu bWVtX3R5cGUpIHsKKwljYXNlIEhWTU1FTV9tbWlvX2RtOgorCQlyYW0gPSAwOworCQlicmVhazsK KwljYXNlIEhWTU1FTV9yYW1fcnc6CisJY2FzZSBIVk1NRU1fcmFtX3JvOgorCWRlZmF1bHQ6CisJ CXJhbSA9IDE7CisJCWJyZWFrOworCX0KKworCXJldHVybiByYW07Cit9CisjZW5kaWYKKworc3Rh dGljIHZvaWQgeGVuX2h2bV9leGl0X21tYXAoc3RydWN0IG1tX3N0cnVjdCAqbW0pCit7CisJc3Ry dWN0IHhlbl9odm1fcGFnZXRhYmxlX2R5aW5nIGE7CisJaW50IHJjOworCisJYS5kb21pZCA9IERP TUlEX1NFTEY7CisJYS5ncGEgPSBfX3BhKG1tLT5wZ2QpOworCXJjID0gSFlQRVJWSVNPUl9odm1f b3AoSFZNT1BfcGFnZXRhYmxlX2R5aW5nLCAmYSk7CisJV0FSTl9PTl9PTkNFKHJjIDwgMCk7Cit9 CisKK3N0YXRpYyBpbnQgaXNfcGFnZXRhYmxlX2R5aW5nX3N1cHBvcnRlZCh2b2lkKQoreworCXN0 cnVjdCB4ZW5faHZtX3BhZ2V0YWJsZV9keWluZyBhOworCWludCByYyA9IDA7CisKKwlhLmRvbWlk ID0gRE9NSURfU0VMRjsKKwlhLmdwYSA9IDB4MDA7CisJcmMgPSBIWVBFUlZJU09SX2h2bV9vcChI Vk1PUF9wYWdldGFibGVfZHlpbmcsICZhKTsKKwlpZiAocmMgPCAwKSB7CisJCXByaW50ayhLRVJO X0RFQlVHICJIVk1PUF9wYWdldGFibGVfZHlpbmcgbm90IHN1cHBvcnRlZFxuIik7CisJCXJldHVy biAwOworCX0KKwlyZXR1cm4gMTsKK30KKwordm9pZCBfX2luaXQgeGVuX2h2bV9pbml0X21tdV9v cHModm9pZCkKK3sKKwlpZiAoaXNfcGFnZXRhYmxlX2R5aW5nX3N1cHBvcnRlZCgpKQorCQlwdl9t bXVfb3BzLmV4aXRfbW1hcCA9IHhlbl9odm1fZXhpdF9tbWFwOworI2lmZGVmIENPTkZJR19QUk9D X1ZNQ09SRQorCXJlZ2lzdGVyX29sZG1lbV9wZm5faXNfcmFtKCZ4ZW5fb2xkbWVtX3Bmbl9pc19y YW0pOworI2VuZGlmCit9CmRpZmYgLS1naXQgYS9kcml2ZXJzL3hlbi9iYWxsb29uLmMgYi9kcml2 ZXJzL3hlbi9iYWxsb29uLmMKaW5kZXggZTRkYjE5ZS4uMzkwMTY4ZCAxMDA2NDQKLS0tIGEvZHJp dmVycy94ZW4vYmFsbG9vbi5jCisrKyBiL2RyaXZlcnMveGVuL2JhbGxvb24uYwpAQCAtNzEwLDYg KzcxMCw3IEBAIHZvaWQgZnJlZV94ZW5iYWxsb29uZWRfcGFnZXMoaW50IG5yX3BhZ2VzLCBzdHJ1 Y3QgcGFnZSAqKnBhZ2VzKQogfQogRVhQT1JUX1NZTUJPTChmcmVlX3hlbmJhbGxvb25lZF9wYWdl cyk7CiAKKyNpZmRlZiBDT05GSUdfWEVOX1BWCiBzdGF0aWMgdm9pZCBfX2luaXQgYmFsbG9vbl9h ZGRfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCQkJCSAgICAgIHVuc2lnbmVkIGxv bmcgcGFnZXMpCiB7CkBAIC03MzMsMTkgKzczNCwyMiBAQCBzdGF0aWMgdm9pZCBfX2luaXQgYmFs bG9vbl9hZGRfcmVnaW9uKHVuc2lnbmVkIGxvbmcgc3RhcnRfcGZuLAogCiAJYmFsbG9vbl9zdGF0 cy50b3RhbF9wYWdlcyArPSBleHRyYV9wZm5fZW5kIC0gc3RhcnRfcGZuOwogfQorI2VuZGlmCiAK IHN0YXRpYyBpbnQgX19pbml0IGJhbGxvb25faW5pdCh2b2lkKQogewotCWludCBpOwotCiAJaWYg KCF4ZW5fZG9tYWluKCkpCiAJCXJldHVybiAtRU5PREVWOwogCiAJcHJfaW5mbygiSW5pdGlhbGlz aW5nIGJhbGxvb24gZHJpdmVyXG4iKTsKIAorI2lmZGVmIENPTkZJR19YRU5fUFYKIAliYWxsb29u X3N0YXRzLmN1cnJlbnRfcGFnZXMgPSB4ZW5fcHZfZG9tYWluKCkKIAkJPyBtaW4oeGVuX3N0YXJ0 X2luZm8tPm5yX3BhZ2VzIC0geGVuX3JlbGVhc2VkX3BhZ2VzLCBtYXhfcGZuKQogCQk6IGdldF9u dW1fcGh5c3BhZ2VzKCk7CisjZWxzZQorCWJhbGxvb25fc3RhdHMuY3VycmVudF9wYWdlcyA9IGdl dF9udW1fcGh5c3BhZ2VzKCk7CisjZW5kaWYKIAliYWxsb29uX3N0YXRzLnRhcmdldF9wYWdlcyAg PSBiYWxsb29uX3N0YXRzLmN1cnJlbnRfcGFnZXM7CiAJYmFsbG9vbl9zdGF0cy5iYWxsb29uX2xv dyAgID0gMDsKIAliYWxsb29uX3N0YXRzLmJhbGxvb25faGlnaCAgPSAwOwpAQCAtNzYyLDE0ICs3 NjYsMjAgQEAgc3RhdGljIGludCBfX2luaXQgYmFsbG9vbl9pbml0KHZvaWQpCiAJcmVnaXN0ZXJf c3lzY3RsX3RhYmxlKHhlbl9yb290KTsKICNlbmRpZgogCi0JLyoKLQkgKiBJbml0aWFsaXplIHRo ZSBiYWxsb29uIHdpdGggcGFnZXMgZnJvbSB0aGUgZXh0cmEgbWVtb3J5Ci0JICogcmVnaW9ucyAo c2VlIGFyY2gveDg2L3hlbi9zZXR1cC5jKS4KLQkgKi8KLQlmb3IgKGkgPSAwOyBpIDwgWEVOX0VY VFJBX01FTV9NQVhfUkVHSU9OUzsgaSsrKQotCQlpZiAoeGVuX2V4dHJhX21lbVtpXS5uX3BmbnMp Ci0JCQliYWxsb29uX2FkZF9yZWdpb24oeGVuX2V4dHJhX21lbVtpXS5zdGFydF9wZm4sCi0JCQkJ CSAgIHhlbl9leHRyYV9tZW1baV0ubl9wZm5zKTsKKyNpZmRlZiBDT05GSUdfWEVOX1BWCisJewor CQlpbnQgaTsKKworCQkvKgorCQkgKiBJbml0aWFsaXplIHRoZSBiYWxsb29uIHdpdGggcGFnZXMg ZnJvbSB0aGUgZXh0cmEgbWVtb3J5CisJCSAqIHJlZ2lvbnMgKHNlZSBhcmNoL3g4Ni94ZW4vc2V0 dXAuYykuCisJCSAqLworCQlmb3IgKGkgPSAwOyBpIDwgWEVOX0VYVFJBX01FTV9NQVhfUkVHSU9O UzsgaSsrKQorCQkJaWYgKHhlbl9leHRyYV9tZW1baV0ubl9wZm5zKQorCQkJCWJhbGxvb25fYWRk X3JlZ2lvbih4ZW5fZXh0cmFfbWVtW2ldLnN0YXJ0X3BmbiwKKwkJCQkJCSAgIHhlbl9leHRyYV9t ZW1baV0ubl9wZm5zKTsKKwl9CisjZW5kaWYKIAogCXJldHVybiAwOwogfQpkaWZmIC0tZ2l0IGEv aW5jbHVkZS94ZW4veGVuLW9wcy5oIGIvaW5jbHVkZS94ZW4veGVuLW9wcy5oCmluZGV4IGJjZjkw ZWQuLmUyMGJiYmEgMTAwNjQ0Ci0tLSBhL2luY2x1ZGUveGVuL3hlbi1vcHMuaAorKysgYi9pbmNs dWRlL3hlbi94ZW4tb3BzLmgKQEAgLTQxLDExICs0MSwyNCBAQCBpbnQgeGVuX2NwdWhwX3NldHVw KGludCAoKmNwdV91cF9wcmVwYXJlX2NiKSh1bnNpZ25lZCBpbnQpLAogdm9pZCB4ZW5fcmVib290 KGludCByZWFzb24pOwogCiBleHRlcm4gdW5zaWduZWQgbG9uZyAqeGVuX2NvbnRpZ3VvdXNfYml0 bWFwOworI2lmZGVmIENPTkZJR19YRU5fUFYKIGludCB4ZW5fY3JlYXRlX2NvbnRpZ3VvdXNfcmVn aW9uKHBoeXNfYWRkcl90IHBzdGFydCwgdW5zaWduZWQgaW50IG9yZGVyLAogCQkJCXVuc2lnbmVk IGludCBhZGRyZXNzX2JpdHMsCiAJCQkJZG1hX2FkZHJfdCAqZG1hX2hhbmRsZSk7CiAKIHZvaWQg eGVuX2Rlc3Ryb3lfY29udGlndW91c19yZWdpb24ocGh5c19hZGRyX3QgcHN0YXJ0LCB1bnNpZ25l ZCBpbnQgb3JkZXIpOworI2Vsc2UKK3N0YXRpYyBpbmxpbmUgaW50IHhlbl9jcmVhdGVfY29udGln dW91c19yZWdpb24ocGh5c19hZGRyX3QgcHN0YXJ0LAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50 IG9yZGVyLAorCQkJCQkgICAgICAgdW5zaWduZWQgaW50IGFkZHJlc3NfYml0cywKKwkJCQkJICAg ICAgIGRtYV9hZGRyX3QgKmRtYV9oYW5kbGUpCit7CisJcmV0dXJuIDA7Cit9CisKK3N0YXRpYyBp bmxpbmUgdm9pZCB4ZW5fZGVzdHJveV9jb250aWd1b3VzX3JlZ2lvbihwaHlzX2FkZHJfdCBwc3Rh cnQsCisJCQkJCQkgdW5zaWduZWQgaW50IG9yZGVyKSB7IH0KKyNlbmRpZgogCiBzdHJ1Y3Qgdm1f YXJlYV9zdHJ1Y3Q7CiAKLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMu eGVuLm9yZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==