From mboxrd@z Thu Jan 1 00:00:00 1970 From: Vitaly Kuznetsov Subject: [RFC PATCH KERNEL 2/4] x86/xen: split smp.c for PV and PVHVM guests Date: Mon, 14 Nov 2016 18:17:47 +0100 Message-ID: <1479143869-27611-3-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.bemta6.messagelabs.com ([193.109.254.103]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1c6KtL-0003rh-Hj for xen-devel@lists.xenproject.org; Mon, 14 Nov 2016 17:17:59 +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 TW9yZSBvciBsZXNzIG1lY2hhbmljYWxseSBzcGxpdCBzbXAuYyBpbnRvIDMgZmlsZXMuIFhFTl9Q Vl9TTVAgYW5kClhFTl9QVkhWTV9TTVAgY29uZmlnIG9wdGlvbnMgYWRkZWQgdG8gc3VwcG9ydCB0 aGUgY2hhbmdlLgoKU2lnbmVkLW9mZi1ieTogVml0YWx5IEt1em5ldHNvdiA8dmt1em5ldHNAcmVk aGF0LmNvbT4KLS0tCiBhcmNoL3g4Ni94ZW4vS2NvbmZpZyAgICAgIHwgICA4ICsrCiBhcmNoL3g4 Ni94ZW4vTWFrZWZpbGUgICAgIHwgICA1ICstCiBhcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMgIHwg ICA4ICsrCiBhcmNoL3g4Ni94ZW4vc21wLmMgICAgICAgIHwgMjk1ICsrKy0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIGFyY2gveDg2L3hlbi9zbXAuaCAgICAgICAg fCAgMjMgKysrKwogYXJjaC94ODYveGVuL3NtcF9jb21tb24uYyB8IDI0NiArKysrKysrKysrKysr KysrKysrKysrKysrKysrKysrKysrKysrKwogYXJjaC94ODYveGVuL3NtcF9odm0uYyAgICB8ICA1 NCArKysrKysrKysKIDcgZmlsZXMgY2hhbmdlZCwgMzU5IGluc2VydGlvbnMoKyksIDI4MCBkZWxl dGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni94ZW4vc21wX2NvbW1vbi5jCiBj cmVhdGUgbW9kZSAxMDA2NDQgYXJjaC94ODYveGVuL3NtcF9odm0uYwoKZGlmZiAtLWdpdCBhL2Fy Y2gveDg2L3hlbi9LY29uZmlnIGIvYXJjaC94ODYveGVuL0tjb25maWcKaW5kZXggODI5ODM3OC4u ZTI1YzkzZSAxMDA2NDQKLS0tIGEvYXJjaC94ODYveGVuL0tjb25maWcKKysrIGIvYXJjaC94ODYv eGVuL0tjb25maWcKQEAgLTIxLDYgKzIxLDEwIEBAIGNvbmZpZyBYRU5fUFYKIAloZWxwCiAJICBT dXBwb3J0IHJ1bm5pbmcgYXMgYSBYZW4gUFYgZ3Vlc3QuCiAKK2NvbmZpZyBYRU5fUFZfU01QCisJ ZGVmX2Jvb2wgeQorCWRlcGVuZHMgb24gWEVOX1BWICYmIFNNUAorCiBjb25maWcgWEVOX0RPTTAK IAlib29sICJYZW4gUFYgRG9tMCBzdXBwb3J0IgogCWRlZmF1bHQgeQpAQCAtMzcsNiArNDEsMTAg QEAgY29uZmlnIFhFTl9QVkhWTQogCWhlbHAKIAkgIFN1cHBvcnQgcnVubmluZyBhcyBhIFhlbiBQ VkhWTSBndWVzdC4KIAorY29uZmlnIFhFTl9QVkhWTV9TTVAKKwlkZWZfYm9vbCB5CisJZGVwZW5k cyBvbiBYRU5fUFZIVk0gJiYgU01QCisKIGNvbmZpZyBYRU5fNTEyR0IKIAlib29sICJMaW1pdCBY ZW4gcHYtZG9tYWluIG1lbW9yeSB0byA1MTJHQiIKIAlkZXBlbmRzIG9uIFhFTl9QViAmJiBYODZf NjQKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9NYWtlZmlsZSBiL2FyY2gveDg2L3hlbi9NYWtl ZmlsZQppbmRleCBlNjBmYzkzLi5hYTZjZDVlIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vTWFr ZWZpbGUKKysrIGIvYXJjaC94ODYveGVuL01ha2VmaWxlCkBAIC0yMCw3ICsyMCwxMCBAQCBvYmot JChDT05GSUdfWEVOX1BWSFZNKQkJKz0gZW5saWdodGVuX2h2bS5vCiAKIG9iai0kKENPTkZJR19F VkVOVF9UUkFDSU5HKSArPSB0cmFjZS5vCiAKLW9iai0kKENPTkZJR19TTVApCQkrPSBzbXAubwor b2JqLSQoQ09ORklHX1NNUCkJCSs9IHNtcF9jb21tb24ubworb2JqLSQoQ09ORklHX1hFTl9QVl9T TVApCSs9IHNtcC5vCitvYmotJChDT05GSUdfWEVOX1BWSFZNX1NNUCkJKz0gc21wX2h2bS5vCisK IG9iai0kKENPTkZJR19QQVJBVklSVF9TUElOTE9DS1MpKz0gc3BpbmxvY2subwogb2JqLSQoQ09O RklHX1hFTl9ERUJVR19GUykJKz0gZGVidWdmcy5vCiBvYmotJChDT05GSUdfWEVOX0RPTTApCQkr PSB2Z2EubwpkaWZmIC0tZ2l0IGEvYXJjaC94ODYveGVuL2VubGlnaHRlbi5jIGIvYXJjaC94ODYv eGVuL2VubGlnaHRlbi5jCmluZGV4IDA4NmMzMzkuLjU4MzIyMWMgMTAwNjQ0Ci0tLSBhL2FyY2gv eDg2L3hlbi9lbmxpZ2h0ZW4uYworKysgYi9hcmNoL3g4Ni94ZW4vZW5saWdodGVuLmMKQEAgLTE2 MDMsMTIgKzE2MDMsMjAgQEAgc3RhdGljIGludCB4ZW5fY3B1X3VwX3ByZXBhcmVfcHYodW5zaWdu ZWQgaW50IGNwdSkKIAkJICAgICBjcHUsIHJjKTsKIAkJcmV0dXJuIHJjOwogCX0KKworCXJjID0g eGVuX3NtcF9pbnRyX2luaXRfcHYoY3B1KTsKKwlpZiAocmMpIHsKKwkJV0FSTigxLCAieGVuX3Nt cF9pbnRyX2luaXRfcHYoKSBmb3IgQ1BVICVkIGZhaWxlZDogJWRcbiIsCisJCSAgICAgY3B1LCBy Yyk7CisJCXJldHVybiByYzsKKwl9CiAJcmV0dXJuIDA7CiB9CiAKIHN0YXRpYyBpbnQgeGVuX2Nw dV9kZWFkX3B2KHVuc2lnbmVkIGludCBjcHUpCiB7CiAJeGVuX3NtcF9pbnRyX2ZyZWUoY3B1KTsK Kwl4ZW5fc21wX2ludHJfZnJlZV9wdihjcHUpOwogCiAJaWYgKHhlbl9wdl9kb21haW4oKSB8fCB4 ZW5fZmVhdHVyZShYRU5GRUFUX2h2bV9zYWZlX3B2Y2xvY2spKQogCQl4ZW5fdGVhcmRvd25fdGlt ZXIoY3B1KTsKZGlmZiAtLWdpdCBhL2FyY2gveDg2L3hlbi9zbXAuYyBiL2FyY2gveDg2L3hlbi9z bXAuYwppbmRleCBiZGIwZDljLi4wY2I2ZDk5IDEwMDY0NAotLS0gYS9hcmNoL3g4Ni94ZW4vc21w LmMKKysrIGIvYXJjaC94ODYveGVuL3NtcC5jCkBAIC00MywzMiArNDMsMTEgQEAKIAogY3B1bWFz a192YXJfdCB4ZW5fY3B1X2luaXRpYWxpemVkX21hcDsKIAotc3RydWN0IHhlbl9jb21tb25faXJx IHsKLQlpbnQgaXJxOwotCWNoYXIgKm5hbWU7Ci19Owotc3RhdGljIERFRklORV9QRVJfQ1BVKHN0 cnVjdCB4ZW5fY29tbW9uX2lycSwgeGVuX3Jlc2NoZWRfaXJxKSA9IHsgLmlycSA9IC0xIH07Ci1z dGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHhlbl9jb21tb25faXJxLCB4ZW5fY2FsbGZ1bmNf aXJxKSA9IHsgLmlycSA9IC0xIH07Ci1zdGF0aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHhlbl9j b21tb25faXJxLCB4ZW5fY2FsbGZ1bmNzaW5nbGVfaXJxKSA9IHsgLmlycSA9IC0xIH07CiBzdGF0 aWMgREVGSU5FX1BFUl9DUFUoc3RydWN0IHhlbl9jb21tb25faXJxLCB4ZW5faXJxX3dvcmspID0g eyAuaXJxID0gLTEgfTsKLXN0YXRpYyBERUZJTkVfUEVSX0NQVShzdHJ1Y3QgeGVuX2NvbW1vbl9p cnEsIHhlbl9kZWJ1Z19pcnEpID0geyAuaXJxID0gLTEgfTsKIHN0YXRpYyBERUZJTkVfUEVSX0NQ VShzdHJ1Y3QgeGVuX2NvbW1vbl9pcnEsIHhlbl9wbXVfaXJxKSA9IHsgLmlycSA9IC0xIH07CiAK LXN0YXRpYyBpcnFyZXR1cm5fdCB4ZW5fY2FsbF9mdW5jdGlvbl9pbnRlcnJ1cHQoaW50IGlycSwg dm9pZCAqZGV2X2lkKTsKLXN0YXRpYyBpcnFyZXR1cm5fdCB4ZW5fY2FsbF9mdW5jdGlvbl9zaW5n bGVfaW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9pZCk7CiBzdGF0aWMgaXJxcmV0dXJuX3Qg eGVuX2lycV93b3JrX2ludGVycnVwdChpbnQgaXJxLCB2b2lkICpkZXZfaWQpOwogCi0vKgotICog UmVzY2hlZHVsZSBjYWxsIGJhY2suCi0gKi8KLXN0YXRpYyBpcnFyZXR1cm5fdCB4ZW5fcmVzY2hl ZHVsZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWluY19pcnFfc3RhdChp cnFfcmVzY2hlZF9jb3VudCk7Ci0Jc2NoZWR1bGVyX2lwaSgpOwotCi0JcmV0dXJuIElSUV9IQU5E TEVEOwotfQotCiBzdGF0aWMgdm9pZCBjcHVfYnJpbmd1cCh2b2lkKQogewogCWludCBjcHU7CkBA IC0xMjEsMzYgKzEwMCw4IEBAIGFzbWxpbmthZ2UgX192aXNpYmxlIHZvaWQgY3B1X2JyaW5ndXBf YW5kX2lkbGUoaW50IGNwdSkKIAljcHVfc3RhcnR1cF9lbnRyeShDUFVIUF9BUF9PTkxJTkVfSURM RSk7CiB9CiAKLXZvaWQgeGVuX3NtcF9pbnRyX2ZyZWUodW5zaWduZWQgaW50IGNwdSkKK3ZvaWQg eGVuX3NtcF9pbnRyX2ZyZWVfcHYodW5zaWduZWQgaW50IGNwdSkKIHsKLQlpZiAocGVyX2NwdSh4 ZW5fcmVzY2hlZF9pcnEsIGNwdSkuaXJxID49IDApIHsKLQkJdW5iaW5kX2Zyb21faXJxaGFuZGxl cihwZXJfY3B1KHhlbl9yZXNjaGVkX2lycSwgY3B1KS5pcnEsIE5VTEwpOwotCQlwZXJfY3B1KHhl bl9yZXNjaGVkX2lycSwgY3B1KS5pcnEgPSAtMTsKLQkJa2ZyZWUocGVyX2NwdSh4ZW5fcmVzY2hl ZF9pcnEsIGNwdSkubmFtZSk7Ci0JCXBlcl9jcHUoeGVuX3Jlc2NoZWRfaXJxLCBjcHUpLm5hbWUg PSBOVUxMOwotCX0KLQlpZiAocGVyX2NwdSh4ZW5fY2FsbGZ1bmNfaXJxLCBjcHUpLmlycSA+PSAw KSB7Ci0JCXVuYmluZF9mcm9tX2lycWhhbmRsZXIocGVyX2NwdSh4ZW5fY2FsbGZ1bmNfaXJxLCBj cHUpLmlycSwgTlVMTCk7Ci0JCXBlcl9jcHUoeGVuX2NhbGxmdW5jX2lycSwgY3B1KS5pcnEgPSAt MTsKLQkJa2ZyZWUocGVyX2NwdSh4ZW5fY2FsbGZ1bmNfaXJxLCBjcHUpLm5hbWUpOwotCQlwZXJf Y3B1KHhlbl9jYWxsZnVuY19pcnEsIGNwdSkubmFtZSA9IE5VTEw7Ci0JfQotCWlmIChwZXJfY3B1 KHhlbl9kZWJ1Z19pcnEsIGNwdSkuaXJxID49IDApIHsKLQkJdW5iaW5kX2Zyb21faXJxaGFuZGxl cihwZXJfY3B1KHhlbl9kZWJ1Z19pcnEsIGNwdSkuaXJxLCBOVUxMKTsKLQkJcGVyX2NwdSh4ZW5f ZGVidWdfaXJxLCBjcHUpLmlycSA9IC0xOwotCQlrZnJlZShwZXJfY3B1KHhlbl9kZWJ1Z19pcnEs IGNwdSkubmFtZSk7Ci0JCXBlcl9jcHUoeGVuX2RlYnVnX2lycSwgY3B1KS5uYW1lID0gTlVMTDsK LQl9Ci0JaWYgKHBlcl9jcHUoeGVuX2NhbGxmdW5jc2luZ2xlX2lycSwgY3B1KS5pcnEgPj0gMCkg ewotCQl1bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHBlcl9jcHUoeGVuX2NhbGxmdW5jc2luZ2xlX2ly cSwgY3B1KS5pcnEsCi0JCQkJICAgICAgIE5VTEwpOwotCQlwZXJfY3B1KHhlbl9jYWxsZnVuY3Np bmdsZV9pcnEsIGNwdSkuaXJxID0gLTE7Ci0JCWtmcmVlKHBlcl9jcHUoeGVuX2NhbGxmdW5jc2lu Z2xlX2lycSwgY3B1KS5uYW1lKTsKLQkJcGVyX2NwdSh4ZW5fY2FsbGZ1bmNzaW5nbGVfaXJxLCBj cHUpLm5hbWUgPSBOVUxMOwotCX0KLQlpZiAoeGVuX2h2bV9kb21haW4oKSkKLQkJcmV0dXJuOwot CiAJaWYgKHBlcl9jcHUoeGVuX2lycV93b3JrLCBjcHUpLmlycSA+PSAwKSB7CiAJCXVuYmluZF9m cm9tX2lycWhhbmRsZXIocGVyX2NwdSh4ZW5faXJxX3dvcmssIGNwdSkuaXJxLCBOVUxMKTsKIAkJ cGVyX2NwdSh4ZW5faXJxX3dvcmssIGNwdSkuaXJxID0gLTE7CkBAIC0xNjQsNjMgKzExNSwxMiBA QCB2b2lkIHhlbl9zbXBfaW50cl9mcmVlKHVuc2lnbmVkIGludCBjcHUpCiAJCWtmcmVlKHBlcl9j cHUoeGVuX3BtdV9pcnEsIGNwdSkubmFtZSk7CiAJCXBlcl9jcHUoeGVuX3BtdV9pcnEsIGNwdSku bmFtZSA9IE5VTEw7CiAJfQotfTsKLWludCB4ZW5fc21wX2ludHJfaW5pdCh1bnNpZ25lZCBpbnQg Y3B1KQorfQorCitpbnQgeGVuX3NtcF9pbnRyX2luaXRfcHYodW5zaWduZWQgaW50IGNwdSkKIHsK IAlpbnQgcmM7Ci0JY2hhciAqcmVzY2hlZF9uYW1lLCAqY2FsbGZ1bmNfbmFtZSwgKmRlYnVnX25h bWUsICpwbXVfbmFtZTsKLQotCXJlc2NoZWRfbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAi cmVzY2hlZCVkIiwgY3B1KTsKLQlyYyA9IGJpbmRfaXBpX3RvX2lycWhhbmRsZXIoWEVOX1JFU0NI RURVTEVfVkVDVE9SLAotCQkJCSAgICBjcHUsCi0JCQkJICAgIHhlbl9yZXNjaGVkdWxlX2ludGVy cnVwdCwKLQkJCQkgICAgSVJRRl9QRVJDUFV8SVJRRl9OT0JBTEFOQ0lORywKLQkJCQkgICAgcmVz Y2hlZF9uYW1lLAotCQkJCSAgICBOVUxMKTsKLQlpZiAocmMgPCAwKQotCQlnb3RvIGZhaWw7Ci0J cGVyX2NwdSh4ZW5fcmVzY2hlZF9pcnEsIGNwdSkuaXJxID0gcmM7Ci0JcGVyX2NwdSh4ZW5fcmVz Y2hlZF9pcnEsIGNwdSkubmFtZSA9IHJlc2NoZWRfbmFtZTsKLQotCWNhbGxmdW5jX25hbWUgPSBr YXNwcmludGYoR0ZQX0tFUk5FTCwgImNhbGxmdW5jJWQiLCBjcHUpOwotCXJjID0gYmluZF9pcGlf dG9faXJxaGFuZGxlcihYRU5fQ0FMTF9GVU5DVElPTl9WRUNUT1IsCi0JCQkJICAgIGNwdSwKLQkJ CQkgICAgeGVuX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0LAotCQkJCSAgICBJUlFGX1BFUkNQVXxJ UlFGX05PQkFMQU5DSU5HLAotCQkJCSAgICBjYWxsZnVuY19uYW1lLAotCQkJCSAgICBOVUxMKTsK LQlpZiAocmMgPCAwKQotCQlnb3RvIGZhaWw7Ci0JcGVyX2NwdSh4ZW5fY2FsbGZ1bmNfaXJxLCBj cHUpLmlycSA9IHJjOwotCXBlcl9jcHUoeGVuX2NhbGxmdW5jX2lycSwgY3B1KS5uYW1lID0gY2Fs bGZ1bmNfbmFtZTsKLQotCWRlYnVnX25hbWUgPSBrYXNwcmludGYoR0ZQX0tFUk5FTCwgImRlYnVn JWQiLCBjcHUpOwotCXJjID0gYmluZF92aXJxX3RvX2lycWhhbmRsZXIoVklSUV9ERUJVRywgY3B1 LCB4ZW5fZGVidWdfaW50ZXJydXB0LAotCQkJCSAgICAgSVJRRl9QRVJDUFUgfCBJUlFGX05PQkFM QU5DSU5HLAotCQkJCSAgICAgZGVidWdfbmFtZSwgTlVMTCk7Ci0JaWYgKHJjIDwgMCkKLQkJZ290 byBmYWlsOwotCXBlcl9jcHUoeGVuX2RlYnVnX2lycSwgY3B1KS5pcnEgPSByYzsKLQlwZXJfY3B1 KHhlbl9kZWJ1Z19pcnEsIGNwdSkubmFtZSA9IGRlYnVnX25hbWU7Ci0KLQljYWxsZnVuY19uYW1l ID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJjYWxsZnVuY3NpbmdsZSVkIiwgY3B1KTsKLQlyYyA9 IGJpbmRfaXBpX3RvX2lycWhhbmRsZXIoWEVOX0NBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUiwK LQkJCQkgICAgY3B1LAotCQkJCSAgICB4ZW5fY2FsbF9mdW5jdGlvbl9zaW5nbGVfaW50ZXJydXB0 LAotCQkJCSAgICBJUlFGX1BFUkNQVXxJUlFGX05PQkFMQU5DSU5HLAotCQkJCSAgICBjYWxsZnVu Y19uYW1lLAotCQkJCSAgICBOVUxMKTsKLQlpZiAocmMgPCAwKQotCQlnb3RvIGZhaWw7Ci0JcGVy X2NwdSh4ZW5fY2FsbGZ1bmNzaW5nbGVfaXJxLCBjcHUpLmlycSA9IHJjOwotCXBlcl9jcHUoeGVu X2NhbGxmdW5jc2luZ2xlX2lycSwgY3B1KS5uYW1lID0gY2FsbGZ1bmNfbmFtZTsKLQotCS8qCi0J ICogVGhlIElSUSB3b3JrZXIgb24gUFZIVk0gZ29lcyB0aHJvdWdoIHRoZSBuYXRpdmUgcGF0aCBh bmQgdXNlcyB0aGUKLQkgKiBJUEkgbWVjaGFuaXNtLgotCSAqLwotCWlmICh4ZW5faHZtX2RvbWFp bigpKQotCQlyZXR1cm4gMDsKKwljaGFyICpjYWxsZnVuY19uYW1lLCAqcG11X25hbWU7CiAKIAlj YWxsZnVuY19uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJpcnF3b3JrJWQiLCBjcHUpOwog CXJjID0gYmluZF9pcGlfdG9faXJxaGFuZGxlcihYRU5fSVJRX1dPUktfVkVDVE9SLApAQCAtMjQ5 LDExICsxNDksMTAgQEAgaW50IHhlbl9zbXBfaW50cl9pbml0KHVuc2lnbmVkIGludCBjcHUpCiAJ cmV0dXJuIDA7CiAKICBmYWlsOgotCXhlbl9zbXBfaW50cl9mcmVlKGNwdSk7CisJeGVuX3NtcF9p bnRyX2ZyZWVfcHYoY3B1KTsKIAlyZXR1cm4gcmM7CiB9CiAKLSNpZmRlZiBDT05GSUdfWEVOX1BW CiBzdGF0aWMgdm9pZCBfX2luaXQgeGVuX2ZpbGxfcG9zc2libGVfbWFwKHZvaWQpCiB7CiAJaW50 IGksIHJjOwpAQCAtMzA1LDcgKzIwNCw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCB4ZW5fZmlsdGVy X2NwdV9tYXBzKHZvaWQpCiAjZW5kaWYKIAogfQotI2VuZGlmCiAKIHN0YXRpYyB2b2lkIF9faW5p dCB4ZW5fc21wX3ByZXBhcmVfYm9vdF9jcHUodm9pZCkKIHsKQEAgLTMxMyw3ICsyMTEsNiBAQCBz dGF0aWMgdm9pZCBfX2luaXQgeGVuX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KHZvaWQpCiAJbmF0aXZl X3NtcF9wcmVwYXJlX2Jvb3RfY3B1KCk7CiAKIAlpZiAoeGVuX3B2X2RvbWFpbigpKSB7Ci0jaWZk ZWYgQ09ORklHX1hFTl9QVgogCQlpZiAoIXhlbl9mZWF0dXJlKFhFTkZFQVRfd3JpdGFibGVfcGFn ZV90YWJsZXMpKQogCQkJLyogV2UndmUgc3dpdGNoZWQgdG8gdGhlICJyZWFsIiBwZXItY3B1IGdk dCwgc28gbWFrZQogCQkJICogc3VyZSB0aGUgb2xkIG1lbW9yeSBjYW4gYmUgcmVjeWNsZWQuICov CkBAIC0zMzAsMTYgKzIyNyw5IEBAIHN0YXRpYyB2b2lkIF9faW5pdCB4ZW5fc21wX3ByZXBhcmVf Ym9vdF9jcHUodm9pZCkKIAogCQl4ZW5fZmlsdGVyX2NwdV9tYXBzKCk7CiAJCXhlbl9zZXR1cF92 Y3B1X2luZm9fcGxhY2VtZW50KCk7Ci0jZW5kaWYKIAl9CiAKIAkvKgotCSAqIFNldHVwIHZjcHVf aW5mbyBmb3IgYm9vdCBDUFUuCi0JICovCi0JaWYgKHhlbl9odm1fZG9tYWluKCkpCi0JCXhlbl92 Y3B1X3NldHVwKDApOwotCi0JLyoKIAkgKiBUaGUgYWx0ZXJuYXRpdmUgbG9naWMgKHdoaWNoIHBh dGNoZXMgdGhlIHVubG9jay9sb2NrKSBydW5zIGJlZm9yZQogCSAqIHRoZSBzbXAgYm9vdHVwIHVw IGNvZGUgaXMgYWN0aXZhdGVkLiBIZW5jZSB3ZSBuZWVkIHRvIHNldCB0aGlzIHVwCiAJICogdGhl IGNvcmUga2VybmVsIGlzIGJlaW5nIHBhdGNoZWQuIE90aGVyd2lzZSB3ZSB3aWxsIGhhdmUgb25s eQpAQCAtMzQ4LDcgKzIzOCw2IEBAIHN0YXRpYyB2b2lkIF9faW5pdCB4ZW5fc21wX3ByZXBhcmVf Ym9vdF9jcHUodm9pZCkKIAl4ZW5faW5pdF9zcGlubG9ja3MoKTsKIH0KIAotI2lmZGVmIENPTkZJ R19YRU5fUFYKIHN0YXRpYyB2b2lkIF9faW5pdCB4ZW5fc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25l ZCBpbnQgbWF4X2NwdXMpCiB7CiAJdW5zaWduZWQgY3B1OwpAQCAtMzgwLDYgKzI2OSw5IEBAIHN0 YXRpYyB2b2lkIF9faW5pdCB4ZW5fc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25lZCBpbnQgbWF4X2Nw dXMpCiAJaWYgKHhlbl9zbXBfaW50cl9pbml0KDApKQogCQlCVUcoKTsKIAorCWlmICh4ZW5fc21w X2ludHJfaW5pdF9wdigwKSkKKwkJQlVHKCk7CisKIAlpZiAoIWFsbG9jX2NwdW1hc2tfdmFyKCZ4 ZW5fY3B1X2luaXRpYWxpemVkX21hcCwgR0ZQX0tFUk5FTCkpCiAJCXBhbmljKCJjb3VsZCBub3Qg YWxsb2NhdGUgeGVuX2NwdV9pbml0aWFsaXplZF9tYXBcbiIpOwogCkBAIC00ODksNyArMzgxLDcg QEAgc3RhdGljIGludCB4ZW5fY3B1X3VwKHVuc2lnbmVkIGludCBjcHUsIHN0cnVjdCB0YXNrX3N0 cnVjdCAqaWRsZSkKIAogCS8qCiAJICogUFYgVkNQVXMgYXJlIGFsd2F5cyBzdWNjZXNzZnVsbHkg dGFrZW4gZG93biAoc2VlICd3aGlsZScgbG9vcAotCSAqIGluIHhlbl9jcHVfZGllKCkpLCBzbyAt RUJVU1kgaXMgYW4gZXJyb3IuCisJICogaW4geGVuX2NwdV9kaWVfcHYoKSksIHNvIC1FQlVTWSBp cyBhbiBlcnJvci4KIAkgKi8KIAlyYyA9IGNwdV9jaGVja191cF9wcmVwYXJlKGNwdSk7CiAJaWYg KHJjKQpAQCAtNTUyLDcgKzQ0NCw3IEBAIHN0YXRpYyBpbnQgeGVuX2NwdV9kaXNhYmxlKHZvaWQp CiAJcmV0dXJuIC1FTk9TWVM7CiB9CiAKLXN0YXRpYyB2b2lkIHhlbl9jcHVfZGllKHVuc2lnbmVk IGludCBjcHUpCitzdGF0aWMgdm9pZCB4ZW5fY3B1X2RpZV9wdih1bnNpZ25lZCBpbnQgY3B1KQog ewogCUJVRygpOwogfQpAQCAtNTgxLDE1OSArNDczLDI0IEBAIHN0YXRpYyB2b2lkIHhlbl9zdG9w X290aGVyX2NwdXMoaW50IHdhaXQpCiB7CiAJc21wX2NhbGxfZnVuY3Rpb24oc3RvcF9zZWxmLCBO VUxMLCB3YWl0KTsKIH0KLSNlbmRpZiAvKiBDT05GSUdfWEVOX1BWICovCiAKLXN0YXRpYyB2b2lk IHhlbl9jcHVfZGllKHVuc2lnbmVkIGludCBjcHUpCit2b2lkIHhlbl9jcHVfZGllX3B2KHVuc2ln bmVkIGludCBjcHUpCiB7Ci0Jd2hpbGUgKHhlbl9wdl9kb21haW4oKSAmJiBIWVBFUlZJU09SX3Zj cHVfb3AoVkNQVU9QX2lzX3VwLAotCQkJCQkJICAgICB4ZW5fdmNwdV9ucihjcHUpLCBOVUxMKSkg eworCXdoaWxlIChIWVBFUlZJU09SX3ZjcHVfb3AoVkNQVU9QX2lzX3VwLAorCQkJCSAgeGVuX3Zj cHVfbnIoY3B1KSwgTlVMTCkpIHsKIAkJX19zZXRfY3VycmVudF9zdGF0ZShUQVNLX1VOSU5URVJS VVBUSUJMRSk7CiAJCXNjaGVkdWxlX3RpbWVvdXQoSFovMTApOwogCX0KIAogCWlmIChjb21tb25f Y3B1X2RpZShjcHUpID09IDApIHsKIAkJeGVuX3NtcF9pbnRyX2ZyZWUoY3B1KTsKKwkJeGVuX3Nt cF9pbnRyX2ZyZWVfcHYoY3B1KTsKIAkJeGVuX3VuaW5pdF9sb2NrX2NwdShjcHUpOwogCQl4ZW5f dGVhcmRvd25fdGltZXIoY3B1KTsKIAkJeGVuX3BtdV9maW5pc2goY3B1KTsKIAl9CiB9CiAKLXN0 YXRpYyB2b2lkIHhlbl9zbXBfc2VuZF9yZXNjaGVkdWxlKGludCBjcHUpCi17Ci0JeGVuX3NlbmRf SVBJX29uZShjcHUsIFhFTl9SRVNDSEVEVUxFX1ZFQ1RPUik7Ci19Ci0KLXN0YXRpYyB2b2lkIF9f eGVuX3NlbmRfSVBJX21hc2soY29uc3Qgc3RydWN0IGNwdW1hc2sgKm1hc2ssCi0JCQkgICAgICBp bnQgdmVjdG9yKQotewotCXVuc2lnbmVkIGNwdTsKLQotCWZvcl9lYWNoX2NwdV9hbmQoY3B1LCBt YXNrLCBjcHVfb25saW5lX21hc2spCi0JCXhlbl9zZW5kX0lQSV9vbmUoY3B1LCB2ZWN0b3IpOwot fQotCi1zdGF0aWMgdm9pZCB4ZW5fc21wX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGkoY29uc3Qgc3Ry dWN0IGNwdW1hc2sgKm1hc2spCi17Ci0JaW50IGNwdTsKLQotCV9feGVuX3NlbmRfSVBJX21hc2so bWFzaywgWEVOX0NBTExfRlVOQ1RJT05fVkVDVE9SKTsKLQotCS8qIE1ha2Ugc3VyZSBvdGhlciB2 Y3B1cyBnZXQgYSBjaGFuY2UgdG8gcnVuIGlmIHRoZXkgbmVlZCB0by4gKi8KLQlmb3JfZWFjaF9j cHUoY3B1LCBtYXNrKSB7Ci0JCWlmICh4ZW5fdmNwdV9zdG9sZW4oY3B1KSkgewotCQkJSFlQRVJW SVNPUl9zY2hlZF9vcChTQ0hFRE9QX3lpZWxkLCBOVUxMKTsKLQkJCWJyZWFrOwotCQl9Ci0JfQot fQotCi1zdGF0aWMgdm9pZCB4ZW5fc21wX3NlbmRfY2FsbF9mdW5jdGlvbl9zaW5nbGVfaXBpKGlu dCBjcHUpCi17Ci0JX194ZW5fc2VuZF9JUElfbWFzayhjcHVtYXNrX29mKGNwdSksCi0JCQkgIFhF Tl9DQUxMX0ZVTkNUSU9OX1NJTkdMRV9WRUNUT1IpOwotfQotCi1zdGF0aWMgaW5saW5lIGludCB4 ZW5fbWFwX3ZlY3RvcihpbnQgdmVjdG9yKQotewotCWludCB4ZW5fdmVjdG9yOwotCi0Jc3dpdGNo ICh2ZWN0b3IpIHsKLQljYXNlIFJFU0NIRURVTEVfVkVDVE9SOgotCQl4ZW5fdmVjdG9yID0gWEVO X1JFU0NIRURVTEVfVkVDVE9SOwotCQlicmVhazsKLQljYXNlIENBTExfRlVOQ1RJT05fVkVDVE9S OgotCQl4ZW5fdmVjdG9yID0gWEVOX0NBTExfRlVOQ1RJT05fVkVDVE9SOwotCQlicmVhazsKLQlj YXNlIENBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUjoKLQkJeGVuX3ZlY3RvciA9IFhFTl9DQUxM X0ZVTkNUSU9OX1NJTkdMRV9WRUNUT1I7Ci0JCWJyZWFrOwotCWNhc2UgSVJRX1dPUktfVkVDVE9S OgotCQl4ZW5fdmVjdG9yID0gWEVOX0lSUV9XT1JLX1ZFQ1RPUjsKLQkJYnJlYWs7Ci0jaWZkZWYg Q09ORklHX1g4Nl82NAotCWNhc2UgTk1JX1ZFQ1RPUjoKLQljYXNlIEFQSUNfRE1fTk1JOiAvKiBT b21lIHVzZSB0aGF0IGluc3RlYWQgb2YgTk1JX1ZFQ1RPUiAqLwotCQl4ZW5fdmVjdG9yID0gWEVO X05NSV9WRUNUT1I7Ci0JCWJyZWFrOwotI2VuZGlmCi0JZGVmYXVsdDoKLQkJeGVuX3ZlY3RvciA9 IC0xOwotCQlwcmludGsoS0VSTl9FUlIgInhlbjogdmVjdG9yIDB4JXggaXMgbm90IGltcGxlbWVu dGVkXG4iLAotCQkJdmVjdG9yKTsKLQl9Ci0KLQlyZXR1cm4geGVuX3ZlY3RvcjsKLX0KLQotdm9p ZCB4ZW5fc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywKLQkJCSAgICAg IGludCB2ZWN0b3IpCi17Ci0JaW50IHhlbl92ZWN0b3IgPSB4ZW5fbWFwX3ZlY3Rvcih2ZWN0b3Ip OwotCi0JaWYgKHhlbl92ZWN0b3IgPj0gMCkKLQkJX194ZW5fc2VuZF9JUElfbWFzayhtYXNrLCB4 ZW5fdmVjdG9yKTsKLX0KLQotdm9pZCB4ZW5fc2VuZF9JUElfYWxsKGludCB2ZWN0b3IpCi17Ci0J aW50IHhlbl92ZWN0b3IgPSB4ZW5fbWFwX3ZlY3Rvcih2ZWN0b3IpOwotCi0JaWYgKHhlbl92ZWN0 b3IgPj0gMCkKLQkJX194ZW5fc2VuZF9JUElfbWFzayhjcHVfb25saW5lX21hc2ssIHhlbl92ZWN0 b3IpOwotfQotCi12b2lkIHhlbl9zZW5kX0lQSV9zZWxmKGludCB2ZWN0b3IpCi17Ci0JaW50IHhl bl92ZWN0b3IgPSB4ZW5fbWFwX3ZlY3Rvcih2ZWN0b3IpOwotCi0JaWYgKHhlbl92ZWN0b3IgPj0g MCkKLQkJeGVuX3NlbmRfSVBJX29uZShzbXBfcHJvY2Vzc29yX2lkKCksIHhlbl92ZWN0b3IpOwot fQotCi12b2lkIHhlbl9zZW5kX0lQSV9tYXNrX2FsbGJ1dHNlbGYoY29uc3Qgc3RydWN0IGNwdW1h c2sgKm1hc2ssCi0JCQkJaW50IHZlY3RvcikKLXsKLQl1bnNpZ25lZCBjcHU7Ci0JdW5zaWduZWQg aW50IHRoaXNfY3B1ID0gc21wX3Byb2Nlc3Nvcl9pZCgpOwotCWludCB4ZW5fdmVjdG9yID0geGVu X21hcF92ZWN0b3IodmVjdG9yKTsKLQotCWlmICghKG51bV9vbmxpbmVfY3B1cygpID4gMSkgfHwg KHhlbl92ZWN0b3IgPCAwKSkKLQkJcmV0dXJuOwotCi0JZm9yX2VhY2hfY3B1X2FuZChjcHUsIG1h c2ssIGNwdV9vbmxpbmVfbWFzaykgewotCQlpZiAodGhpc19jcHUgPT0gY3B1KQotCQkJY29udGlu dWU7Ci0KLQkJeGVuX3NlbmRfSVBJX29uZShjcHUsIHhlbl92ZWN0b3IpOwotCX0KLX0KLQotdm9p ZCB4ZW5fc2VuZF9JUElfYWxsYnV0c2VsZihpbnQgdmVjdG9yKQotewotCXhlbl9zZW5kX0lQSV9t YXNrX2FsbGJ1dHNlbGYoY3B1X29ubGluZV9tYXNrLCB2ZWN0b3IpOwotfQotCi1zdGF0aWMgaXJx cmV0dXJuX3QgeGVuX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRldl9p ZCkKLXsKLQlpcnFfZW50ZXIoKTsKLQlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVycnVw dCgpOwotCWluY19pcnFfc3RhdChpcnFfY2FsbF9jb3VudCk7Ci0JaXJxX2V4aXQoKTsKLQotCXJl dHVybiBJUlFfSEFORExFRDsKLX0KLQotc3RhdGljIGlycXJldHVybl90IHhlbl9jYWxsX2Z1bmN0 aW9uX3NpbmdsZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQotewotCWlycV9lbnRl cigpOwotCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOwotCWlu Y19pcnFfc3RhdChpcnFfY2FsbF9jb3VudCk7Ci0JaXJxX2V4aXQoKTsKLQotCXJldHVybiBJUlFf SEFORExFRDsKLX0KLQogc3RhdGljIGlycXJldHVybl90IHhlbl9pcnFfd29ya19pbnRlcnJ1cHQo aW50IGlycSwgdm9pZCAqZGV2X2lkKQogewogCWlycV9lbnRlcigpOwpAQCAtNzQ0LDE0ICs1MDEs MTMgQEAgc3RhdGljIGlycXJldHVybl90IHhlbl9pcnFfd29ya19pbnRlcnJ1cHQoaW50IGlycSwg dm9pZCAqZGV2X2lkKQogCXJldHVybiBJUlFfSEFORExFRDsKIH0KIAotI2lmZGVmIENPTkZJR19Y RU5fUFYKIHN0YXRpYyBjb25zdCBzdHJ1Y3Qgc21wX29wcyB4ZW5fc21wX29wcyBfX2luaXRjb25z dCA9IHsKIAkuc21wX3ByZXBhcmVfYm9vdF9jcHUgPSB4ZW5fc21wX3ByZXBhcmVfYm9vdF9jcHUs CiAJLnNtcF9wcmVwYXJlX2NwdXMgPSB4ZW5fc21wX3ByZXBhcmVfY3B1cywKIAkuc21wX2NwdXNf ZG9uZSA9IHhlbl9zbXBfY3B1c19kb25lLAogCiAJLmNwdV91cCA9IHhlbl9jcHVfdXAsCi0JLmNw dV9kaWUgPSB4ZW5fY3B1X2RpZSwKKwkuY3B1X2RpZSA9IHhlbl9jcHVfZGllX3B2LAogCS5jcHVf ZGlzYWJsZSA9IHhlbl9jcHVfZGlzYWJsZSwKIAkucGxheV9kZWFkID0geGVuX3BsYXlfZGVhZCwK IApAQCAtNzY3LDIyICs1MjMsMyBAQCB2b2lkIF9faW5pdCB4ZW5fc21wX2luaXQodm9pZCkKIAlz bXBfb3BzID0geGVuX3NtcF9vcHM7CiAJeGVuX2ZpbGxfcG9zc2libGVfbWFwKCk7CiB9Ci0jZW5k aWYKLQotc3RhdGljIHZvaWQgX19pbml0IHhlbl9odm1fc21wX3ByZXBhcmVfY3B1cyh1bnNpZ25l ZCBpbnQgbWF4X2NwdXMpCi17Ci0JbmF0aXZlX3NtcF9wcmVwYXJlX2NwdXMobWF4X2NwdXMpOwot CVdBUk5fT04oeGVuX3NtcF9pbnRyX2luaXQoMCkpOwotCi0JeGVuX2luaXRfbG9ja19jcHUoMCk7 Ci19Ci0KLXZvaWQgX19pbml0IHhlbl9odm1fc21wX2luaXQodm9pZCkKLXsKLQlzbXBfb3BzLnNt cF9wcmVwYXJlX2NwdXMgPSB4ZW5faHZtX3NtcF9wcmVwYXJlX2NwdXM7Ci0Jc21wX29wcy5zbXBf c2VuZF9yZXNjaGVkdWxlID0geGVuX3NtcF9zZW5kX3Jlc2NoZWR1bGU7Ci0Jc21wX29wcy5jcHVf ZGllID0geGVuX2NwdV9kaWU7Ci0Jc21wX29wcy5zZW5kX2NhbGxfZnVuY19pcGkgPSB4ZW5fc21w X3NlbmRfY2FsbF9mdW5jdGlvbl9pcGk7Ci0Jc21wX29wcy5zZW5kX2NhbGxfZnVuY19zaW5nbGVf aXBpID0geGVuX3NtcF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaTsKLQlzbXBfb3BzLnNt cF9wcmVwYXJlX2Jvb3RfY3B1ID0geGVuX3NtcF9wcmVwYXJlX2Jvb3RfY3B1OwotfQpkaWZmIC0t Z2l0IGEvYXJjaC94ODYveGVuL3NtcC5oIGIvYXJjaC94ODYveGVuL3NtcC5oCmluZGV4IGM1YzE2 ZGMuLjk0ZWQ1Y2MgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L3hlbi9zbXAuaAorKysgYi9hcmNoL3g4 Ni94ZW4vc21wLmgKQEAgLTgsOSArOCwyMiBAQCBleHRlcm4gdm9pZCB4ZW5fc2VuZF9JUElfbWFz a19hbGxidXRzZWxmKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrLAogZXh0ZXJuIHZvaWQgeGVu X3NlbmRfSVBJX2FsbGJ1dHNlbGYoaW50IHZlY3Rvcik7CiBleHRlcm4gdm9pZCB4ZW5fc2VuZF9J UElfYWxsKGludCB2ZWN0b3IpOwogZXh0ZXJuIHZvaWQgeGVuX3NlbmRfSVBJX3NlbGYoaW50IHZl Y3Rvcik7CitleHRlcm4gdm9pZCB4ZW5fc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFz ayAqbWFzaywgaW50IHZlY3Rvcik7CiAKIGV4dGVybiBpbnQgeGVuX3NtcF9pbnRyX2luaXQodW5z aWduZWQgaW50IGNwdSk7CiBleHRlcm4gdm9pZCB4ZW5fc21wX2ludHJfZnJlZSh1bnNpZ25lZCBp bnQgY3B1KTsKKyNpZmRlZiBDT05GSUdfWEVOX1BWCitleHRlcm4gaW50IHhlbl9zbXBfaW50cl9p bml0X3B2KHVuc2lnbmVkIGludCBjcHUpOworZXh0ZXJuIHZvaWQgeGVuX3NtcF9pbnRyX2ZyZWVf cHYodW5zaWduZWQgaW50IGNwdSk7CisjZW5kaWYKK2V4dGVybiB2b2lkIHhlbl9zbXBfc2VuZF9y ZXNjaGVkdWxlKGludCBjcHUpOworZXh0ZXJuIHZvaWQgeGVuX3NtcF9zZW5kX2NhbGxfZnVuY3Rp b25faXBpKGNvbnN0IHN0cnVjdCBjcHVtYXNrICptYXNrKTsKK2V4dGVybiB2b2lkIHhlbl9zbXBf c2VuZF9jYWxsX2Z1bmN0aW9uX3NpbmdsZV9pcGkoaW50IGNwdSk7CisKK3N0cnVjdCB4ZW5fY29t bW9uX2lycSB7CisJaW50IGlycTsKKwljaGFyICpuYW1lOworfTsKIAogI2Vsc2UgLyogQ09ORklH X1NNUCAqLwogCkBAIC0xOCw2ICszMSwxNiBAQCBzdGF0aWMgaW5saW5lIGludCB4ZW5fc21wX2lu dHJfaW5pdCh1bnNpZ25lZCBpbnQgY3B1KQogewogCXJldHVybiAwOwogfQorCisjaWZkZWYgQ09O RklHX1hFTl9QVgorc3RhdGljIGlubGluZSBpbnQgeGVuX3NtcF9pbnRyX2luaXRfcHYodW5zaWdu ZWQgaW50IGNwdSkKK3sKKwlyZXR1cm4gMDsKK30KKworc3RhdGljIGlubGluZSB2b2lkIHhlbl9z bXBfaW50cl9mcmVlX3B2KHVuc2lnbmVkIGludCBjcHUpIHt9CisjZW5kaWYKKwogc3RhdGljIGlu bGluZSB2b2lkIHhlbl9zbXBfaW50cl9mcmVlKHVuc2lnbmVkIGludCBjcHUpIHt9CiAjZW5kaWYg LyogQ09ORklHX1NNUCAqLwogCmRpZmYgLS1naXQgYS9hcmNoL3g4Ni94ZW4vc21wX2NvbW1vbi5j IGIvYXJjaC94ODYveGVuL3NtcF9jb21tb24uYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi43YTM5Y2FkCi0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYveGVuL3NtcF9jb21t b24uYwpAQCAtMCwwICsxLDI0NiBAQAorI2luY2x1ZGUgPGxpbnV4L3NtcC5oPgorI2luY2x1ZGUg PGxpbnV4L3NsYWIuaD4KKyNpbmNsdWRlIDxsaW51eC9jcHVtYXNrLmg+CisjaW5jbHVkZSA8bGlu dXgvcGVyY3B1Lmg+CisKKyNpbmNsdWRlIDx4ZW4vZXZlbnRzLmg+CisKKyNpbmNsdWRlICJ4ZW4t b3BzLmgiCisjaW5jbHVkZSAicG11LmgiCisjaW5jbHVkZSAic21wLmgiCisKK3N0YXRpYyBERUZJ TkVfUEVSX0NQVShzdHJ1Y3QgeGVuX2NvbW1vbl9pcnEsIHhlbl9yZXNjaGVkX2lycSkgPSB7IC5p cnEgPSAtMSB9Oworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB4ZW5fY29tbW9uX2lycSwg eGVuX2NhbGxmdW5jX2lycSkgPSB7IC5pcnEgPSAtMSB9Oworc3RhdGljIERFRklORV9QRVJfQ1BV KHN0cnVjdCB4ZW5fY29tbW9uX2lycSwgeGVuX2NhbGxmdW5jc2luZ2xlX2lycSkgPSB7IC5pcnEg PSAtMSB9Oworc3RhdGljIERFRklORV9QRVJfQ1BVKHN0cnVjdCB4ZW5fY29tbW9uX2lycSwgeGVu X2RlYnVnX2lycSkgPSB7IC5pcnEgPSAtMSB9OworCisvKgorICogUmVzY2hlZHVsZSBjYWxsIGJh Y2suCisgKi8KK3N0YXRpYyBpcnFyZXR1cm5fdCB4ZW5fcmVzY2hlZHVsZV9pbnRlcnJ1cHQoaW50 IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWluY19pcnFfc3RhdChpcnFfcmVzY2hlZF9jb3VudCk7 CisJc2NoZWR1bGVyX2lwaSgpOworCisJcmV0dXJuIElSUV9IQU5ETEVEOworfQorCitzdGF0aWMg aXJxcmV0dXJuX3QgeGVuX2NhbGxfZnVuY3Rpb25faW50ZXJydXB0KGludCBpcnEsIHZvaWQgKmRl dl9pZCkKK3sKKwlpcnFfZW50ZXIoKTsKKwlnZW5lcmljX3NtcF9jYWxsX2Z1bmN0aW9uX2ludGVy cnVwdCgpOworCWluY19pcnFfc3RhdChpcnFfY2FsbF9jb3VudCk7CisJaXJxX2V4aXQoKTsKKwor CXJldHVybiBJUlFfSEFORExFRDsKK30KKworc3RhdGljIGlycXJldHVybl90IHhlbl9jYWxsX2Z1 bmN0aW9uX3NpbmdsZV9pbnRlcnJ1cHQoaW50IGlycSwgdm9pZCAqZGV2X2lkKQoreworCWlycV9l bnRlcigpOworCWdlbmVyaWNfc21wX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2ludGVycnVwdCgpOwor CWluY19pcnFfc3RhdChpcnFfY2FsbF9jb3VudCk7CisJaXJxX2V4aXQoKTsKKworCXJldHVybiBJ UlFfSEFORExFRDsKK30KKwordm9pZCB4ZW5fc21wX2ludHJfZnJlZSh1bnNpZ25lZCBpbnQgY3B1 KQoreworCWlmIChwZXJfY3B1KHhlbl9yZXNjaGVkX2lycSwgY3B1KS5pcnEgPj0gMCkgeworCQl1 bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHBlcl9jcHUoeGVuX3Jlc2NoZWRfaXJxLCBjcHUpLmlycSwg TlVMTCk7CisJCXBlcl9jcHUoeGVuX3Jlc2NoZWRfaXJxLCBjcHUpLmlycSA9IC0xOworCQlrZnJl ZShwZXJfY3B1KHhlbl9yZXNjaGVkX2lycSwgY3B1KS5uYW1lKTsKKwkJcGVyX2NwdSh4ZW5fcmVz Y2hlZF9pcnEsIGNwdSkubmFtZSA9IE5VTEw7CisJfQorCWlmIChwZXJfY3B1KHhlbl9jYWxsZnVu Y19pcnEsIGNwdSkuaXJxID49IDApIHsKKwkJdW5iaW5kX2Zyb21faXJxaGFuZGxlcihwZXJfY3B1 KHhlbl9jYWxsZnVuY19pcnEsIGNwdSkuaXJxLCBOVUxMKTsKKwkJcGVyX2NwdSh4ZW5fY2FsbGZ1 bmNfaXJxLCBjcHUpLmlycSA9IC0xOworCQlrZnJlZShwZXJfY3B1KHhlbl9jYWxsZnVuY19pcnEs IGNwdSkubmFtZSk7CisJCXBlcl9jcHUoeGVuX2NhbGxmdW5jX2lycSwgY3B1KS5uYW1lID0gTlVM TDsKKwl9CisJaWYgKHBlcl9jcHUoeGVuX2RlYnVnX2lycSwgY3B1KS5pcnEgPj0gMCkgeworCQl1 bmJpbmRfZnJvbV9pcnFoYW5kbGVyKHBlcl9jcHUoeGVuX2RlYnVnX2lycSwgY3B1KS5pcnEsIE5V TEwpOworCQlwZXJfY3B1KHhlbl9kZWJ1Z19pcnEsIGNwdSkuaXJxID0gLTE7CisJCWtmcmVlKHBl cl9jcHUoeGVuX2RlYnVnX2lycSwgY3B1KS5uYW1lKTsKKwkJcGVyX2NwdSh4ZW5fZGVidWdfaXJx LCBjcHUpLm5hbWUgPSBOVUxMOworCX0KKwlpZiAocGVyX2NwdSh4ZW5fY2FsbGZ1bmNzaW5nbGVf aXJxLCBjcHUpLmlycSA+PSAwKSB7CisJCXVuYmluZF9mcm9tX2lycWhhbmRsZXIocGVyX2NwdSh4 ZW5fY2FsbGZ1bmNzaW5nbGVfaXJxLCBjcHUpLmlycSwKKwkJCQkgICAgICAgTlVMTCk7CisJCXBl cl9jcHUoeGVuX2NhbGxmdW5jc2luZ2xlX2lycSwgY3B1KS5pcnEgPSAtMTsKKwkJa2ZyZWUocGVy X2NwdSh4ZW5fY2FsbGZ1bmNzaW5nbGVfaXJxLCBjcHUpLm5hbWUpOworCQlwZXJfY3B1KHhlbl9j YWxsZnVuY3NpbmdsZV9pcnEsIGNwdSkubmFtZSA9IE5VTEw7CisJfQorfQorCitpbnQgeGVuX3Nt cF9pbnRyX2luaXQodW5zaWduZWQgaW50IGNwdSkKK3sKKwlpbnQgcmM7CisJY2hhciAqcmVzY2hl ZF9uYW1lLCAqY2FsbGZ1bmNfbmFtZSwgKmRlYnVnX25hbWU7CisKKwlyZXNjaGVkX25hbWUgPSBr YXNwcmludGYoR0ZQX0tFUk5FTCwgInJlc2NoZWQlZCIsIGNwdSk7CisJcmMgPSBiaW5kX2lwaV90 b19pcnFoYW5kbGVyKFhFTl9SRVNDSEVEVUxFX1ZFQ1RPUiwKKwkJCQkgICAgY3B1LAorCQkJCSAg ICB4ZW5fcmVzY2hlZHVsZV9pbnRlcnJ1cHQsCisJCQkJICAgIElSUUZfUEVSQ1BVfElSUUZfTk9C QUxBTkNJTkcsCisJCQkJICAgIHJlc2NoZWRfbmFtZSwKKwkJCQkgICAgTlVMTCk7CisJaWYgKHJj IDwgMCkKKwkJZ290byBmYWlsOworCXBlcl9jcHUoeGVuX3Jlc2NoZWRfaXJxLCBjcHUpLmlycSA9 IHJjOworCXBlcl9jcHUoeGVuX3Jlc2NoZWRfaXJxLCBjcHUpLm5hbWUgPSByZXNjaGVkX25hbWU7 CisKKwljYWxsZnVuY19uYW1lID0ga2FzcHJpbnRmKEdGUF9LRVJORUwsICJjYWxsZnVuYyVkIiwg Y3B1KTsKKwlyYyA9IGJpbmRfaXBpX3RvX2lycWhhbmRsZXIoWEVOX0NBTExfRlVOQ1RJT05fVkVD VE9SLAorCQkJCSAgICBjcHUsCisJCQkJICAgIHhlbl9jYWxsX2Z1bmN0aW9uX2ludGVycnVwdCwK KwkJCQkgICAgSVJRRl9QRVJDUFV8SVJRRl9OT0JBTEFOQ0lORywKKwkJCQkgICAgY2FsbGZ1bmNf bmFtZSwKKwkJCQkgICAgTlVMTCk7CisJaWYgKHJjIDwgMCkKKwkJZ290byBmYWlsOworCXBlcl9j cHUoeGVuX2NhbGxmdW5jX2lycSwgY3B1KS5pcnEgPSByYzsKKwlwZXJfY3B1KHhlbl9jYWxsZnVu Y19pcnEsIGNwdSkubmFtZSA9IGNhbGxmdW5jX25hbWU7CisKKwlkZWJ1Z19uYW1lID0ga2FzcHJp bnRmKEdGUF9LRVJORUwsICJkZWJ1ZyVkIiwgY3B1KTsKKwlyYyA9IGJpbmRfdmlycV90b19pcnFo YW5kbGVyKFZJUlFfREVCVUcsIGNwdSwgeGVuX2RlYnVnX2ludGVycnVwdCwKKwkJCQkgICAgIElS UUZfUEVSQ1BVIHwgSVJRRl9OT0JBTEFOQ0lORywKKwkJCQkgICAgIGRlYnVnX25hbWUsIE5VTEwp OworCWlmIChyYyA8IDApCisJCWdvdG8gZmFpbDsKKwlwZXJfY3B1KHhlbl9kZWJ1Z19pcnEsIGNw dSkuaXJxID0gcmM7CisJcGVyX2NwdSh4ZW5fZGVidWdfaXJxLCBjcHUpLm5hbWUgPSBkZWJ1Z19u YW1lOworCisJY2FsbGZ1bmNfbmFtZSA9IGthc3ByaW50ZihHRlBfS0VSTkVMLCAiY2FsbGZ1bmNz aW5nbGUlZCIsIGNwdSk7CisJcmMgPSBiaW5kX2lwaV90b19pcnFoYW5kbGVyKFhFTl9DQUxMX0ZV TkNUSU9OX1NJTkdMRV9WRUNUT1IsCisJCQkJICAgIGNwdSwKKwkJCQkgICAgeGVuX2NhbGxfZnVu Y3Rpb25fc2luZ2xlX2ludGVycnVwdCwKKwkJCQkgICAgSVJRRl9QRVJDUFV8SVJRRl9OT0JBTEFO Q0lORywKKwkJCQkgICAgY2FsbGZ1bmNfbmFtZSwKKwkJCQkgICAgTlVMTCk7CisJaWYgKHJjIDwg MCkKKwkJZ290byBmYWlsOworCXBlcl9jcHUoeGVuX2NhbGxmdW5jc2luZ2xlX2lycSwgY3B1KS5p cnEgPSByYzsKKwlwZXJfY3B1KHhlbl9jYWxsZnVuY3NpbmdsZV9pcnEsIGNwdSkubmFtZSA9IGNh bGxmdW5jX25hbWU7CisKKwlyZXR1cm4gMDsKKworIGZhaWw6CisJeGVuX3NtcF9pbnRyX2ZyZWUo Y3B1KTsKKwlyZXR1cm4gcmM7Cit9CisKK3ZvaWQgeGVuX3NtcF9zZW5kX3Jlc2NoZWR1bGUoaW50 IGNwdSkKK3sKKwl4ZW5fc2VuZF9JUElfb25lKGNwdSwgWEVOX1JFU0NIRURVTEVfVkVDVE9SKTsK K30KKworc3RhdGljIHZvaWQgX194ZW5fc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFz ayAqbWFzaywKKwkJCQlpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGNwdTsKKworCWZvcl9lYWNo X2NwdV9hbmQoY3B1LCBtYXNrLCBjcHVfb25saW5lX21hc2spCisJCXhlbl9zZW5kX0lQSV9vbmUo Y3B1LCB2ZWN0b3IpOworfQorCit2b2lkIHhlbl9zbXBfc2VuZF9jYWxsX2Z1bmN0aW9uX2lwaShj b25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaykKK3sKKwlpbnQgY3B1OworCisJX194ZW5fc2VuZF9J UElfbWFzayhtYXNrLCBYRU5fQ0FMTF9GVU5DVElPTl9WRUNUT1IpOworCisJLyogTWFrZSBzdXJl IG90aGVyIHZjcHVzIGdldCBhIGNoYW5jZSB0byBydW4gaWYgdGhleSBuZWVkIHRvLiAqLworCWZv cl9lYWNoX2NwdShjcHUsIG1hc2spIHsKKwkJaWYgKHhlbl92Y3B1X3N0b2xlbihjcHUpKSB7CisJ CQlIWVBFUlZJU09SX3NjaGVkX29wKFNDSEVET1BfeWllbGQsIE5VTEwpOworCQkJYnJlYWs7CisJ CX0KKwl9Cit9CisKK3ZvaWQgeGVuX3NtcF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaShp bnQgY3B1KQoreworCV9feGVuX3NlbmRfSVBJX21hc2soY3B1bWFza19vZihjcHUpLAorCQkJICAg IFhFTl9DQUxMX0ZVTkNUSU9OX1NJTkdMRV9WRUNUT1IpOworfQorCitzdGF0aWMgaW5saW5lIGlu dCB4ZW5fbWFwX3ZlY3RvcihpbnQgdmVjdG9yKQoreworCWludCB4ZW5fdmVjdG9yOworCisJc3dp dGNoICh2ZWN0b3IpIHsKKwljYXNlIFJFU0NIRURVTEVfVkVDVE9SOgorCQl4ZW5fdmVjdG9yID0g WEVOX1JFU0NIRURVTEVfVkVDVE9SOworCQlicmVhazsKKwljYXNlIENBTExfRlVOQ1RJT05fVkVD VE9SOgorCQl4ZW5fdmVjdG9yID0gWEVOX0NBTExfRlVOQ1RJT05fVkVDVE9SOworCQlicmVhazsK KwljYXNlIENBTExfRlVOQ1RJT05fU0lOR0xFX1ZFQ1RPUjoKKwkJeGVuX3ZlY3RvciA9IFhFTl9D QUxMX0ZVTkNUSU9OX1NJTkdMRV9WRUNUT1I7CisJCWJyZWFrOworCWNhc2UgSVJRX1dPUktfVkVD VE9SOgorCQl4ZW5fdmVjdG9yID0gWEVOX0lSUV9XT1JLX1ZFQ1RPUjsKKwkJYnJlYWs7CisjaWZk ZWYgQ09ORklHX1g4Nl82NAorCWNhc2UgTk1JX1ZFQ1RPUjoKKwljYXNlIEFQSUNfRE1fTk1JOiAv KiBTb21lIHVzZSB0aGF0IGluc3RlYWQgb2YgTk1JX1ZFQ1RPUiAqLworCQl4ZW5fdmVjdG9yID0g WEVOX05NSV9WRUNUT1I7CisJCWJyZWFrOworI2VuZGlmCisJZGVmYXVsdDoKKwkJeGVuX3ZlY3Rv ciA9IC0xOworCQlwcmludGsoS0VSTl9FUlIgInhlbjogdmVjdG9yIDB4JXggaXMgbm90IGltcGxl bWVudGVkXG4iLAorCQkJdmVjdG9yKTsKKwl9CisKKwlyZXR1cm4geGVuX3ZlY3RvcjsKK30KKwor dm9pZCB4ZW5fc2VuZF9JUElfbWFzayhjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFzaywgaW50IHZl Y3RvcikKK3sKKwlpbnQgeGVuX3ZlY3RvciA9IHhlbl9tYXBfdmVjdG9yKHZlY3Rvcik7CisKKwlp ZiAoeGVuX3ZlY3RvciA+PSAwKQorCQlfX3hlbl9zZW5kX0lQSV9tYXNrKG1hc2ssIHhlbl92ZWN0 b3IpOworfQorCit2b2lkIHhlbl9zZW5kX0lQSV9hbGwoaW50IHZlY3RvcikKK3sKKwlpbnQgeGVu X3ZlY3RvciA9IHhlbl9tYXBfdmVjdG9yKHZlY3Rvcik7CisKKwlpZiAoeGVuX3ZlY3RvciA+PSAw KQorCQlfX3hlbl9zZW5kX0lQSV9tYXNrKGNwdV9vbmxpbmVfbWFzaywgeGVuX3ZlY3Rvcik7Cit9 CisKK3ZvaWQgeGVuX3NlbmRfSVBJX3NlbGYoaW50IHZlY3RvcikKK3sKKwlpbnQgeGVuX3ZlY3Rv ciA9IHhlbl9tYXBfdmVjdG9yKHZlY3Rvcik7CisKKwlpZiAoeGVuX3ZlY3RvciA+PSAwKQorCQl4 ZW5fc2VuZF9JUElfb25lKHNtcF9wcm9jZXNzb3JfaWQoKSwgeGVuX3ZlY3Rvcik7Cit9CisKK3Zv aWQgeGVuX3NlbmRfSVBJX21hc2tfYWxsYnV0c2VsZihjb25zdCBzdHJ1Y3QgY3B1bWFzayAqbWFz aywKKwkJCQlpbnQgdmVjdG9yKQoreworCXVuc2lnbmVkIGNwdTsKKwl1bnNpZ25lZCBpbnQgdGhp c19jcHUgPSBzbXBfcHJvY2Vzc29yX2lkKCk7CisJaW50IHhlbl92ZWN0b3IgPSB4ZW5fbWFwX3Zl Y3Rvcih2ZWN0b3IpOworCisJaWYgKCEobnVtX29ubGluZV9jcHVzKCkgPiAxKSB8fCAoeGVuX3Zl Y3RvciA8IDApKQorCQlyZXR1cm47CisKKwlmb3JfZWFjaF9jcHVfYW5kKGNwdSwgbWFzaywgY3B1 X29ubGluZV9tYXNrKSB7CisJCWlmICh0aGlzX2NwdSA9PSBjcHUpCisJCQljb250aW51ZTsKKwor CQl4ZW5fc2VuZF9JUElfb25lKGNwdSwgeGVuX3ZlY3Rvcik7CisJfQorfQorCit2b2lkIHhlbl9z ZW5kX0lQSV9hbGxidXRzZWxmKGludCB2ZWN0b3IpCit7CisJeGVuX3NlbmRfSVBJX21hc2tfYWxs YnV0c2VsZihjcHVfb25saW5lX21hc2ssIHZlY3Rvcik7Cit9CmRpZmYgLS1naXQgYS9hcmNoL3g4 Ni94ZW4vc21wX2h2bS5jIGIvYXJjaC94ODYveGVuL3NtcF9odm0uYwpuZXcgZmlsZSBtb2RlIDEw MDY0NAppbmRleCAwMDAwMDAwLi5jZTRmZjU5Ci0tLSAvZGV2L251bGwKKysrIGIvYXJjaC94ODYv eGVuL3NtcF9odm0uYwpAQCAtMCwwICsxLDU0IEBACisjaW5jbHVkZSA8YXNtL3NtcC5oPgorCisj aW5jbHVkZSAieGVuLW9wcy5oIgorI2luY2x1ZGUgInNtcC5oIgorCitzdGF0aWMgdm9pZCBfX2lu aXQgeGVuX3NtcF9wcmVwYXJlX2Jvb3RfY3B1X2h2bSh2b2lkKQoreworCUJVR19PTihzbXBfcHJv Y2Vzc29yX2lkKCkgIT0gMCk7CisJbmF0aXZlX3NtcF9wcmVwYXJlX2Jvb3RfY3B1KCk7CisKKwl4 ZW5fdmNwdV9zZXR1cCgwKTsKKworCS8qCisJICogVGhlIGFsdGVybmF0aXZlIGxvZ2ljICh3aGlj aCBwYXRjaGVzIHRoZSB1bmxvY2svbG9jaykgcnVucyBiZWZvcmUKKwkgKiB0aGUgc21wIGJvb3R1 cCB1cCBjb2RlIGlzIGFjdGl2YXRlZC4gSGVuY2Ugd2UgbmVlZCB0byBzZXQgdGhpcyB1cAorCSAq IHRoZSBjb3JlIGtlcm5lbCBpcyBiZWluZyBwYXRjaGVkLiBPdGhlcndpc2Ugd2Ugd2lsbCBoYXZl IG9ubHkKKwkgKiBtb2R1bGVzIHBhdGNoZWQgYnV0IG5vdCBjb3JlIGNvZGUuCisJICovCisJeGVu X2luaXRfc3BpbmxvY2tzKCk7Cit9CisKK3N0YXRpYyB2b2lkIF9faW5pdCB4ZW5faHZtX3NtcF9w cmVwYXJlX2NwdXModW5zaWduZWQgaW50IG1heF9jcHVzKQoreworCW5hdGl2ZV9zbXBfcHJlcGFy ZV9jcHVzKG1heF9jcHVzKTsKKwlXQVJOX09OKHhlbl9zbXBfaW50cl9pbml0KDApKTsKKworCXhl bl9pbml0X2xvY2tfY3B1KDApOworfQorCisjaWZkZWYgQ09ORklHX0hPVFBMVUdfQ1BVCit2b2lk IHhlbl9jcHVfZGllX2h2bSh1bnNpZ25lZCBpbnQgY3B1KQoreworCWlmIChjb21tb25fY3B1X2Rp ZShjcHUpID09IDApIHsKKwkJeGVuX3NtcF9pbnRyX2ZyZWUoY3B1KTsKKwkJeGVuX3VuaW5pdF9s b2NrX2NwdShjcHUpOworCQl4ZW5fdGVhcmRvd25fdGltZXIoY3B1KTsKKwl9Cit9CisjZWxzZQor c3RhdGljIHZvaWQgeGVuX2NwdV9kaWVfaHZtKHVuc2lnbmVkIGludCBjcHUpCit7CisJQlVHKCk7 Cit9CisjZW5kaWYKKwordm9pZCBfX2luaXQgeGVuX2h2bV9zbXBfaW5pdCh2b2lkKQoreworCXNt cF9vcHMuc21wX3ByZXBhcmVfY3B1cyA9IHhlbl9odm1fc21wX3ByZXBhcmVfY3B1czsKKwlzbXBf b3BzLnNtcF9zZW5kX3Jlc2NoZWR1bGUgPSB4ZW5fc21wX3NlbmRfcmVzY2hlZHVsZTsKKwlzbXBf b3BzLmNwdV9kaWUgPSB4ZW5fY3B1X2RpZV9odm07CisJc21wX29wcy5zZW5kX2NhbGxfZnVuY19p cGkgPSB4ZW5fc21wX3NlbmRfY2FsbF9mdW5jdGlvbl9pcGk7CisJc21wX29wcy5zZW5kX2NhbGxf ZnVuY19zaW5nbGVfaXBpID0geGVuX3NtcF9zZW5kX2NhbGxfZnVuY3Rpb25fc2luZ2xlX2lwaTsK KwlzbXBfb3BzLnNtcF9wcmVwYXJlX2Jvb3RfY3B1ID0geGVuX3NtcF9wcmVwYXJlX2Jvb3RfY3B1 X2h2bTsKK30KLS0gCjIuNy40CgoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxAbGlzdHMueGVuLm9y ZwpodHRwczovL2xpc3RzLnhlbi5vcmcveGVuLWRldmVsCg==