From mboxrd@z Thu Jan 1 00:00:00 1970 From: Juergen Gross Subject: [PATCH v3 13/17] x86: allocate hypervisor L4 page table for XPTI Date: Fri, 9 Feb 2018 15:01:47 +0100 Message-ID: <20180209140151.24714-14-jgross@suse.com> References: <20180209140151.24714-1-jgross@suse.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: Received: from us1-rack-dfw2.inumbo.com ([104.130.134.6]) by lists.xenproject.org with esmtp (Exim 4.84_2) (envelope-from ) id 1ek9Ff-0003DB-5P for xen-devel@lists.xenproject.org; Fri, 09 Feb 2018 14:02:07 +0000 In-Reply-To: <20180209140151.24714-1-jgross@suse.com> List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" To: xen-devel@lists.xenproject.org Cc: Juergen Gross , andrew.cooper3@citrix.com, dfaggioli@suse.com, jbeulich@suse.com List-Id: xen-devel@lists.xenproject.org V2hlbiBYUFRJIGZvciBhIGRvbWFpbiBpcyBzd2l0Y2hlZCBvbiBhbGxvY2F0ZSBhIGh5cGVydmlz b3IgTDQgcGFnZQp0YWJsZSBmb3IgZWFjaCBndWVzdCBMNCBwYWdlIHRhYmxlLiBGb3IgcGVyZm9y bWFuY2UgcmVhc29ucyBrZWVwIGEKY2FjaGUgb2YgdGhlIGxhc3QgdXNlZCBoeXBlcnZpc29yIEw0 IHBhZ2VzIHdpdGggdGhlIG1heGltdW0gbnVtYmVyCmRlcGVuZGluZyBvbiB0aGUgbnVtYmVyIG9m IHZjcHVzIG9mIHRoZSBndWVzdC4KClNpZ25lZC1vZmYtYnk6IEp1ZXJnZW4gR3Jvc3MgPGpncm9z c0BzdXNlLmNvbT4KLS0tCiB4ZW4vYXJjaC94ODYvbW0uYyAgICAgICAgICAgICAgfCAgIDQgKwog eGVuL2FyY2gveDg2L21tL3NoYWRvdy9tdWx0aS5jIHwgICAzICsKIHhlbi9hcmNoL3g4Ni9wdi94 cHRpLmMgICAgICAgICB8IDU0OSArKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysrKysr KysrLQogeGVuL2luY2x1ZGUvYXNtLXg4Ni9kb21haW4uaCAgIHwgICAxICsKIHhlbi9pbmNsdWRl L2FzbS14ODYvcHYvbW0uaCAgICB8ICAgNCArCiA1IGZpbGVzIGNoYW5nZWQsIDU2MCBpbnNlcnRp b25zKCspLCAxIGRlbGV0aW9uKC0pCgpkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L21tLmMgYi94 ZW4vYXJjaC94ODYvbW0uYwppbmRleCBkODZlMDdlOWY4Li5mNjE1MjA0ZGJiIDEwMDY0NAotLS0g YS94ZW4vYXJjaC94ODYvbW0uYworKysgYi94ZW4vYXJjaC94ODYvbW0uYwpAQCAtNTA0LDYgKzUw NCw4IEBAIHZvaWQgZnJlZV9zaGFyZWRfZG9taGVhcF9wYWdlKHN0cnVjdCBwYWdlX2luZm8gKnBh Z2UpCiAKIHZvaWQgbWFrZV9jcjMoc3RydWN0IHZjcHUgKnYsIG1mbl90IG1mbikKIHsKKyAgICBp ZiAoIGlzX3ZjcHVfeHB0aV9hY3RpdmUodikgKQorICAgICAgICB4cHRpX21ha2VfY3IzKHYsIG1m bl94KG1mbikpOwogICAgIHYtPmFyY2guY3IzID0gbWZuX3gobWZuKSA8PCBQQUdFX1NISUZUOwog fQogCkBAIC0xODA3LDYgKzE4MDksOCBAQCBzdGF0aWMgaW50IGZyZWVfbDRfdGFibGUoc3RydWN0 IHBhZ2VfaW5mbyAqcGFnZSkKICAgICBpZiAoIHJjID49IDAgKQogICAgIHsKICAgICAgICAgYXRv bWljX2RlYygmZC0+YXJjaC5wdl9kb21haW4ubnJfbDRfcGFnZXMpOworICAgICAgICBpZiAoIGQt PmFyY2gucHZfZG9tYWluLnhwdGkgKQorICAgICAgICAgICAgeHB0aV9mcmVlX2w0KGQsIHBmbik7 CiAgICAgICAgIHJjID0gMDsKICAgICB9CiAKZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9tbS9z aGFkb3cvbXVsdGkuYyBiL3hlbi9hcmNoL3g4Ni9tbS9zaGFkb3cvbXVsdGkuYwppbmRleCBhNjM3 MmUzYTAyLi4yZDQyOTU5ZjUzIDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYvbW0vc2hhZG93L211 bHRpLmMKKysrIGIveGVuL2FyY2gveDg2L21tL3NoYWRvdy9tdWx0aS5jCkBAIC0zOCw2ICszOCw3 IEBAIGFzbSgiLmZpbGUgXCIiIF9fT0JKRUNUX0ZJTEVfXyAiXCIiKTsKICNpbmNsdWRlIDxhc20v aHZtL2h2bS5oPgogI2luY2x1ZGUgPGFzbS9odm0vY2FjaGVhdHRyLmg+CiAjaW5jbHVkZSA8YXNt L210cnIuaD4KKyNpbmNsdWRlIDxhc20vcHYvbW0uaD4KICNpbmNsdWRlIDxhc20vZ3Vlc3RfcHQu aD4KICNpbmNsdWRlIDxwdWJsaWMvc2NoZWQuaD4KICNpbmNsdWRlICJwcml2YXRlLmgiCkBAIC0x ODk1LDYgKzE4OTYsOCBAQCB2b2lkIHNoX2Rlc3Ryb3lfbDRfc2hhZG93KHN0cnVjdCBkb21haW4g KmQsIG1mbl90IHNtZm4pCiAKICAgICAvKiBQdXQgdGhlIG1lbW9yeSBiYWNrIGluIHRoZSBwb29s ICovCiAgICAgc2hhZG93X2ZyZWUoZCwgc21mbik7CisgICAgaWYgKCBpc19kb21haW5feHB0aV9h Y3RpdmUoZCkgKQorICAgICAgICB4cHRpX2ZyZWVfbDQoZCwgbWZuX3goc21mbikpOwogfQogCiB2 b2lkIHNoX2Rlc3Ryb3lfbDNfc2hhZG93KHN0cnVjdCBkb21haW4gKmQsIG1mbl90IHNtZm4pCmRp ZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvcHYveHB0aS5jIGIveGVuL2FyY2gveDg2L3B2L3hwdGku YwppbmRleCAxMzU2NTQxODA0Li5mNjYzZmFlODA2IDEwMDY0NAotLS0gYS94ZW4vYXJjaC94ODYv cHYveHB0aS5jCisrKyBiL3hlbi9hcmNoL3g4Ni9wdi94cHRpLmMKQEAgLTIyLDggKzIyLDc1IEBA CiAjaW5jbHVkZSA8eGVuL2RvbWFpbl9wYWdlLmg+CiAjaW5jbHVkZSA8eGVuL2Vycm5vLmg+CiAj aW5jbHVkZSA8eGVuL2luaXQuaD4KKyNpbmNsdWRlIDx4ZW4va2V5aGFuZGxlci5oPgogI2luY2x1 ZGUgPHhlbi9saWIuaD4KICNpbmNsdWRlIDx4ZW4vc2NoZWQuaD4KKyNpbmNsdWRlIDxhc20vYml0 b3BzLmg+CisKKy8qCisgKiBGb3IgZWFjaCBMNCBwYWdlIHRhYmxlIG9mIHRoZSBndWVzdCB3ZSBu ZWVkIGEgc2hhZG93IGZvciB0aGUgaHlwZXJ2aXNvci4KKyAqCisgKiBTdWNoIGEgc2hhZG93IGlz IGNvbnNpZGVyZWQgdG8gYmUgYWN0aXZlIHdoZW4gdGhlIGd1ZXN0IGhhcyBsb2FkZWQgaXRzCisg KiAlY3IzIG9uIGFueSB2Y3B1IHdpdGggdGhlIE1GTiBvZiB0aGUgTDQgcGFnZSB0aGUgc2hhZG93 IGlzIGFzc29jaWF0ZWQKKyAqIHdpdGguCisgKgorICogVGhlIHNoYWRvd3MgYXJlIHJlZmVyZW5j ZWQgdmlhIGFuIGFycmF5IG9mIHN0cnVjdCB4cHRpX2w0cGcuIFRoaXMgYXJyYXkKKyAqIGlzIHNl dCB1cCBhdCBkb21haW4gY3JlYXRpb24gdGltZSBhbmQgc2l6ZWQgYnkgbnVtYmVyIG9mIHZjcHVz IG9mIHRoZQorICogZG9tYWluIChOX0w0X1BFUlZDUFUgKiBtYXhfdmNwdXMpLiBUaGUgaW5kZXgg aW50byB0aGlzIGFycmF5IGlzIHVzZWQgdG8KKyAqIGFkZHJlc3MgdGhlIHNpbmdsZSB4cHRpX2w0 cGcgaW5zdGFuY2VzLgorICoKKyAqIEEgeHB0aV9sNHBnIGFzc29jaWF0ZWQgdG8gYSBndWVzdCdz IEw0IHBhZ2UgdGFibGUgaXMgcHV0IGluIGEgbGlua2VkIGxpc3QKKyAqIGFuY2hvcmVkIGluIHRo ZSB4cHRpX2w0cmVmIGhhc2ggYXJyYXkuIFRoZSBpbmRleCBpbnRvIHRoaXMgYXJyYXkgaXMgdGFr ZW4KKyAqIGZyb20gdGhlIGxvd2VyIGJpdHMgb2YgdGhlIGd1ZXN0J3MgTDQgcGFnZSB0YWJsZSBN Rk4uCisgKiBUaGUgaGFzaCBsaXN0cyBhcmUgc29ydGVkIGJ5IGEgTFJVIG1lY2hhbmlzbS4gQWRk aXRpb25hbGx5IGFsbCB4cHRpX2w0cGcncworICogaW4gYW55IGhhc2ggbGlzdCBidXQgdGhvc2Ug Y3VycmVudGx5IGJlaW5nIGFjdGl2ZSBhcmUgaW4gYSBzaW5nbGUgYmlnCisgKiBMUlUgbGlzdC4K KyAqCisgKiBXaGVuZXZlciBhIGd1ZXN0IEw0IHBhZ2UgdGFibGUgaXMgYmVpbmcgdW5waW5uZWQg aXRzIGFzc29jaWF0ZWQgc2hhZG93IGlzCisgKiBwdXQgaW4gYSBmcmVlIGxpc3QgdG8gYXZvaWQg dGhlIG5lZWQgdG8gYWxsb2NhdGUgYSBuZXcgc2hhZG93IGZyb20gdGhlIGhlYXAKKyAqIHdoZW4g YSBuZXcgTDQgcGFnZSBpcyBiZWluZyBwaW5uZWQuIFRoaXMgZnJlZSBsaXN0IGlzIGxpbWl0ZWQg aW4gaXRzIGxlbmd0aAorICogdG8gKE5fTDRfRlJFRV9QRVJWQ1BVICogbWF4X3ZjcHVzKS4KKyAq CisgKiBOZXcgc2hhZG93cyBhcmUgb2J0YWluZWQgZnJvbSB0aGUgZm9sbG93aW5nIHJlc291cmNl cyAoZmlyc3QgaGl0IHdpbnMpOgorICogLSBmcm9tIHRoZSBmcmVlIGxpc3QKKyAqIC0gaWYgbWF4 aW11bSBudW1iZXIgb2Ygc2hhZG93cyBub3QgeWV0IHJlYWNoZWQgYWxsb2NhdGlvbiBmcm9tIHRo ZSBoZWFwCisgKiAtIGZyb20gdGhlIGVuZCBvZiB0aGUgZ2xvYmFsIGxydSBsaXN0CisgKgorICog QXQgZG9tYWluIGNyZWF0aW9uIHRoZSBmcmVlIGxpc3QgaXMgaW5pdGlhbGl6ZWQgd2l0aCBOX0w0 X01JTl9QRVJWQ1BVIHBlcgorICogdmNwdSBmcmVlIHNoYWRvd3MgaW4gb3JkZXIgdG8gaGF2ZSBh IG1pbmltYWwgd29ya2luZyBzZXQgdGVjaG5pY2FsbHkgbm90CisgKiByZXF1aXJpbmcgYWRkaXRp b25hbCBhbGxvY2F0aW9ucy4KKyAqLworCisjZGVmaW5lIFhQVElfREVCVUcKKworI2RlZmluZSBO X0w0X1BFUlZDUFUgICAgICA2NAorI2RlZmluZSBOX0w0X0ZSRUVfUEVSVkNQVSAxNgorI2RlZmlu ZSBOX0w0X01JTl9QRVJWQ1BVICAgMgorCisjZGVmaW5lIEw0X0lOVkFMSUQgIH4wCisKKyNkZWZp bmUgbWF4X2w0KGQpICAgICgoZCktPm1heF92Y3B1cyAqIE5fTDRfUEVSVkNQVSkKKyNkZWZpbmUg bWF4X2ZyZWUoeGQpIChOX0w0X0ZSRUVfUEVSVkNQVSAqICh4ZCktPmRvbWFpbi0+bWF4X3ZjcHVz KQorI2RlZmluZSBtaW5fZnJlZSh4ZCkgKE5fTDRfTUlOX1BFUlZDUFUgKiAoeGQpLT5kb21haW4t Pm1heF92Y3B1cykKKworI2lmZGVmIFhQVElfREVCVUcKKyNkZWZpbmUgWFBUSV9DTlQod2hhdCkg eGQtPndoYXQrKworI2Vsc2UKKyNkZWZpbmUgWFBUSV9DTlQod2hhdCkKKyNlbmRpZgorCitzdHJ1 Y3QgeHB0aV9sNHJlZiB7CisgICAgdW5zaWduZWQgaW50IGlkeDsgICAgICAgICAgLyogRmlyc3Qg c2hhZG93ICovCit9OworCitzdHJ1Y3QgeHB0aV9sNHBnIHsKKyAgICB1bnNpZ25lZCBsb25nIGd1 ZXN0X21mbjsgICAvKiBNRk4gb2YgZ3Vlc3QgTDQgcGFnZSAqLworICAgIHVuc2lnbmVkIGxvbmcg eGVuX21mbjsgICAgIC8qIE1GTiBvZiBhc3NvY2lhdGVkIHNoYWRvdyAqLworICAgIHVuc2lnbmVk IGludCByZWZfbmV4dDsgICAgIC8qIE5leHQgc2hhZG93LCBhbmNob3JlZCBpbiB4cHRpX2w0cmVm ICovCisgICAgdW5zaWduZWQgaW50IGxydV9uZXh0OyAgICAgLyogR2xvYmFsIExSVSBsaXN0ICov CisgICAgdW5zaWduZWQgaW50IGxydV9wcmV2OworICAgIHVuc2lnbmVkIGludCBhY3RpdmVfY250 OyAgIC8qIE51bWJlciBvZiB2Y3B1cyB0aGUgc2hhZG93IGlzIGFjdGl2ZSBvbiAqLworfTsKIAog I2RlZmluZSBYUFRJX1NUQUNLX1NJWkUgNTEyCiAjZGVmaW5lIFhQVElfU1RBQ0tfTiAoWFBUSV9T VEFDS19TSVpFIC8gOCkKQEAgLTQwLDcgKzEwNywzMCBAQCBzdHJ1Y3QgeHB0aV9zdGFjayB7CiB9 OwogCiBzdHJ1Y3QgeHB0aV9kb21haW4geworICAgIHN0cnVjdCB4cHRpX2w0cmVmICpsNHJlZjsg IC8qIEhhc2ggYXJyYXkgKi8KKyAgICBzdHJ1Y3QgeHB0aV9sNHBnICpsNHBnOyAgICAvKiBTaGFk b3cgYWRtaW4gYXJyYXkgKi8KKyAgICB1bnNpZ25lZCBpbnQgbDRyZWZfc2l6ZTsgICAvKiBIYXNo IHNpemUgKi8KKyAgICB1bnNpZ25lZCBpbnQgbl9hbGxvYzsgICAgICAvKiBOdW1iZXIgb2YgYWxs b2NhdGVkIHNoYWRvd3MgKi8KKyAgICB1bnNpZ25lZCBpbnQgbl9mcmVlOyAgICAgICAvKiBOdW1i ZXIgb2YgZnJlZSBzaGFkb3dzICovCisgICAgdW5zaWduZWQgaW50IGxydV9maXJzdDsgICAgLyog TFJVIGxpc3Qgb2YgYXNzb2NpYXRlZCBzaGFkb3dzICovCisgICAgdW5zaWduZWQgaW50IGxydV9s YXN0OworICAgIHVuc2lnbmVkIGludCBmcmVlX2ZpcnN0OyAgIC8qIExpc3Qgb2YgZnJlZSBzaGFk b3dzICovCisgICAgdW5zaWduZWQgaW50IHVudXNlZF9maXJzdDsgLyogTGlzdCBvZiB1bnVzZWQg c2xvdHMgKi8KKyAgICBzcGlubG9ja190IGxvY2s7ICAgICAgICAgICAvKiBQcm90ZWN0cyBhbGwg c2hhZG93IGxpc3RzICovCisgICAgc3RydWN0IGRvbWFpbiAqZG9tYWluOworICAgIHN0cnVjdCB0 YXNrbGV0IHRhc2tsZXQ7CiAgICAgbDFfcGdlbnRyeV90ICoqcGVyZG9tX2wxdGFiOworI2lmZGVm IFhQVElfREVCVUcKKyAgICB1bnNpZ25lZCBpbnQgY250X2FsbG9jOworICAgIHVuc2lnbmVkIGlu dCBjbnRfZnJlZTsKKyAgICB1bnNpZ25lZCBpbnQgY250X2dldGZyZWU7CisgICAgdW5zaWduZWQg aW50IGNudF9wdXRmcmVlOworICAgIHVuc2lnbmVkIGludCBjbnRfZ2V0Zm9yY2U7CisgICAgdW5z aWduZWQgaW50IGNudF9hY3RpdmF0ZTsKKyAgICB1bnNpZ25lZCBpbnQgY250X2RlYWN0aXZhdGU7 CisgICAgdW5zaWduZWQgaW50IGNudF9uZXdsNDsKKyAgICB1bnNpZ25lZCBpbnQgY250X2ZyZWVs NDsKKyNlbmRpZgogfTsKIAogc3RhdGljIF9fcmVhZF9tb3N0bHkgZW51bSB7CkBAIC03NywyMiAr MTY3LDM3MSBAQCBzdGF0aWMgaW50IHBhcnNlX3hwdGkoY29uc3QgY2hhciAqcykKIAogY3VzdG9t X3J1bnRpbWVfcGFyYW0oInhwdGkiLCBwYXJzZV94cHRpKTsKIAorc3RhdGljIHVuc2lnbmVkIGlu dCB4cHRpX3NoYWRvd19hZGQoc3RydWN0IHhwdGlfZG9tYWluICp4ZCwgdW5zaWduZWQgbG9uZyBt Zm4pCit7CisgICAgdW5zaWduZWQgaW50IG5ldyA9IHhkLT51bnVzZWRfZmlyc3Q7CisgICAgc3Ry dWN0IHhwdGlfbDRwZyAqbDRwZyA9IHhkLT5sNHBnICsgbmV3OworCisgICAgaWYgKCB4ZC0+bl9h bGxvYyA+PSBtYXhfbDQoeGQtPmRvbWFpbikgKQorICAgICAgICBuZXcgPSBMNF9JTlZBTElEOwor ICAgIGlmICggbmV3ICE9IEw0X0lOVkFMSUQgKQorICAgIHsKKyAgICAgICAgWFBUSV9DTlQoY250 X2FsbG9jKTsKKyAgICAgICAgeGQtPnVudXNlZF9maXJzdCA9IGw0cGctPmxydV9uZXh0OworICAg ICAgICBsNHBnLT54ZW5fbWZuID0gbWZuOworICAgICAgICB4ZC0+bl9hbGxvYysrOworICAgIH0K KworICAgIHJldHVybiBuZXc7Cit9CisKK3N0YXRpYyB2b2lkICp4cHRpX3NoYWRvd19mcmVlKHN0 cnVjdCB4cHRpX2RvbWFpbiAqeGQsIHVuc2lnbmVkIGludCBmcmVlKQoreworICAgIHN0cnVjdCB4 cHRpX2w0cGcgKmw0cGcgPSB4ZC0+bDRwZyArIGZyZWU7CisgICAgdm9pZCAqdmlydDsKKworICAg IFhQVElfQ05UKGNudF9mcmVlKTsKKyAgICBBU1NFUlQoeGQtPm5fYWxsb2MpOworICAgIHZpcnQg PSBtZm5fdG9fdmlydChsNHBnLT54ZW5fbWZuKTsKKyAgICBsNHBnLT5scnVfbmV4dCA9IHhkLT51 bnVzZWRfZmlyc3Q7CisgICAgeGQtPnVudXNlZF9maXJzdCA9IGZyZWU7CisgICAgeGQtPm5fYWxs b2MtLTsKKworICAgIHJldHVybiB2aXJ0OworfQorCitzdGF0aWMgdW5zaWduZWQgaW50IHhwdGlf c2hhZG93X2dldGZyZWUoc3RydWN0IHhwdGlfZG9tYWluICp4ZCkKK3sKKyAgICB1bnNpZ25lZCBm cmVlID0geGQtPmZyZWVfZmlyc3Q7CisgICAgc3RydWN0IHhwdGlfbDRwZyAqbDRwZyA9IHhkLT5s NHBnICsgZnJlZTsKKworICAgIGlmICggZnJlZSAhPSBMNF9JTlZBTElEICkKKyAgICB7CisgICAg ICAgIFhQVElfQ05UKGNudF9nZXRmcmVlKTsKKyAgICAgICAgeGQtPmZyZWVfZmlyc3QgPSBsNHBn LT5scnVfbmV4dDsKKyAgICAgICAgQVNTRVJUKHhkLT5uX2ZyZWUpOworICAgICAgICB4ZC0+bl9m cmVlLS07CisgICAgICAgIGw0cGctPmxydV9uZXh0ID0gTDRfSU5WQUxJRDsKKworICAgICAgICBp ZiAoICF4ZC0+bl9mcmVlICYmIHhkLT5uX2FsbG9jIDwgbWF4X2w0KHhkLT5kb21haW4pICYmCisg ICAgICAgICAgICAgIXhkLT5kb21haW4tPmlzX2R5aW5nICkKKyAgICAgICAgICAgIHRhc2tsZXRf c2NoZWR1bGUoJnhkLT50YXNrbGV0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZnJlZTsKK30KKwor c3RhdGljIHZvaWQgeHB0aV9zaGFkb3dfcHV0ZnJlZShzdHJ1Y3QgeHB0aV9kb21haW4gKnhkLCB1 bnNpZ25lZCBpbnQgZnJlZSkKK3sKKyAgICBzdHJ1Y3QgeHB0aV9sNHBnICpsNHBnID0geGQtPmw0 cGcgKyBmcmVlOworCisgICAgQVNTRVJUKGZyZWUgIT0gTDRfSU5WQUxJRCk7CisgICAgWFBUSV9D TlQoY250X3B1dGZyZWUpOworICAgIGw0cGctPmxydV9wcmV2ID0gTDRfSU5WQUxJRDsKKyAgICBs NHBnLT5scnVfbmV4dCA9IHhkLT5mcmVlX2ZpcnN0OworICAgIHhkLT5mcmVlX2ZpcnN0ID0gZnJl ZTsKKyAgICB4ZC0+bl9mcmVlKys7CisKKyAgICBpZiAoIHhkLT5uX2ZyZWUgPiBtYXhfZnJlZSh4 ZCkgJiYgIXhkLT5kb21haW4tPmlzX2R5aW5nICkKKyAgICAgICAgdGFza2xldF9zY2hlZHVsZSgm eGQtPnRhc2tsZXQpOworfQorCitzdGF0aWMgc3RydWN0IHhwdGlfbDRyZWYgKnhwdGlfZ2V0X2hh c2hlbnRyeV9tZm4oc3RydWN0IHhwdGlfZG9tYWluICp4ZCwKKyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25nIG1mbikKK3sKKyAgICBy ZXR1cm4geGQtPmw0cmVmICsgKG1mbiAmICh4ZC0+bDRyZWZfc2l6ZSAtIDEpKTsKK30KKworc3Rh dGljIHN0cnVjdCB4cHRpX2w0cmVmICp4cHRpX2dldF9oYXNoZW50cnkoc3RydWN0IHhwdGlfZG9t YWluICp4ZCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVu c2lnbmVkIGludCBpZHgpCit7CisgICAgc3RydWN0IHhwdGlfbDRwZyAqbDRwZyA9IHhkLT5sNHBn ICsgaWR4OworCisgICAgcmV0dXJuIHhwdGlfZ2V0X2hhc2hlbnRyeV9tZm4oeGQsIGw0cGctPmd1 ZXN0X21mbik7Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgeHB0aV9zaGFkb3dfZnJvbV9oYXNo bGlzdChzdHJ1Y3QgeHB0aV9kb21haW4gKnhkLAorICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWZuKQoreworICAgIHN0cnVjdCB4cHRp X2w0cmVmICpsNHJlZjsKKyAgICB1bnNpZ25lZCBpbnQgcmVmX2lkeDsKKworICAgIGw0cmVmID0g eHB0aV9nZXRfaGFzaGVudHJ5X21mbih4ZCwgbWZuKTsKKyAgICByZWZfaWR4ID0gbDRyZWYtPmlk eDsKKyAgICB3aGlsZSAoIHJlZl9pZHggIT0gTDRfSU5WQUxJRCAmJiB4ZC0+bDRwZ1tyZWZfaWR4 XS5ndWVzdF9tZm4gIT0gbWZuICkKKyAgICAgICAgcmVmX2lkeCA9IHhkLT5sNHBnW3JlZl9pZHhd LnJlZl9uZXh0OworCisgICAgcmV0dXJuIHJlZl9pZHg7Cit9CisKK3N0YXRpYyB2b2lkIHhwdGlf c2hhZG93X2RlYWN0aXZhdGUoc3RydWN0IHhwdGlfZG9tYWluICp4ZCwgdW5zaWduZWQgaW50IGlk eCkKK3sKKyAgICBzdHJ1Y3QgeHB0aV9sNHBnICpsNHBnID0geGQtPmw0cGcgKyBpZHg7CisgICAg c3RydWN0IHhwdGlfbDRyZWYgKmw0cmVmOworICAgIHVuc2lnbmVkIGludCByZWZfaWR4OworCisg ICAgLyogRGVjcmVtZW50IGFjdGl2ZSBjb3VudC4gSWYgc3RpbGwgPiAwIHdlIGFyZSBkb25lLiAq LworICAgIFhQVElfQ05UKGNudF9kZWFjdGl2YXRlKTsKKyAgICBBU1NFUlQobDRwZy0+YWN0aXZl X2NudCA+IDApOworICAgIGw0cGctPmFjdGl2ZV9jbnQtLTsKKyAgICBpZiAoIGw0cGctPmFjdGl2 ZV9jbnQgKQorICAgICAgICByZXR1cm47CisKKyAgICAvKiBQdXQgaW4gaGFzaCBsaXN0IGF0IGZp cnN0IHBvc2l0aW9uIGZvciBpdHMgaGFzaCBlbnRyeS4gKi8KKyAgICBsNHJlZiA9IHhwdGlfZ2V0 X2hhc2hlbnRyeSh4ZCwgaWR4KTsKKyAgICByZWZfaWR4ID0gbDRyZWYtPmlkeDsKKyAgICBBU1NF UlQocmVmX2lkeCAhPSBMNF9JTlZBTElEKTsKKyAgICAvKiBPbmx5IG5lZWQgdG8gZG8gc29tZXRo aW5nIGlmIG5vdCBhbHJlYWR5IGluIGZyb250LiAqLworICAgIGlmICggcmVmX2lkeCAhPSBpZHgg KQorICAgIHsKKyAgICAgICAgLyogU2VhcmNoIGZvciBlbnRyeSByZWZlcmVuY2luZyBvdXIgZWxl bWVudC4gKi8KKyAgICAgICAgd2hpbGUgKCB4ZC0+bDRwZ1tyZWZfaWR4XS5yZWZfbmV4dCAhPSBp ZHggKQorICAgICAgICAgICAgICByZWZfaWR4ID0geGQtPmw0cGdbcmVmX2lkeF0ucmVmX25leHQ7 CisKKyAgICAgICAgLyogRGVxdWV1ZSBhbmQgcHV0IHRvIGZyb250IG9mIGxpc3QuICovCisgICAg ICAgIHhkLT5sNHBnW3JlZl9pZHhdLnJlZl9uZXh0ID0gbDRwZy0+cmVmX25leHQ7CisgICAgICAg IGw0cGctPnJlZl9uZXh0ID0gbDRyZWYtPmlkeDsKKyAgICAgICAgbDRyZWYtPmlkeCA9IGlkeDsK KyAgICB9CisKKyAgICAvKiBQdXQgaW50byBMUlUgbGlzdCBhdCBmaXJzdCBwb3NpdGlvbi4gKi8K KyAgICBsNHBnLT5scnVfbmV4dCA9IHhkLT5scnVfZmlyc3Q7CisgICAgbDRwZy0+bHJ1X3ByZXYg PSBMNF9JTlZBTElEOworICAgIHhkLT5scnVfZmlyc3QgPSBpZHg7CisgICAgaWYgKCB4ZC0+bHJ1 X2xhc3QgPT0gTDRfSU5WQUxJRCApCisgICAgICAgIHhkLT5scnVfbGFzdCA9IGlkeDsKKyAgICBl bHNlIGlmICggbDRwZy0+bHJ1X25leHQgIT0gTDRfSU5WQUxJRCApCisgICAgICAgIHhkLT5sNHBn W2w0cGctPmxydV9uZXh0XS5scnVfcHJldiA9IGlkeDsKK30KKworc3RhdGljIHZvaWQgeHB0aV9z aGFkb3dfbHJ1X3JlbW92ZShzdHJ1Y3QgeHB0aV9kb21haW4gKnhkLCB1bnNpZ25lZCBpbnQgaWR4 KQoreworICAgIHN0cnVjdCB4cHRpX2w0cGcgKmw0cGcgPSB4ZC0+bDRwZyArIGlkeDsKKyAgICB1 bnNpZ25lZCBpbnQgcHJldiA9IGw0cGctPmxydV9wcmV2OworICAgIHVuc2lnbmVkIGludCBuZXh0 ID0gbDRwZy0+bHJ1X25leHQ7CisKKyAgICBpZiAoIHByZXYgIT0gTDRfSU5WQUxJRCApCisgICAg ICAgIHhkLT5sNHBnW3ByZXZdLmxydV9uZXh0ID0gbmV4dDsKKyAgICBlbHNlIGlmICggeGQtPmxy dV9maXJzdCA9PSBpZHggKQorICAgICAgICB4ZC0+bHJ1X2ZpcnN0ID0gbmV4dDsKKyAgICBpZiAo IG5leHQgIT0gTDRfSU5WQUxJRCApCisgICAgICAgIHhkLT5sNHBnW25leHRdLmxydV9wcmV2ID0g cHJldjsKKyAgICBlbHNlIGlmICggeGQtPmxydV9sYXN0ID09IGlkeCApCisgICAgICAgIHhkLT5s cnVfbGFzdCA9IHByZXY7CisgICAgbDRwZy0+bHJ1X3ByZXYgPSBMNF9JTlZBTElEOworICAgIGw0 cGctPmxydV9uZXh0ID0gTDRfSU5WQUxJRDsKK30KKworc3RhdGljIHZvaWQgeHB0aV9zaGFkb3df aGFzaF9yZW1vdmUoc3RydWN0IHhwdGlfZG9tYWluICp4ZCwgdW5zaWduZWQgaW50IGlkeCkKK3sK KyAgICBzdHJ1Y3QgeHB0aV9sNHBnICpsNHBnID0geGQtPmw0cGcgKyBpZHg7CisgICAgc3RydWN0 IHhwdGlfbDRyZWYgKmw0cmVmOworICAgIHVuc2lnbmVkIGludCByZWZfaWR4OworCisgICAgbDRy ZWYgPSB4cHRpX2dldF9oYXNoZW50cnkoeGQsIGlkeCk7CisgICAgcmVmX2lkeCA9IGw0cmVmLT5p ZHg7CisgICAgQVNTRVJUKHJlZl9pZHggIT0gTDRfSU5WQUxJRCk7CisgICAgaWYgKCByZWZfaWR4 ID09IGlkeCApCisgICAgeworICAgICAgICBsNHJlZi0+aWR4ID0gbDRwZy0+cmVmX25leHQ7Cisg ICAgfQorICAgIGVsc2UKKyAgICB7CisgICAgICAgIHdoaWxlICggeGQtPmw0cGdbcmVmX2lkeF0u cmVmX25leHQgIT0gaWR4ICkKKyAgICAgICAgICAgIHJlZl9pZHggPSB4ZC0+bDRwZ1tyZWZfaWR4 XS5yZWZfbmV4dDsKKyAgICAgICAgeGQtPmw0cGdbcmVmX2lkeF0ucmVmX25leHQgPSBsNHBnLT5y ZWZfbmV4dDsKKyAgICB9Cit9CisKK3N0YXRpYyB1bnNpZ25lZCBpbnQgeHB0aV9zaGFkb3dfZ2V0 Zm9yY2Uoc3RydWN0IHhwdGlfZG9tYWluICp4ZCkKK3sKKyAgICB1bnNpZ25lZCBpbnQgaWR4ID0g eGQtPmxydV9sYXN0OworCisgICAgWFBUSV9DTlQoY250X2dldGZvcmNlKTsKKyAgICBBU1NFUlQo aWR4ICE9IEw0X0lOVkFMSUQpOworICAgIEFTU0VSVCgheGQtPmw0cGdbaWR4XS5hY3RpdmVfY250 KTsKKworICAgIHhwdGlfc2hhZG93X2hhc2hfcmVtb3ZlKHhkLCBpZHgpOworICAgIHhwdGlfc2hh ZG93X2xydV9yZW1vdmUoeGQsIGlkeCk7CisKKyAgICByZXR1cm4gaWR4OworfQorCitzdGF0aWMg dW5zaWduZWQgaW50IHhwdGlfc2hhZG93X2dldChzdHJ1Y3QgeHB0aV9kb21haW4gKnhkLCB1bnNp Z25lZCBsb25nIG1mbikKK3sKKyAgICB1bnNpZ25lZCBpbnQgaWR4OworICAgIHN0cnVjdCB4cHRp X2w0cmVmICpsNHJlZjsKKyAgICBzdHJ1Y3QgeHB0aV9sNHBnICpsNHBnOworCisgICAgaWR4ID0g eHB0aV9zaGFkb3dfZnJvbV9oYXNobGlzdCh4ZCwgbWZuKTsKKyAgICBpZiAoIGlkeCAhPSBMNF9J TlZBTElEICkKKyAgICB7CisgICAgICAgIC8qIFJlbW92ZSBmcm9tIExSVSBsaXN0IGlmIGN1cnJl bnRseSBub3QgYWN0aXZlLiAqLworICAgICAgICBpZiAoICF4ZC0+bDRwZ1tpZHhdLmFjdGl2ZV9j bnQgKQorICAgICAgICAgICAgeHB0aV9zaGFkb3dfbHJ1X3JlbW92ZSh4ZCwgaWR4KTsKKworICAg ICAgICByZXR1cm4gaWR4OworICAgIH0KKworICAgIFhQVElfQ05UKGNudF9uZXdsNCk7CisgICAg aWR4ID0geHB0aV9zaGFkb3dfZ2V0ZnJlZSh4ZCk7CisgICAgaWYgKCBpZHggPT0gTDRfSU5WQUxJ RCApCisgICAgICAgIGlkeCA9IHhwdGlfc2hhZG93X2dldGZvcmNlKHhkKTsKKworICAgIC8qIFNl dCBtZm4gYW5kIGluc2VydCBpbiBoYXNoIGxpc3QuICovCisgICAgbDRyZWYgPSB4cHRpX2dldF9o YXNoZW50cnlfbWZuKHhkLCBtZm4pOworICAgIGw0cGcgPSB4ZC0+bDRwZyArIGlkeDsKKyAgICBs NHBnLT5ndWVzdF9tZm4gPSBtZm47CisgICAgbDRwZy0+cmVmX25leHQgPSBsNHJlZi0+aWR4Owor ICAgIGw0cmVmLT5pZHggPSBpZHg7CisKKyAgICByZXR1cm4gaWR4OworfQorCitzdGF0aWMgdW5z aWduZWQgaW50IHhwdGlfc2hhZG93X2FjdGl2YXRlKHN0cnVjdCB4cHRpX2RvbWFpbiAqeGQsCisg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVkIGxvbmcgbWZu KQoreworICAgIHVuc2lnbmVkIGludCBpZHg7CisgICAgc3RydWN0IHhwdGlfbDRwZyAqbDRwZzsK KworICAgIFhQVElfQ05UKGNudF9hY3RpdmF0ZSk7CisgICAgaWR4ID0geHB0aV9zaGFkb3dfZ2V0 KHhkLCBtZm4pOworICAgIGw0cGcgPSB4ZC0+bDRwZyArIGlkeDsKKworICAgIGw0cGctPmFjdGl2 ZV9jbnQrKzsKKworICAgIHJldHVybiBpZHg7Cit9CisKK3ZvaWQgeHB0aV9tYWtlX2NyMyhzdHJ1 Y3QgdmNwdSAqdiwgdW5zaWduZWQgbG9uZyBtZm4pCit7CisgICAgc3RydWN0IHhwdGlfZG9tYWlu ICp4ZCA9IHYtPmRvbWFpbi0+YXJjaC5wdl9kb21haW4ueHB0aTsKKyAgICB1bnNpZ25lZCBsb25n IGZsYWdzOworICAgIHVuc2lnbmVkIGludCBpZHg7CisKKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgm eGQtPmxvY2ssIGZsYWdzKTsKKworICAgIGlkeCA9IHYtPmFyY2gucHZfdmNwdS54ZW5fY3IzX3No YWRvdzsKKworICAgIC8qIEZpcnN0IGFjdGl2YXRlIG5ldyBzaGFkb3cuICovCisgICAgdi0+YXJj aC5wdl92Y3B1Lnhlbl9jcjNfc2hhZG93ID0geHB0aV9zaGFkb3dfYWN0aXZhdGUoeGQsIG1mbik7 CisKKyAgICAvKiBEZWFjdGl2YXRlIG9sZCBzaGFkb3cgaWYgYXBwbGljYWJsZS4gKi8KKyAgICBp ZiAoIGlkeCAhPSBMNF9JTlZBTElEICkKKyAgICAgICAgeHB0aV9zaGFkb3dfZGVhY3RpdmF0ZSh4 ZCwgaWR4KTsKKworICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhkLT5sb2NrLCBmbGFncyk7 Cit9CisKK3ZvaWQgeHB0aV9mcmVlX2w0KHN0cnVjdCBkb21haW4gKmQsIHVuc2lnbmVkIGxvbmcg bWZuKQoreworICAgIHN0cnVjdCB4cHRpX2RvbWFpbiAqeGQgPSBkLT5hcmNoLnB2X2RvbWFpbi54 cHRpOworICAgIHVuc2lnbmVkIGxvbmcgZmxhZ3M7CisgICAgdW5zaWduZWQgaW50IGlkeDsKKwor ICAgIHNwaW5fbG9ja19pcnFzYXZlKCZ4ZC0+bG9jaywgZmxhZ3MpOworCisgICAgaWR4ID0geHB0 aV9zaGFkb3dfZnJvbV9oYXNobGlzdCh4ZCwgbWZuKTsKKyAgICBpZiAoIGlkeCAhPSBMNF9JTlZB TElEICkKKyAgICB7CisgICAgICAgIFhQVElfQ05UKGNudF9mcmVlbDQpOworICAgICAgICAvKiBN aWdodCBzdGlsbCBiZSBhY3RpdmUgaW4gYSB2Y3B1IHRvIGJlIGRlc3Ryb3llZC4gKi8KKyAgICAg ICAgaWYgKCAheGQtPmw0cGdbaWR4XS5hY3RpdmVfY250ICkKKyAgICAgICAgeworICAgICAgICAg ICAgeHB0aV9zaGFkb3dfbHJ1X3JlbW92ZSh4ZCwgaWR4KTsKKyAgICAgICAgICAgIHhwdGlfc2hh ZG93X2hhc2hfcmVtb3ZlKHhkLCBpZHgpOworICAgICAgICAgICAgeHB0aV9zaGFkb3dfcHV0ZnJl ZSh4ZCwgaWR4KTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNwaW5fdW5sb2NrX2lycXJlc3Rv cmUoJnhkLT5sb2NrLCBmbGFncyk7Cit9CisKK3N0YXRpYyB2b2lkIHhwdGlfdGFza2xldCh1bnNp Z25lZCBsb25nIF94ZCkKK3sKKyAgICBzdHJ1Y3QgeHB0aV9kb21haW4gKnhkID0gKHN0cnVjdCB4 cHRpX2RvbWFpbiAqKV94ZDsKKyAgICB2b2lkICp2aXJ0OworICAgIHVuc2lnbmVkIGxvbmcgZmxh Z3M7CisgICAgdW5zaWduZWQgaW50IGZyZWU7CisKKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgmeGQt PmxvY2ssIGZsYWdzKTsKKworICAgIHdoaWxlICggeGQtPm5fZnJlZSA8IG1pbl9mcmVlKHhkKSAm JiB4ZC0+bl9hbGxvYyA8IG1heF9sNCh4ZC0+ZG9tYWluKSApCisgICAgeworICAgICAgICBzcGlu X3VubG9ja19pcnFyZXN0b3JlKCZ4ZC0+bG9jaywgZmxhZ3MpOworICAgICAgICB2aXJ0ID0gYWxs b2NfeGVuaGVhcF9wYWdlcygwLCBNRU1GX25vZGUoZG9tYWluX3RvX25vZGUoeGQtPmRvbWFpbikp KTsKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnhkLT5sb2NrLCBmbGFncyk7CisgICAgICAg IGlmICggIXZpcnQgKQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIGZyZWUgPSB4cHRpX3No YWRvd19hZGQoeGQsIHZpcnRfdG9fbWZuKHZpcnQpKTsKKyAgICAgICAgaWYgKCBmcmVlID09IEw0 X0lOVkFMSUQgKQorICAgICAgICB7CisgICAgICAgICAgICBzcGluX3VubG9ja19pcnFyZXN0b3Jl KCZ4ZC0+bG9jaywgZmxhZ3MpOworICAgICAgICAgICAgZnJlZV94ZW5oZWFwX3BhZ2UodmlydCk7 CisgICAgICAgICAgICBzcGluX2xvY2tfaXJxc2F2ZSgmeGQtPmxvY2ssIGZsYWdzKTsKKyAgICAg ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHhwdGlfc2hhZG93X3B1dGZyZWUoeGQs IGZyZWUpOworICAgIH0KKworICAgIHdoaWxlICggeGQtPm5fZnJlZSA+IG1heF9mcmVlKHhkKSAp CisgICAgeworICAgICAgICBmcmVlID0geHB0aV9zaGFkb3dfZ2V0ZnJlZSh4ZCk7CisgICAgICAg IEFTU0VSVChmcmVlICE9IEw0X0lOVkFMSUQpOworICAgICAgICB2aXJ0ID0geHB0aV9zaGFkb3df ZnJlZSh4ZCwgZnJlZSk7CisgICAgICAgIHNwaW5fdW5sb2NrX2lycXJlc3RvcmUoJnhkLT5sb2Nr LCBmbGFncyk7CisgICAgICAgIGZyZWVfeGVuaGVhcF9wYWdlKHZpcnQpOworICAgICAgICBzcGlu X2xvY2tfaXJxc2F2ZSgmeGQtPmxvY2ssIGZsYWdzKTsKKyAgICB9CisKKyAgICBzcGluX3VubG9j a19pcnFyZXN0b3JlKCZ4ZC0+bG9jaywgZmxhZ3MpOworfQorCiB2b2lkIHhwdGlfZG9tYWluX2Rl c3Ryb3koc3RydWN0IGRvbWFpbiAqZCkKIHsKICAgICBzdHJ1Y3QgeHB0aV9kb21haW4gKnhkID0g ZC0+YXJjaC5wdl9kb21haW4ueHB0aTsKKyAgICB1bnNpZ25lZCBpbnQgaWR4OwogCiAgICAgaWYg KCAheGQgKQogICAgICAgICByZXR1cm47CiAKKyAgICB0YXNrbGV0X2tpbGwoJnhkLT50YXNrbGV0 KTsKKworICAgIHdoaWxlICggeGQtPmxydV9maXJzdCAhPSBMNF9JTlZBTElEICkgeworICAgICAg ICBpZHggPSB4ZC0+bHJ1X2ZpcnN0OworICAgICAgICB4cHRpX3NoYWRvd19scnVfcmVtb3ZlKHhk LCBpZHgpOworICAgICAgICBmcmVlX3hlbmhlYXBfcGFnZSh4cHRpX3NoYWRvd19mcmVlKHhkLCBp ZHgpKTsKKyAgICB9CisKKyAgICB3aGlsZSAoIHhkLT5uX2ZyZWUgKSB7CisgICAgICAgIGlkeCA9 IHhwdGlfc2hhZG93X2dldGZyZWUoeGQpOworICAgICAgICBmcmVlX3hlbmhlYXBfcGFnZSh4cHRp X3NoYWRvd19mcmVlKHhkLCBpZHgpKTsKKyAgICB9CisKICAgICB4ZnJlZSh4ZC0+cGVyZG9tX2wx dGFiKTsKKyAgICB4ZnJlZSh4ZC0+bDRwZyk7CisgICAgeGZyZWUoeGQtPmw0cmVmKTsKICAgICB4 ZnJlZSh4ZCk7CiAgICAgZC0+YXJjaC5wdl9kb21haW4ueHB0aSA9IE5VTEw7CiB9CiAKIHZvaWQg eHB0aV92Y3B1X2Rlc3Ryb3koc3RydWN0IHZjcHUgKnYpCiB7Ci0gICAgaWYgKCB2LT5kb21haW4t PmFyY2gucHZfZG9tYWluLnhwdGkgKQorICAgIHN0cnVjdCB4cHRpX2RvbWFpbiAqeGQgPSB2LT5k b21haW4tPmFyY2gucHZfZG9tYWluLnhwdGk7CisgICAgdW5zaWduZWQgbG9uZyBmbGFnczsKKwor ICAgIGlmICggeGQgKQogICAgIHsKKyAgICAgICAgc3Bpbl9sb2NrX2lycXNhdmUoJnhkLT5sb2Nr LCBmbGFncyk7CisKKyAgICAgICAgaWYgKCB2LT5hcmNoLnB2X3ZjcHUueGVuX2NyM19zaGFkb3cg IT0gTDRfSU5WQUxJRCApCisgICAgICAgIHsKKyAgICAgICAgICAgIHhwdGlfc2hhZG93X2RlYWN0 aXZhdGUoeGQsIHYtPmFyY2gucHZfdmNwdS54ZW5fY3IzX3NoYWRvdyk7CisgICAgICAgICAgICB2 LT5hcmNoLnB2X3ZjcHUueGVuX2NyM19zaGFkb3cgPSBMNF9JTlZBTElEOworICAgICAgICB9CisK KyAgICAgICAgc3Bpbl91bmxvY2tfaXJxcmVzdG9yZSgmeGQtPmxvY2ssIGZsYWdzKTsKKwogICAg ICAgICBmcmVlX3hlbmhlYXBfcGFnZSh2LT5hcmNoLnB2X3ZjcHUuc3RhY2tfcmVncyk7CiAgICAg ICAgIHYtPmFyY2gucHZfdmNwdS5zdGFja19yZWdzID0gTlVMTDsKICAgICAgICAgZGVzdHJveV9w ZXJkb21haW5fbWFwcGluZyh2LT5kb21haW4sIFhQVElfU1RBUlQodiksIFNUQUNLX1BBR0VTKTsK QEAgLTE1NSw2ICs1OTQsOCBAQCBzdGF0aWMgaW50IHhwdGlfdmNwdV9pbml0KHN0cnVjdCB2Y3B1 ICp2KQogICAgIGwxZV93cml0ZShwbDFlICsgU1RBQ0tfUEFHRVMgLSAyLAogICAgICAgICAgICAg ICBsMWVfZnJvbV9wZm4odmlydF90b19tZm4oeHB0aV9sc3RhciksIF9fUEFHRV9IWVBFUlZJU09S X1JYKSk7CiAKKyAgICB2LT5hcmNoLnB2X3ZjcHUueGVuX2NyM19zaGFkb3cgPSBMNF9JTlZBTElE OworCiAgZG9uZToKICAgICByZXR1cm4gcmM7CiB9CkBAIC0xNjUsNiArNjA2LDggQEAgaW50IHhw dGlfZG9tYWluX2luaXQoc3RydWN0IGRvbWFpbiAqZCkKICAgICBpbnQgcmV0ID0gLUVOT01FTTsK ICAgICBzdHJ1Y3QgdmNwdSAqdjsKICAgICBzdHJ1Y3QgeHB0aV9kb21haW4gKnhkOworICAgIHZv aWQgKnZpcnQ7CisgICAgdW5zaWduZWQgaW50IGksIG5ldzsKIAogICAgIGlmICggIWlzX3B2X2Rv bWFpbihkKSB8fCBpc19wdl8zMmJpdF9kb21haW4oZCkgKQogICAgICAgICByZXR1cm4gMDsKQEAg LTE5Myw2ICs2MzYsNDAgQEAgaW50IHhwdGlfZG9tYWluX2luaXQoc3RydWN0IGRvbWFpbiAqZCkK ICAgICBpZiAoICF4ZCApCiAgICAgICAgIGdvdG8gZG9uZTsKICAgICBkLT5hcmNoLnB2X2RvbWFp bi54cHRpID0geGQ7CisgICAgeGQtPmRvbWFpbiA9IGQ7CisgICAgeGQtPmxydV9maXJzdCA9IEw0 X0lOVkFMSUQ7CisgICAgeGQtPmxydV9sYXN0ID0gTDRfSU5WQUxJRDsKKyAgICB4ZC0+ZnJlZV9m aXJzdCA9IEw0X0lOVkFMSUQ7CisKKyAgICBzcGluX2xvY2tfaW5pdCgmeGQtPmxvY2spOworICAg IHRhc2tsZXRfaW5pdCgmeGQtPnRhc2tsZXQsIHhwdGlfdGFza2xldCwgKHVuc2lnbmVkIGxvbmcp eGQpOworCisgICAgeGQtPmw0cmVmX3NpemUgPSAxIDw8IChmbHMobWF4X2w0KGQpKSAtIDEpOwor ICAgIHhkLT5sNHJlZiA9IHh6YWxsb2NfYXJyYXkoc3RydWN0IHhwdGlfbDRyZWYsIHhkLT5sNHJl Zl9zaXplKTsKKyAgICBpZiAoICF4ZC0+bDRyZWYgKQorICAgICAgICBnb3RvIGRvbmU7CisgICAg Zm9yICggaSA9IDA7IGkgPCB4ZC0+bDRyZWZfc2l6ZTsgaSsrICkKKyAgICAgICAgeGQtPmw0cmVm W2ldLmlkeCA9IEw0X0lOVkFMSUQ7CisKKyAgICB4ZC0+bDRwZyA9IHh6YWxsb2NfYXJyYXkoc3Ry dWN0IHhwdGlfbDRwZywgbWF4X2w0KGQpKTsKKyAgICBpZiAoICF4ZC0+bDRwZyApCisgICAgICAg IGdvdG8gZG9uZTsKKyAgICBmb3IgKCBpID0gMDsgaSA8IG1heF9sNChkKSAtIDE7IGkrKyApCisg ICAgeworICAgICAgICB4ZC0+bDRwZ1tpXS5scnVfbmV4dCA9IGkgKyAxOworICAgIH0KKyAgICB4 ZC0+bDRwZ1tpXS5scnVfbmV4dCA9IEw0X0lOVkFMSUQ7CisgICAgeGQtPnVudXNlZF9maXJzdCA9 IDA7CisKKyAgICBmb3IgKCBpID0gMDsgaSA8IG1pbl9mcmVlKHhkKTsgaSsrICkKKyAgICB7Cisg ICAgICAgIHZpcnQgPSBhbGxvY194ZW5oZWFwX3BhZ2VzKDAsIE1FTUZfbm9kZShkb21haW5fdG9f bm9kZShkKSkpOworICAgICAgICBpZiAoICF2aXJ0ICkKKyAgICAgICAgICAgIGdvdG8gZG9uZTsK KyAgICAgICAgbmV3ID0geHB0aV9zaGFkb3dfYWRkKHhkLCB2aXJ0X3RvX21mbih2aXJ0KSk7Cisg ICAgICAgIEFTU0VSVChuZXcgIT0gTDRfSU5WQUxJRCk7CisgICAgICAgIHhwdGlfc2hhZG93X3B1 dGZyZWUoeGQsIG5ldyk7CisgICAgfQogCiAgICAgeGQtPnBlcmRvbV9sMXRhYiA9IHh6YWxsb2Nf YXJyYXkobDFfcGdlbnRyeV90ICosCiAgICAgICAgICAgICAgICAgICAgbDJfdGFibGVfb2Zmc2V0 KChkLT5tYXhfdmNwdXMgLSAxKSA8PCBYUFRJX1ZBX1NISUZUKSArIDEpOwpAQCAtMjA2LDkgKzY4 Myw3OSBAQCBpbnQgeHB0aV9kb21haW5faW5pdChzdHJ1Y3QgZG9tYWluICpkKQogICAgICAgICAg ICAgZ290byBkb25lOwogICAgIH0KIAorICAgIHJldCA9IDA7CisKICAgICBwcmludGsoIkVuYWJs aW5nIFhlbiBQYWdldGFibGUgcHJvdGVjdGlvbiAoWFBUSSkgZm9yIERvbWFpbiAlZFxuIiwKICAg ICAgICAgICAgZC0+ZG9tYWluX2lkKTsKIAogIGRvbmU6CiAgICAgcmV0dXJuIHJldDsKIH0KKwor c3RhdGljIHZvaWQgeHB0aV9kdW1wX2RvbWFpbl9pbmZvKHN0cnVjdCBkb21haW4gKmQpCit7Cisg ICAgc3RydWN0IHhwdGlfZG9tYWluICp4ZCA9IGQtPmFyY2gucHZfZG9tYWluLnhwdGk7CisgICAg dW5zaWduZWQgbG9uZyBmbGFnczsKKworICAgIGlmICggIWlzX3B2X2RvbWFpbihkKSB8fCAheGQg KQorICAgICAgICByZXR1cm47CisKKyAgICBzcGluX2xvY2tfaXJxc2F2ZSgmeGQtPmxvY2ssIGZs YWdzKTsKKworICAgIHByaW50aygiRG9tYWluICVkIFhQVEkgc2hhZG93IHBhZ2VzOiAldSBhbGxv Y2F0ZWQsICV1IG1heCwgJXUgZnJlZVxuIiwKKyAgICAgICAgICAgZC0+ZG9tYWluX2lkLCB4ZC0+ bl9hbGxvYywgbWF4X2w0KGQpLCB4ZC0+bl9mcmVlKTsKKworI2lmZGVmIFhQVElfREVCVUcKKyAg ICBwcmludGsoIiAgYWxsb2M6ICVkLCBmcmVlOiAlZCwgZ2V0ZnJlZTogJWQsIHB1dGZyZWU6ICVk LCBnZXRmb3JjZTogJWRcbiIsCisgICAgICAgICAgIHhkLT5jbnRfYWxsb2MsIHhkLT5jbnRfZnJl ZSwgeGQtPmNudF9nZXRmcmVlLCB4ZC0+Y250X3B1dGZyZWUsCisgICAgICAgICAgIHhkLT5jbnRf Z2V0Zm9yY2UpOworICAgIHByaW50aygiICBhY3RpdmF0ZTogJWQsIGRlYWN0aXZhdGU6ICVkLCBu ZXdsNDogJWQsIGZyZWVsNDogJWRcbiIsCisgICAgICAgICAgIHhkLT5jbnRfYWN0aXZhdGUsIHhk LT5jbnRfZGVhY3RpdmF0ZSwgeGQtPmNudF9uZXdsNCwKKyAgICAgICAgICAgeGQtPmNudF9mcmVl bDQpOworI2VuZGlmCisKKyAgICBzcGluX3VubG9ja19pcnFyZXN0b3JlKCZ4ZC0+bG9jaywgZmxh Z3MpOworfQorCitzdGF0aWMgdm9pZCB4cHRpX2R1bXBfaW5mbyh1bnNpZ25lZCBjaGFyIGtleSkK K3sKKyAgICBzdHJ1Y3QgZG9tYWluICpkOworICAgIGNoYXIgKm9wdDsKKworICAgIHByaW50aygi JyVjJyBwcmVzc2VkIC0+IGR1bXBpbmcgWFBUSSBpbmZvXG4iLCBrZXkpOworCisgICAgc3dpdGNo ICggb3B0X3hwdGkgKQorICAgIHsKKyAgICBjYXNlIFhQVElfREVGQVVMVDoKKyAgICAgICAgb3B0 ID0gImRlZmF1bHQiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFhQVElfT046CisgICAgICAg IG9wdCA9ICJvbiI7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgWFBUSV9PRkY6CisgICAgICAg IG9wdCA9ICJvZmYiOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFhQVElfTk9ET00wOgorICAg ICAgICBvcHQgPSAibm9kb20wIjsKKyAgICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAg ICAgb3B0ID0gIj8/PyI7CisgICAgICAgIGJyZWFrOworICAgIH0KKworICAgIHByaW50aygiWFBU SSBnbG9iYWwgc2V0dGluZzogJXNcbiIsIG9wdCk7CisKKyAgICByY3VfcmVhZF9sb2NrKCZkb21s aXN0X3JlYWRfbG9jayk7CisKKyAgICBmb3JfZWFjaF9kb21haW4gKCBkICkKKyAgICAgICAgeHB0 aV9kdW1wX2RvbWFpbl9pbmZvKGQpOworCisgICAgcmN1X3JlYWRfdW5sb2NrKCZkb21saXN0X3Jl YWRfbG9jayk7Cit9CisKK3N0YXRpYyBpbnQgX19pbml0IHhwdGlfa2V5X2luaXQodm9pZCkKK3sK KyAgICByZWdpc3Rlcl9rZXloYW5kbGVyKCdYJywgeHB0aV9kdW1wX2luZm8sICJkdW1wIFhQVEkg aW5mbyIsIDEpOworICAgIHJldHVybiAwOworfQorX19pbml0Y2FsbCh4cHRpX2tleV9pbml0KTsK ZGlmZiAtLWdpdCBhL3hlbi9pbmNsdWRlL2FzbS14ODYvZG9tYWluLmggYi94ZW4vaW5jbHVkZS9h c20teDg2L2RvbWFpbi5oCmluZGV4IDFhNGU5MjQ4MWMuLjVkMTQ2MzEyNzIgMTAwNjQ0Ci0tLSBh L3hlbi9pbmNsdWRlL2FzbS14ODYvZG9tYWluLmgKKysrIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9k b21haW4uaApAQCAtNTA4LDYgKzUwOCw3IEBAIHN0cnVjdCBwdl92Y3B1CiAKICAgICAvKiBJZiBY UFRJIGlzIGFjdGl2ZTogcG9pbnRlciB0byB1c2VyIHJlZ3Mgb24gc3RhY2suICovCiAgICAgc3Ry dWN0IGNwdV91c2VyX3JlZ3MgKnN0YWNrX3JlZ3M7CisgICAgdW5zaWduZWQgeGVuX2NyM19zaGFk b3c7ICAgIC8qIFhQVEk6IGluZGV4IG9mIGN1cnJlbnQgc2hhZG93IEw0ICovCiB9OwogCiB0eXBl ZGVmIGVudW0gX19wYWNrZWQgewpkaWZmIC0tZ2l0IGEveGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9t bS5oIGIveGVuL2luY2x1ZGUvYXNtLXg4Ni9wdi9tbS5oCmluZGV4IDM0YzUxYmNmYmEuLjI1YzAz NTk4OGMgMTAwNjQ0Ci0tLSBhL3hlbi9pbmNsdWRlL2FzbS14ODYvcHYvbW0uaAorKysgYi94ZW4v aW5jbHVkZS9hc20teDg2L3B2L21tLmgKQEAgLTM0LDYgKzM0LDggQEAgYm9vbCBwdl9kZXN0cm95 X2xkdChzdHJ1Y3QgdmNwdSAqdik7CiB2b2lkIHhwdGlfdmNwdV9kZXN0cm95KHN0cnVjdCB2Y3B1 ICp2KTsKIGludCB4cHRpX2RvbWFpbl9pbml0KHN0cnVjdCBkb21haW4gKmQpOwogdm9pZCB4cHRp X2RvbWFpbl9kZXN0cm95KHN0cnVjdCBkb21haW4gKmQpOwordm9pZCB4cHRpX21ha2VfY3IzKHN0 cnVjdCB2Y3B1ICp2LCB1bnNpZ25lZCBsb25nIG1mbik7Cit2b2lkIHhwdGlfZnJlZV9sNChzdHJ1 Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIG1mbik7CiAKIHN0YXRpYyBpbmxpbmUgYm9vbCBp c19kb21haW5feHB0aV9hY3RpdmUoY29uc3Qgc3RydWN0IGRvbWFpbiAqZCkKIHsKQEAgLTY5LDYg KzcxLDggQEAgc3RhdGljIGlubGluZSBib29sIHB2X2Rlc3Ryb3lfbGR0KHN0cnVjdCB2Y3B1ICp2 KQogc3RhdGljIGlubGluZSB2b2lkIHhwdGlfdmNwdV9pbml0KHN0cnVjdCB2Y3B1ICp2KSB7IH0K IHN0YXRpYyBpbmxpbmUgaW50IHhwdGlfZG9tYWluX2luaXQoc3RydWN0IGRvbWFpbiAqZCkgeyBy ZXR1cm4gMDsgfQogc3RhdGljIGlubGluZSB2b2lkIHhwdGlfZG9tYWluX2Rlc3Ryb3koc3RydWN0 IGRvbWFpbiAqZCkgeyB9CitzdGF0aWMgaW5saW5lIHZvaWQgeHB0aV9tYWtlX2NyMyhzdHJ1Y3Qg dmNwdSAqdiwgdW5zaWduZWQgbG9uZyBtZm4pIHsgfQorc3RhdGljIGlubGluZSB2b2lkIHhwdGlf ZnJlZV9sNChzdHJ1Y3QgZG9tYWluICpkLCB1bnNpZ25lZCBsb25nIG1mbikgeyB9CiAKIHN0YXRp YyBpbmxpbmUgYm9vbCBpc19kb21haW5feHB0aV9hY3RpdmUoY29uc3Qgc3RydWN0IGRvbWFpbiAq ZCkKIHsgcmV0dXJuIGZhbHNlOyB9Ci0tIAoyLjEzLjYKCgpfX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fXwpYZW4tZGV2ZWwgbWFpbGluZyBsaXN0Clhlbi1kZXZl bEBsaXN0cy54ZW5wcm9qZWN0Lm9yZwpodHRwczovL2xpc3RzLnhlbnByb2plY3Qub3JnL21haWxt YW4vbGlzdGluZm8veGVuLWRldmVs