From mboxrd@z Thu Jan 1 00:00:00 1970 From: =?UTF-8?q?Adalbert=20Laz=C4=83r?= Subject: [RFC PATCH v6 16/92] kvm: introspection: handle events and event replies Date: Fri, 9 Aug 2019 18:59:31 +0300 Message-ID: <20190809160047.8319-17-alazar@bitdefender.com> References: <20190809160047.8319-1-alazar@bitdefender.com> Mime-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Return-path: In-Reply-To: <20190809160047.8319-1-alazar@bitdefender.com> List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: virtualization-bounces@lists.linux-foundation.org Errors-To: virtualization-bounces@lists.linux-foundation.org To: kvm@vger.kernel.org Cc: Tamas K Lengyel , Weijiang Yang , Yu C , =?UTF-8?q?Radim=20Kr=C4=8Dm=C3=A1=C5=99?= , Jan Kiszka , =?UTF-8?q?Samuel=20Laur=C3=A9n?= , Konrad Rzeszutek Wilk , virtualization@lists.linux-foundation.org, =?UTF-8?q?Adalbert=20Laz=C4=83r?= , linux-mm@kvack.org, Patrick Colp , Mathieu Tarral , Stefan Hajnoczi , Paolo Bonzini , Zhang@mail.linuxfoundation.org, =?UTF-8?q?Mihai=20Don=C8=9Bu?= List-Id: virtualization@lists.linuxfoundation.org RnJvbTogTWloYWkgRG9uyJt1IDxtZG9udHVAYml0ZGVmZW5kZXIuY29tPgoKQWxsIGV2ZW50cyBh cmUgc2VudCBieSB0aGUgdkNQVSB0aHJlYWQsIHdoaWNoIHdpbGwgaGFuZGxlIGFueQppbnRyb3Nw ZWN0aW9uIGNvbW1hbmQgd2hpbGUgd2FpdGluZyBmb3IgdGhlIHJlcGx5LgoKVGhlIGV2ZW50IHJl cGx5IG1lc3NhZ2VzIGNvbnRhaW4gYSBjb21tb24gc3RydWN1cmUgKGt2bWlfdmNwdV9oZHIpLCBh cwphbnkgdkNQVSByZWxhdGVkIGNvbW1hbmQsIHdoaWNoIGFsbG93cyB0aGUgcmVjZWl2aW5nIHdv cmtlciB0byBkaXNwYXRjaAp0aGUgcmVwbHkgYXMgaXQgZG9lcyB3aXRoIGFueSBvdGhlciBpbnRy b3NwZWN0aW9uIGNvbW1hbmQgc2VudCBmb3IgYQpzcGVjaWZpYyB2Q1BVLgoKVGhlIGtlcm5lbCBz aWRlIHdpbGwgZ3JhY2VmdWxseSBoYW5kbGUgY29tbWFuZHMgY29taW5nIGZyb20gYW4KaW50cm9z cGVjdGlvbiB0b29sIGNvbXBpbGVkIHdpdGggb2xkZXIgb3IgbmV3ZXIgdmVyc2lvbnMgb2YgS1ZN SSBBUEkuCkhvd2V2ZXIsIGl0IHdpbGwgb25seSBhY2NlcHQgc21hbGxlciByZXBsaWVzIChjb21p bmcgZnJvbSBvbGRlciB2ZXJzaW9ucyksCmJ1dCBub3QgdGhlIGJpZ2dlci9uZXdlciBvbmVzICh0 aGlzIHNob3VsZCBtYWtlIHRoZSBrZXJuZWwgY29kZSBzaW1wbGVyKS4KClRPRE86IE5vdCBxdWl0 ZSB0cnVlLiBBbiBldmVudCByZXBseSBoYXMgYSBjb21tb24gcGFydCAoa3ZtaV9ldmVudF9yZXBs eSkKYW5kIGFuIGV2ZW50IHNwZWNpZmljIHBhcnQgKGVnLiB0aGUgbmV3IHZhbHVlIGZvciBNU1Ig eCkuIElmIHRoZSBjb21tb24KcGFydCBpcyBzbWFsbGVyLCB0aGUgZXZlbnQgd2lsbCBiZSByZWpl Y3RlZC4KClRoZSBjb2RlIGZyb20gaGFuZGxlX2V2ZW50X3JlcGx5KCk6CgoJY29tbW9uID0gc2l6 ZW9mKHN0cnVjdCBrdm1pX3ZjcHVfaGRyKSArIHNpemVvZigqcmVwbHkpOwoJaWYgKHVubGlrZWx5 KG1zZy0+c2l6ZSA8IGNvbW1vbikpCgkJZ290byBvdXQ7CgpzaG91bGQgYmUgY2hhbmdlZCB0bwoK CW1pbl9jb21tb24gPSBzaXplb2Yoc3RydWN0IGt2bWlfdmNwdV9oZHIpICsgb2Zmc2V0b2YocmVw bHkuLi4pCglpZiAodW5saWtlbHkobXNnLT5zaXplIDwgbWluX2NvbW1vbikpCgkJZ290byBvdXQ7 CgpTaWduZWQtb2ZmLWJ5OiBNaWhhaSBEb27Im3UgPG1kb250dUBiaXRkZWZlbmRlci5jb20+CkNv LWRldmVsb3BlZC1ieTogQWRhbGJlcnQgTGF6xINyIDxhbGF6YXJAYml0ZGVmZW5kZXIuY29tPgpT aWduZWQtb2ZmLWJ5OiBBZGFsYmVydCBMYXrEg3IgPGFsYXphckBiaXRkZWZlbmRlci5jb20+Ci0t LQogRG9jdW1lbnRhdGlvbi92aXJ0dWFsL2t2bS9rdm1pLnJzdCB8ICA1NiArKysrKysrKysrKysr CiBhcmNoL3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bWkuaCAgIHwgIDI5ICsrKysrKysKIGFyY2gv eDg2L2t2bS9NYWtlZmlsZSAgICAgICAgICAgICAgfCAgIDIgKy0KIGFyY2gveDg2L2t2bS9rdm1p LmMgICAgICAgICAgICAgICAgfCAgOTIgKysrKysrKysrKysrKysrKysrKysKIGFyY2gveDg2L2t2 bS94ODYuYyAgICAgICAgICAgICAgICAgfCAgMTAgKysrCiBpbmNsdWRlL2xpbnV4L2t2bV9ob3N0 LmggICAgICAgICAgIHwgICAzICsKIGluY2x1ZGUvdWFwaS9saW51eC9rdm1pLmggICAgICAgICAg fCAgMTYgKysrKwogdmlydC9rdm0va3ZtaS5jICAgICAgICAgICAgICAgICAgICB8ICAxNSArKysr CiB2aXJ0L2t2bS9rdm1pX2ludC5oICAgICAgICAgICAgICAgIHwgIDE2ICsrKysKIHZpcnQva3Zt L2t2bWlfbXNnLmMgICAgICAgICAgICAgICAgfCAxMjkgKysrKysrKysrKysrKysrKysrKysrKysr KysrKysKIDEwIGZpbGVzIGNoYW5nZWQsIDM2NyBpbnNlcnRpb25zKCspLCAxIGRlbGV0aW9uKC0p CiBjcmVhdGUgbW9kZSAxMDA2NDQgYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm1pLmgKIGNy ZWF0ZSBtb2RlIDEwMDY0NCBhcmNoL3g4Ni9rdm0va3ZtaS5jCgpkaWZmIC0tZ2l0IGEvRG9jdW1l bnRhdGlvbi92aXJ0dWFsL2t2bS9rdm1pLnJzdCBiL0RvY3VtZW50YXRpb24vdmlydHVhbC9rdm0v a3ZtaS5yc3QKaW5kZXggN2YzYzRmOGZjZTYzLi5lN2Q5YTM4MTZlMDAgMTAwNjQ0Ci0tLSBhL0Rv Y3VtZW50YXRpb24vdmlydHVhbC9rdm0va3ZtaS5yc3QKKysrIGIvRG9jdW1lbnRhdGlvbi92aXJ0 dWFsL2t2bS9rdm1pLnJzdApAQCAtNDI3LDMgKzQyNyw1OSBAQCBpbiBhbG1vc3QgYWxsIGNhc2Vz LCBpdCBtdXN0IHJlcGx5IHdpdGg6IGNvbnRpbnVlLCByZXRyeSwgY3Jhc2gsIGV0Yy4KICogLUtW TV9FSU5WQUwgLSBwYWRkaW5nIGlzIG5vdCB6ZXJvCiAqIC1LVk1fRVBFUk0gLSB0aGUgYWNjZXNz IGlzIHJlc3RyaWN0ZWQgYnkgdGhlIGhvc3QKIAorRXZlbnRzCis9PT09PT0KKworQWxsIHZDUFUg ZXZlbnRzIGFyZSBzZW50IHVzaW5nIHRoZSAqS1ZNSV9FVkVOVCogbWVzc2FnZSBpZC4gTm8gZXZl bnQKK3dpbGwgYmUgc2VudCB1bmxlc3MgZXhwbGljaXRseSBlbmFibGVkIHdpdGggYSAqS1ZNSV9D T05UUk9MX0VWRU5UUyoKK29yIGEgKktWTUlfQ09OVFJPTF9WTV9FVkVOVFMqIGNvbW1hbmQgb3Ig cmVxdWVzdGVkLCBhcyBpdCBpcyB0aGUgY2FzZQord2l0aCB0aGUgKktWTUlfRVZFTlRfUEFVU0Vf VkNQVSogZXZlbnQgKHNlZSAqKktWTUlfUEFVU0VfVkNQVSoqKS4KKworVGhlcmUgaXMgb25lIFZN IGV2ZW50LCAqS1ZNSV9FVkVOVF9VTkhPT0sqLCB3aGljaCBkb2Vzbid0IGhhdmUgYSByZXBseSwK K2J1dCBzaGFyZXMgdGhlIGt2bWlfZXZlbnQgc3RydWN0dXJlLCBmb3IgY29uc2lzdGVuY3kgd2l0 aCB0aGUgdkNQVSBldmVudHMuCisKK1RoZSBtZXNzYWdlIGRhdGEgYmVnaW5zIHdpdGggYSBjb21t b24gc3RydWN0dXJlLCBoYXZpbmcgdGhlIHNpemUgb2YgdGhlCitzdHJ1Y3R1cmUsIHRoZSB2Q1BV IGluZGV4IGFuZCB0aGUgZXZlbnQgaWQ6OgorCisJc3RydWN0IGt2bWlfZXZlbnQgeworCQlfX3Ux NiBzaXplOworCQlfX3UxNiB2Y3B1OworCQlfX3U4IGV2ZW50OworCQlfX3U4IHBhZGRpbmdbM107 CisJCXN0cnVjdCBrdm1pX2V2ZW50X2FyY2ggYXJjaDsKKwl9CisKK09uIHg4NiB0aGUgc3RydWN0 dXJlIGxvb2tzIGxpa2UgdGhpczo6CisKKwlzdHJ1Y3Qga3ZtaV9ldmVudF9hcmNoIHsKKwkJX191 OCBtb2RlOworCQlfX3U4IHBhZGRpbmdbN107CisJCXN0cnVjdCBrdm1fcmVncyByZWdzOworCQlz dHJ1Y3Qga3ZtX3NyZWdzIHNyZWdzOworCQlzdHJ1Y3QgeworCQkJX191NjQgc3lzZW50ZXJfY3M7 CisJCQlfX3U2NCBzeXNlbnRlcl9lc3A7CisJCQlfX3U2NCBzeXNlbnRlcl9laXA7CisJCQlfX3U2 NCBlZmVyOworCQkJX191NjQgc3RhcjsKKwkJCV9fdTY0IGxzdGFyOworCQkJX191NjQgY3N0YXI7 CisJCQlfX3U2NCBwYXQ7CisJCQlfX3U2NCBzaGFkb3dfZ3M7CisJCX0gbXNyczsKKwl9OworCitJ dCBjb250YWlucyBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdkNQVSBzdGF0ZSBhdCB0aGUgdGltZSBv ZiB0aGUgZXZlbnQuCisKK1RoZSByZXBseSB0byBldmVudHMgaGF2ZSB0aGUgKktWTUlfRVZFTlRf UkVQTFkqIG1lc3NhZ2UgaWQgYW5kIGJlZ2lucword2l0aCB0d28gY29tbW9uIHN0cnVjdHVyZXM6 OgorCisJc3RydWN0IGt2bWlfdmNwdV9oZHI7CisJc3RydWN0IGt2bWlfZXZlbnRfcmVwbHkgewor CQlfX3U4IGFjdGlvbjsKKwkJX191OCBldmVudDsKKwkJX191MTYgcGFkZGluZzE7CisJCV9fdTMy IHBhZGRpbmcyOworCX07CisKK1NwZWNpZmljIGRhdGEgY2FuIGZvbGxvdyB0aGVzZSBjb21tb24g c3RydWN0dXJlcy4KZGlmZiAtLWdpdCBhL2FyY2gveDg2L2luY2x1ZGUvdWFwaS9hc20va3ZtaS5o IGIvYXJjaC94ODYvaW5jbHVkZS91YXBpL2FzbS9rdm1pLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMDAwMDAwLi41NTFmOWVkMWVkOWMKLS0tIC9kZXYvbnVsbAorKysgYi9hcmNo L3g4Ni9pbmNsdWRlL3VhcGkvYXNtL2t2bWkuaApAQCAtMCwwICsxLDI5IEBACisvKiBTUERYLUxp Y2Vuc2UtSWRlbnRpZmllcjogR1BMLTIuMCBXSVRIIExpbnV4LXN5c2NhbGwtbm90ZSAqLworI2lm bmRlZiBfVUFQSV9BU01fWDg2X0tWTUlfSAorI2RlZmluZSBfVUFQSV9BU01fWDg2X0tWTUlfSAor CisvKgorICogS1ZNIGludHJvc3BlY3Rpb24gLSB4ODYgc3BlY2lmaWMgc3RydWN0dXJlcyBhbmQg ZGVmaW5pdGlvbnMKKyAqLworCisjaW5jbHVkZSA8YXNtL2t2bS5oPgorCitzdHJ1Y3Qga3ZtaV9l dmVudF9hcmNoIHsKKwlfX3U4IG1vZGU7CQkvKiAyLCA0IG9yIDggKi8KKwlfX3U4IHBhZGRpbmdb N107CisJc3RydWN0IGt2bV9yZWdzIHJlZ3M7CisJc3RydWN0IGt2bV9zcmVncyBzcmVnczsKKwlz dHJ1Y3QgeworCQlfX3U2NCBzeXNlbnRlcl9jczsKKwkJX191NjQgc3lzZW50ZXJfZXNwOworCQlf X3U2NCBzeXNlbnRlcl9laXA7CisJCV9fdTY0IGVmZXI7CisJCV9fdTY0IHN0YXI7CisJCV9fdTY0 IGxzdGFyOworCQlfX3U2NCBjc3RhcjsKKwkJX191NjQgcGF0OworCQlfX3U2NCBzaGFkb3dfZ3M7 CisJfSBtc3JzOworfTsKKworI2VuZGlmIC8qIF9VQVBJX0FTTV9YODZfS1ZNSV9IICovCmRpZmYg LS1naXQgYS9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKaW5k ZXggMDk2M2U0NzVkYmU5Li42NzNjZjM3YzA3NDcgMTAwNjQ0Ci0tLSBhL2FyY2gveDg2L2t2bS9N YWtlZmlsZQorKysgYi9hcmNoL3g4Ni9rdm0vTWFrZWZpbGUKQEAgLTcsNyArNyw3IEBAIEtWTSA6 PSAuLi8uLi8uLi92aXJ0L2t2bQoga3ZtLXkJCQkrPSAkKEtWTSkva3ZtX21haW4ubyAkKEtWTSkv Y29hbGVzY2VkX21taW8ubyBcCiAJCQkJJChLVk0pL2V2ZW50ZmQubyAkKEtWTSkvaXJxY2hpcC5v ICQoS1ZNKS92ZmlvLm8KIGt2bS0kKENPTkZJR19LVk1fQVNZTkNfUEYpCSs9ICQoS1ZNKS9hc3lu Y19wZi5vCi1rdm0tJChDT05GSUdfS1ZNX0lOVFJPU1BFQ1RJT04pICs9ICQoS1ZNKS9rdm1pLm8g JChLVk0pL2t2bWlfbXNnLm8KK2t2bS0kKENPTkZJR19LVk1fSU5UUk9TUEVDVElPTikgKz0gJChL Vk0pL2t2bWkubyAkKEtWTSkva3ZtaV9tc2cubyBrdm1pLm8KIAoga3ZtLXkJCQkrPSB4ODYubyBt bXUubyBlbXVsYXRlLm8gaTgyNTkubyBpcnEubyBsYXBpYy5vIFwKIAkJCSAgIGk4MjU0Lm8gaW9h cGljLm8gaXJxX2NvbW0ubyBjcHVpZC5vIHBtdS5vIG10cnIubyBcCmRpZmYgLS1naXQgYS9hcmNo L3g4Ni9rdm0va3ZtaS5jIGIvYXJjaC94ODYva3ZtL2t2bWkuYwpuZXcgZmlsZSBtb2RlIDEwMDY0 NAppbmRleCAwMDAwMDAwMDAwMDAuLjlhZWNjYTU1MTY3MwotLS0gL2Rldi9udWxsCisrKyBiL2Fy Y2gveDg2L2t2bS9rdm1pLmMKQEAgLTAsMCArMSw5MiBAQAorLy8gU1BEWC1MaWNlbnNlLUlkZW50 aWZpZXI6IEdQTC0yLjAKKy8qCisgKiBLVk0gaW50cm9zcGVjdGlvbiAtIHg4NgorICoKKyAqIENv cHlyaWdodCAoQykgMjAxOSBCaXRkZWZlbmRlciBTLlIuTC4KKyAqLworI2luY2x1ZGUgIng4Ni5o IgorI2luY2x1ZGUgIi4uLy4uLy4uL3ZpcnQva3ZtL2t2bWlfaW50LmgiCisKKy8qCisgKiBUT0RP OiB0aGlzIGNhbiBiZSBkb25lIGZyb20gdXNlcnNwYWNlLgorICogICAtIGFsbCB0aGVzZSByZWdp c3RlcnMgYXJlIHNlbnQgd2l0aCBzdHJ1Y3Qga3ZtaV9ldmVudF9hcmNoCisgKiAgIC0gdXNlcnNw YWNlIGNhbiByZXF1ZXN0IE1TUl9FRkVSIHdpdGggS1ZNSV9HRVRfUkVHSVNURVJTCisgKi8KK3N0 YXRpYyB1bnNpZ25lZCBpbnQga3ZtaV92Y3B1X21vZGUoY29uc3Qgc3RydWN0IGt2bV92Y3B1ICp2 Y3B1LAorCQkJCSAgIGNvbnN0IHN0cnVjdCBrdm1fc3JlZ3MgKnNyZWdzKQoreworCXVuc2lnbmVk IGludCBtb2RlID0gMDsKKworCWlmIChpc19sb25nX21vZGUoKHN0cnVjdCBrdm1fdmNwdSAqKSB2 Y3B1KSkgeworCQlpZiAoc3JlZ3MtPmNzLmwpCisJCQltb2RlID0gODsKKwkJZWxzZSBpZiAoIXNy ZWdzLT5jcy5kYikKKwkJCW1vZGUgPSAyOworCQllbHNlCisJCQltb2RlID0gNDsKKwl9IGVsc2Ug aWYgKHNyZWdzLT5jcjAgJiBYODZfQ1IwX1BFKSB7CisJCWlmICghc3JlZ3MtPmNzLmRiKQorCQkJ bW9kZSA9IDI7CisJCWVsc2UKKwkJCW1vZGUgPSA0OworCX0gZWxzZSBpZiAoIXNyZWdzLT5jcy5k YikgeworCQltb2RlID0gMjsKKwl9IGVsc2UgeworCQltb2RlID0gNDsKKwl9CisKKwlyZXR1cm4g bW9kZTsKK30KKworc3RhdGljIHZvaWQga3ZtaV9nZXRfbXNycyhzdHJ1Y3Qga3ZtX3ZjcHUgKnZj cHUsIHN0cnVjdCBrdm1pX2V2ZW50X2FyY2ggKmV2ZW50KQoreworCXN0cnVjdCBtc3JfZGF0YSBt c3I7CisKKwltc3IuaG9zdF9pbml0aWF0ZWQgPSB0cnVlOworCisJbXNyLmluZGV4ID0gTVNSX0lB MzJfU1lTRU5URVJfQ1M7CisJa3ZtX2dldF9tc3IodmNwdSwgJm1zcik7CisJZXZlbnQtPm1zcnMu c3lzZW50ZXJfY3MgPSBtc3IuZGF0YTsKKworCW1zci5pbmRleCA9IE1TUl9JQTMyX1NZU0VOVEVS X0VTUDsKKwlrdm1fZ2V0X21zcih2Y3B1LCAmbXNyKTsKKwlldmVudC0+bXNycy5zeXNlbnRlcl9l c3AgPSBtc3IuZGF0YTsKKworCW1zci5pbmRleCA9IE1TUl9JQTMyX1NZU0VOVEVSX0VJUDsKKwlr dm1fZ2V0X21zcih2Y3B1LCAmbXNyKTsKKwlldmVudC0+bXNycy5zeXNlbnRlcl9laXAgPSBtc3Iu ZGF0YTsKKworCW1zci5pbmRleCA9IE1TUl9FRkVSOworCWt2bV9nZXRfbXNyKHZjcHUsICZtc3Ip OworCWV2ZW50LT5tc3JzLmVmZXIgPSBtc3IuZGF0YTsKKworCW1zci5pbmRleCA9IE1TUl9TVEFS OworCWt2bV9nZXRfbXNyKHZjcHUsICZtc3IpOworCWV2ZW50LT5tc3JzLnN0YXIgPSBtc3IuZGF0 YTsKKworCW1zci5pbmRleCA9IE1TUl9MU1RBUjsKKwlrdm1fZ2V0X21zcih2Y3B1LCAmbXNyKTsK KwlldmVudC0+bXNycy5sc3RhciA9IG1zci5kYXRhOworCisJbXNyLmluZGV4ID0gTVNSX0NTVEFS OworCWt2bV9nZXRfbXNyKHZjcHUsICZtc3IpOworCWV2ZW50LT5tc3JzLmNzdGFyID0gbXNyLmRh dGE7CisKKwltc3IuaW5kZXggPSBNU1JfSUEzMl9DUl9QQVQ7CisJa3ZtX2dldF9tc3IodmNwdSwg Jm1zcik7CisJZXZlbnQtPm1zcnMucGF0ID0gbXNyLmRhdGE7CisKKwltc3IuaW5kZXggPSBNU1Jf S0VSTkVMX0dTX0JBU0U7CisJa3ZtX2dldF9tc3IodmNwdSwgJm1zcik7CisJZXZlbnQtPm1zcnMu c2hhZG93X2dzID0gbXNyLmRhdGE7Cit9CisKK3ZvaWQga3ZtaV9hcmNoX3NldHVwX2V2ZW50KHN0 cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bWlfZXZlbnQgKmV2KQoreworCXN0cnVjdCBr dm1pX2V2ZW50X2FyY2ggKmV2ZW50ID0gJmV2LT5hcmNoOworCisJa3ZtX2FyY2hfdmNwdV9nZXRf cmVncyh2Y3B1LCAmZXZlbnQtPnJlZ3MpOworCWt2bV9hcmNoX3ZjcHVfZ2V0X3NyZWdzKHZjcHUs ICZldmVudC0+c3JlZ3MpOworCWV2LT5hcmNoLm1vZGUgPSBrdm1pX3ZjcHVfbW9kZSh2Y3B1LCAm ZXZlbnQtPnNyZWdzKTsKKwlrdm1pX2dldF9tc3JzKHZjcHUsIGV2ZW50KTsKK30KZGlmZiAtLWdp dCBhL2FyY2gveDg2L2t2bS94ODYuYyBiL2FyY2gveDg2L2t2bS94ODYuYwppbmRleCBhZGJkYjFj ZWI2MTguLjMwY2YwZDE2MmFhOCAxMDA2NDQKLS0tIGEvYXJjaC94ODYva3ZtL3g4Ni5jCisrKyBi L2FyY2gveDg2L2t2bS94ODYuYwpAQCAtODI0NCw2ICs4MjQ0LDExIEBAIGludCBrdm1fYXJjaF92 Y3B1X2lvY3RsX2dldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdz ICpyZWdzKQogCXJldHVybiAwOwogfQogCit2b2lkIGt2bV9hcmNoX3ZjcHVfZ2V0X3JlZ3Moc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtX3JlZ3MgKnJlZ3MpCit7CisJX19nZXRfcmVn cyh2Y3B1LCByZWdzKTsKK30KKwogc3RhdGljIHZvaWQgX19zZXRfcmVncyhzdHJ1Y3Qga3ZtX3Zj cHUgKnZjcHUsIHN0cnVjdCBrdm1fcmVncyAqcmVncykKIHsKIAl2Y3B1LT5hcmNoLmVtdWxhdGVf cmVnc19uZWVkX3N5bmNfZnJvbV92Y3B1ID0gdHJ1ZTsKQEAgLTgzMzksNiArODM0NCwxMSBAQCBp bnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfc3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2Y3B1LAog CXJldHVybiAwOwogfQogCit2b2lkIGt2bV9hcmNoX3ZjcHVfZ2V0X3NyZWdzKHN0cnVjdCBrdm1f dmNwdSAqdmNwdSwgc3RydWN0IGt2bV9zcmVncyAqc3JlZ3MpCit7CisJX19nZXRfc3JlZ3ModmNw dSwgc3JlZ3MpOworfQorCiBpbnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfbXBzdGF0ZShzdHJ1 Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICAgIHN0cnVjdCBrdm1fbXBfc3RhdGUgKm1wX3N0YXRl KQogewpkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9rdm1faG9zdC5oIGIvaW5jbHVkZS9saW51 eC9rdm1faG9zdC5oCmluZGV4IDFlYzA0Mzg0ZmFkMy4uZTg3NjkyMTkzOGI2IDEwMDY0NAotLS0g YS9pbmNsdWRlL2xpbnV4L2t2bV9ob3N0LmgKKysrIGIvaW5jbHVkZS9saW51eC9rdm1faG9zdC5o CkBAIC03ODgsOSArNzg4LDEyIEBAIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3RyYW5zbGF0ZShz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICAgIHN0cnVjdCBrdm1fdHJhbnNsYXRpb24gKnRy KTsKIAogaW50IGt2bV9hcmNoX3ZjcHVfaW9jdGxfZ2V0X3JlZ3Moc3RydWN0IGt2bV92Y3B1ICp2 Y3B1LCBzdHJ1Y3Qga3ZtX3JlZ3MgKnJlZ3MpOwordm9pZCBrdm1fYXJjaF92Y3B1X2dldF9yZWdz KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bV9yZWdzICpyZWdzKTsKIGludCBrdm1f YXJjaF92Y3B1X2lvY3RsX3NldF9yZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2 bV9yZWdzICpyZWdzKTsKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX2dldF9zcmVncyhzdHJ1Y3Qg a3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncyk7Cit2b2lkIGt2 bV9hcmNoX3ZjcHVfZ2V0X3NyZWdzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKKwkJCQkgIHN0cnVj dCBrdm1fc3JlZ3MgKnNyZWdzKTsKIGludCBrdm1fYXJjaF92Y3B1X2lvY3RsX3NldF9zcmVncyhz dHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsCiAJCQkJICBzdHJ1Y3Qga3ZtX3NyZWdzICpzcmVncyk7CiBp bnQga3ZtX2FyY2hfdmNwdV9pb2N0bF9nZXRfbXBzdGF0ZShzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUs CmRpZmYgLS1naXQgYS9pbmNsdWRlL3VhcGkvbGludXgva3ZtaS5oIGIvaW5jbHVkZS91YXBpL2xp bnV4L2t2bWkuaAppbmRleCAyOTQ1MmRhODE4ZTMuLmRkYTJhZTM1MjYxMSAxMDA2NDQKLS0tIGEv aW5jbHVkZS91YXBpL2xpbnV4L2t2bWkuaAorKysgYi9pbmNsdWRlL3VhcGkvbGludXgva3ZtaS5o CkBAIC04LDYgKzgsNyBAQAogCiAjaW5jbHVkZSA8bGludXgva2VybmVsLmg+CiAjaW5jbHVkZSA8 bGludXgvdHlwZXMuaD4KKyNpbmNsdWRlIDxhc20va3ZtaS5oPgogCiAjZGVmaW5lIEtWTUlfVkVS U0lPTiAweDAwMDAwMDAxCiAKQEAgLTEyMCw0ICsxMjEsMTkgQEAgc3RydWN0IGt2bWlfdmNwdV9o ZHIgewogCV9fdTMyIHBhZGRpbmcyOwogfTsKIAorc3RydWN0IGt2bWlfZXZlbnQgeworCV9fdTE2 IHNpemU7CisJX191MTYgdmNwdTsKKwlfX3U4IGV2ZW50OworCV9fdTggcGFkZGluZ1szXTsKKwlz dHJ1Y3Qga3ZtaV9ldmVudF9hcmNoIGFyY2g7Cit9OworCitzdHJ1Y3Qga3ZtaV9ldmVudF9yZXBs eSB7CisJX191OCBhY3Rpb247CisJX191OCBldmVudDsKKwlfX3UxNiBwYWRkaW5nMTsKKwlfX3Uz MiBwYWRkaW5nMjsKK307CisKICNlbmRpZiAvKiBfVUFQSV9fTElOVVhfS1ZNSV9IICovCmRpZmYg LS1naXQgYS92aXJ0L2t2bS9rdm1pLmMgYi92aXJ0L2t2bS9rdm1pLmMKaW5kZXggM2M4ODRkYzBl MzhjLi4zY2M3YmIwMzU3OTYgMTAwNjQ0Ci0tLSBhL3ZpcnQva3ZtL2t2bWkuYworKysgYi92aXJ0 L2t2bS9rdm1pLmMKQEAgLTc2LDYgKzc2LDggQEAgc3RhdGljIGJvb2wgYWxsb2Nfa3ZtaShzdHJ1 Y3Qga3ZtICprdm0sIGNvbnN0IHN0cnVjdCBrdm1faW50cm9zcGVjdGlvbiAqcWVtdSkKIAlpZiAo IWlrdm0pCiAJCXJldHVybiBmYWxzZTsKIAorCWF0b21pY19zZXQoJmlrdm0tPmV2X3NlcSwgMCk7 CisKIAlzZXRfYml0KEtWTUlfR0VUX1ZFUlNJT04sIGlrdm0tPmNtZF9hbGxvd19tYXNrKTsKIAlz ZXRfYml0KEtWTUlfQ0hFQ0tfQ09NTUFORCwgaWt2bS0+Y21kX2FsbG93X21hc2spOwogCXNldF9i aXQoS1ZNSV9DSEVDS19FVkVOVCwgaWt2bS0+Y21kX2FsbG93X21hc2spOwpAQCAtNTIwLDEwICs1 MjIsMjAgQEAgdm9pZCBrdm1pX3J1bl9qb2JzKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSkKIAl9CiB9 CiAKK3N0YXRpYyBib29sIG5lZWRfdG9fd2FpdChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUpCit7CisJ c3RydWN0IGt2bWlfdmNwdSAqaXZjcHUgPSBJVkNQVSh2Y3B1KTsKKworCXJldHVybiBpdmNwdS0+ cmVwbHlfd2FpdGluZzsKK30KKwogc3RhdGljIGJvb2wgZG9uZV93YWl0aW5nKHN0cnVjdCBrdm1f dmNwdSAqdmNwdSkKIHsKIAlzdHJ1Y3Qga3ZtaV92Y3B1ICppdmNwdSA9IElWQ1BVKHZjcHUpOwog CisJaWYgKCFuZWVkX3RvX3dhaXQodmNwdSkpCisJCXJldHVybiB0cnVlOworCiAJcmV0dXJuICFs aXN0X2VtcHR5KCZpdmNwdS0+am9iX2xpc3QpOwogfQogCkBAIC01NTIsNiArNTY0LDkgQEAgaW50 IGt2bWlfcnVuX2pvYnNfYW5kX3dhaXQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1KQogCQkJYnJlYWs7 CiAJCX0KIAorCQlpZiAoIW5lZWRfdG9fd2FpdCh2Y3B1KSkKKwkJCWJyZWFrOworCiAJCWt2bWlf YWRkX2pvYih2Y3B1LCBrdm1pX2pvYl93YWl0LCBOVUxMLCBOVUxMKTsKIAl9CiAKZGlmZiAtLWdp dCBhL3ZpcnQva3ZtL2t2bWlfaW50LmggYi92aXJ0L2t2bS9rdm1pX2ludC5oCmluZGV4IDMzZWEw NWNiOTlhZi4uNzBjOGNhMDM0M2EzIDEwMDY0NAotLS0gYS92aXJ0L2t2bS9rdm1pX2ludC5oCisr KyBiL3ZpcnQva3ZtL2t2bWlfaW50LmgKQEAgLTgyLDcgKzgyLDE4IEBAIHN0cnVjdCBrdm1pX2pv YiB7CiAJdm9pZCAoKmZyZWVfZmN0KSh2b2lkICpjdHgpOwogfTsKIAorc3RydWN0IGt2bWlfdmNw dV9yZXBseSB7CisJaW50IGVycm9yOworCWludCBhY3Rpb247CisJdTMyIHNlcTsKKwl2b2lkICpk YXRhOworCXNpemVfdCBzaXplOworfTsKKwogc3RydWN0IGt2bWlfdmNwdSB7CisJYm9vbCByZXBs eV93YWl0aW5nOworCXN0cnVjdCBrdm1pX3ZjcHVfcmVwbHkgcmVwbHk7CisKIAlzdHJ1Y3QgbGlz dF9oZWFkIGpvYl9saXN0OwogCXNwaW5sb2NrX3Qgam9iX2xvY2s7CiAKQEAgLTk2LDYgKzEwNyw3 IEBAIHN0cnVjdCBrdm1pIHsKIAogCXN0cnVjdCBzb2NrZXQgKnNvY2s7CiAJc3RydWN0IHRhc2tf c3RydWN0ICpyZWN2OworCWF0b21pY190IGV2X3NlcTsKIAogCXV1aWRfdCB1dWlkOwogCkBAIC0x MTgsOCArMTMwLDEyIEBAIHZvaWQgKmt2bWlfbXNnX2FsbG9jX2NoZWNrKHNpemVfdCBzaXplKTsK IHZvaWQga3ZtaV9tc2dfZnJlZSh2b2lkICphZGRyKTsKIGludCBrdm1pX2NtZF9jb250cm9sX3Zt X2V2ZW50cyhzdHJ1Y3Qga3ZtaSAqaWt2bSwgdW5zaWduZWQgaW50IGV2ZW50X2lkLAogCQkJICAg ICAgIGJvb2wgZW5hYmxlKTsKK2ludCBrdm1pX3J1bl9qb2JzX2FuZF93YWl0KHN0cnVjdCBrdm1f dmNwdSAqdmNwdSk7CiBpbnQga3ZtaV9hZGRfam9iKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwKIAkJ IHZvaWQgKCpmY3QpKHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgdm9pZCAqY3R4KSwKIAkJIHZvaWQg KmN0eCwgdm9pZCAoKmZyZWVfZmN0KSh2b2lkICpjdHgpKTsKIAorLyogYXJjaCAqLwordm9pZCBr dm1pX2FyY2hfc2V0dXBfZXZlbnQoc3RydWN0IGt2bV92Y3B1ICp2Y3B1LCBzdHJ1Y3Qga3ZtaV9l dmVudCAqZXYpOworCiAjZW5kaWYKZGlmZiAtLWdpdCBhL3ZpcnQva3ZtL2t2bWlfbXNnLmMgYi92 aXJ0L2t2bS9rdm1pX21zZy5jCmluZGV4IDI3MjhlNjg3MGQ0Ny4uNTM2MDM0ZTFiZWE3IDEwMDY0 NAotLS0gYS92aXJ0L2t2bS9rdm1pX21zZy5jCisrKyBiL3ZpcnQva3ZtL2t2bWlfbXNnLmMKQEAg LTI1LDYgKzI1LDggQEAgc3RhdGljIGNvbnN0IGNoYXIgKmNvbnN0IG1zZ19JRHNbXSA9IHsKIAlb S1ZNSV9DSEVDS19FVkVOVF0gICAgICAgICAgID0gIktWTUlfQ0hFQ0tfRVZFTlQiLAogCVtLVk1J X0NPTlRST0xfQ01EX1JFU1BPTlNFXSAgPSAiS1ZNSV9DT05UUk9MX0NNRF9SRVNQT05TRSIsCiAJ W0tWTUlfQ09OVFJPTF9WTV9FVkVOVFNdICAgICA9ICJLVk1JX0NPTlRST0xfVk1fRVZFTlRTIiwK KwlbS1ZNSV9FVkVOVF0gICAgICAgICAgICAgICAgID0gIktWTUlfRVZFTlQiLAorCVtLVk1JX0VW RU5UX1JFUExZXSAgICAgICAgICAgPSAiS1ZNSV9FVkVOVF9SRVBMWSIsCiAJW0tWTUlfR0VUX0dV RVNUX0lORk9dICAgICAgICA9ICJLVk1JX0dFVF9HVUVTVF9JTkZPIiwKIAlbS1ZNSV9HRVRfVkVS U0lPTl0gICAgICAgICAgID0gIktWTUlfR0VUX1ZFUlNJT04iLAogfTsKQEAgLTMzNyw2ICszMzks NTcgQEAgc3RhdGljIGludCgqY29uc3QgbXNnX3ZtW10pKHN0cnVjdCBrdm1pICosIGNvbnN0IHN0 cnVjdCBrdm1pX21zZ19oZHIgKiwKIAlbS1ZNSV9HRVRfVkVSU0lPTl0gICAgICAgICAgID0gaGFu ZGxlX2dldF92ZXJzaW9uLAogfTsKIAorc3RhdGljIGludCBoYW5kbGVfZXZlbnRfcmVwbHkoc3Ry dWN0IGt2bV92Y3B1ICp2Y3B1LAorCQkJICAgICAgY29uc3Qgc3RydWN0IGt2bWlfbXNnX2hkciAq bXNnLCBjb25zdCB2b2lkICpycGwsCisJCQkgICAgICB2Y3B1X3JlcGx5X2ZjdCByZXBseV9jYikK K3sKKwljb25zdCBzdHJ1Y3Qga3ZtaV9ldmVudF9yZXBseSAqcmVwbHkgPSBycGw7CisJc3RydWN0 IGt2bWlfdmNwdSAqaXZjcHUgPSBJVkNQVSh2Y3B1KTsKKwlzdHJ1Y3Qga3ZtaSAqaWt2bSA9IElL Vk0odmNwdS0+a3ZtKTsKKwlzdHJ1Y3Qga3ZtaV92Y3B1X3JlcGx5ICpleHBlY3RlZCA9ICZpdmNw dS0+cmVwbHk7CisJc2l6ZV90IHVzZWZ1bCwgcmVjZWl2ZWQsIGNvbW1vbjsKKworCWlmICh1bmxp a2VseShtc2ctPnNlcSAhPSBleHBlY3RlZC0+c2VxKSkKKwkJZ290byBvdXQ7CisKKwljb21tb24g PSBzaXplb2Yoc3RydWN0IGt2bWlfdmNwdV9oZHIpICsgc2l6ZW9mKCpyZXBseSk7CisJaWYgKHVu bGlrZWx5KG1zZy0+c2l6ZSA8IGNvbW1vbikpCisJCWdvdG8gb3V0OworCisJaWYgKHVubGlrZWx5 KHJlcGx5LT5wYWRkaW5nMSB8fCByZXBseS0+cGFkZGluZzIpKQorCQlnb3RvIG91dDsKKworCXJl Y2VpdmVkID0gbXNnLT5zaXplIC0gY29tbW9uOworCS8qIERvbid0IGFjY2VwdCBuZXdlci9iaWdn ZXIgc3RydWN0dXJlcyAqLworCWlmICh1bmxpa2VseShyZWNlaXZlZCA+IGV4cGVjdGVkLT5zaXpl KSkKKwkJZ290byBvdXQ7CisKKwl1c2VmdWwgPSBtaW4ocmVjZWl2ZWQsIGV4cGVjdGVkLT5zaXpl KTsKKwlpZiAodXNlZnVsKQorCQltZW1jcHkoZXhwZWN0ZWQtPmRhdGEsIHJlcGx5ICsgMSwgdXNl ZnVsKTsKKworCWlmICh1c2VmdWwgPCBleHBlY3RlZC0+c2l6ZSkKKwkJbWVtc2V0KChjaGFyICop ZXhwZWN0ZWQtPmRhdGEgKyB1c2VmdWwsIDAsCisJCQlleHBlY3RlZC0+c2l6ZSAtIHVzZWZ1bCk7 CisKKwlleHBlY3RlZC0+YWN0aW9uID0gcmVwbHktPmFjdGlvbjsKKwlleHBlY3RlZC0+ZXJyb3Ig PSAwOworCitvdXQ6CisKKwlpZiAodW5saWtlbHkoZXhwZWN0ZWQtPmVycm9yKSkKKwkJa3ZtaV9l cnIoaWt2bSwgIkludmFsaWQgZXZlbnQgJWQvJWQgcmVwbHkgc2VxICV4LyV4IHNpemUgJXUgbWlu ICV6dSBleHBlY3RlZCAlenUgcGFkZGluZyAldSwldVxuIiwKKwkJCSByZXBseS0+ZXZlbnQsIHJl cGx5LT5hY3Rpb24sCisJCQkgbXNnLT5zZXEsIGV4cGVjdGVkLT5zZXEsCisJCQkgbXNnLT5zaXpl LCBjb21tb24sCisJCQkgY29tbW9uICsgZXhwZWN0ZWQtPnNpemUsCisJCQkgcmVwbHktPnBhZGRp bmcxLAorCQkJIHJlcGx5LT5wYWRkaW5nMik7CisKKwlpdmNwdS0+cmVwbHlfd2FpdGluZyA9IGZh bHNlOworCXJldHVybiBleHBlY3RlZC0+ZXJyb3I7Cit9CisKIC8qCiAgKiBUaGVzZSBjb21tYW5k cyBhcmUgZXhlY3V0ZWQgb24gdGhlIHZDUFUgdGhyZWFkLiBUaGUgcmVjZWl2aW5nIHRocmVhZAog ICogcGFzc2VzIHRoZSBtZXNzYWdlcyB1c2luZyBhIG5ld2x5IGFsbG9jYXRlZCAnc3RydWN0IGt2 bWlfdmNwdV9jbWQnCkBAIC0zNDYsNiArMzk5LDcgQEAgc3RhdGljIGludCgqY29uc3QgbXNnX3Zt W10pKHN0cnVjdCBrdm1pICosIGNvbnN0IHN0cnVjdCBrdm1pX21zZ19oZHIgKiwKIHN0YXRpYyBp bnQoKmNvbnN0IG1zZ192Y3B1W10pKHN0cnVjdCBrdm1fdmNwdSAqLAogCQkJICAgICAgY29uc3Qg c3RydWN0IGt2bWlfbXNnX2hkciAqLCBjb25zdCB2b2lkICosCiAJCQkgICAgICB2Y3B1X3JlcGx5 X2ZjdCkgPSB7CisJW0tWTUlfRVZFTlRfUkVQTFldICAgICAgPSBoYW5kbGVfZXZlbnRfcmVwbHks CiB9OwogCiBzdGF0aWMgdm9pZCBrdm1pX2pvYl92Y3B1X2NtZChzdHJ1Y3Qga3ZtX3ZjcHUgKnZj cHUsIHZvaWQgKl9jdHgpCkBAIC01NzYsMyArNjMwLDc4IEBAIGJvb2wga3ZtaV9tc2dfcHJvY2Vz cyhzdHJ1Y3Qga3ZtaSAqaWt2bSkKIAogCXJldHVybiBlcnIgPT0gMDsKIH0KKworc3RhdGljIHZv aWQga3ZtaV9zZXR1cF9ldmVudF9jb21tb24oc3RydWN0IGt2bWlfZXZlbnQgKmV2LCB1MzIgZXZf aWQsCisJCQkJICAgIHVuc2lnbmVkIHNob3J0IHZjcHVfaWR4KQoreworCW1lbXNldChldiwgMCwg c2l6ZW9mKCpldikpOworCisJZXYtPnZjcHUgPSB2Y3B1X2lkeDsKKwlldi0+ZXZlbnQgPSBldl9p ZDsKKwlldi0+c2l6ZSA9IHNpemVvZigqZXYpOworfQorCitzdGF0aWMgdm9pZCBrdm1pX3NldHVw X2V2ZW50KHN0cnVjdCBrdm1fdmNwdSAqdmNwdSwgc3RydWN0IGt2bWlfZXZlbnQgKmV2LAorCQkJ ICAgICB1MzIgZXZfaWQpCit7CisJa3ZtaV9zZXR1cF9ldmVudF9jb21tb24oZXYsIGV2X2lkLCBr dm1fdmNwdV9nZXRfaWR4KHZjcHUpKTsKKwlrdm1pX2FyY2hfc2V0dXBfZXZlbnQodmNwdSwgZXYp OworfQorCitzdGF0aWMgaW5saW5lIHUzMiBuZXdfc2VxKHN0cnVjdCBrdm1pICppa3ZtKQorewor CXJldHVybiBhdG9taWNfaW5jX3JldHVybigmaWt2bS0+ZXZfc2VxKTsKK30KKworaW50IGt2bWlf c2VuZF9ldmVudChzdHJ1Y3Qga3ZtX3ZjcHUgKnZjcHUsIHUzMiBldl9pZCwKKwkJICAgIHZvaWQg KmV2LCBzaXplX3QgZXZfc2l6ZSwKKwkJICAgIHZvaWQgKnJwbCwgc2l6ZV90IHJwbF9zaXplLCBp bnQgKmFjdGlvbikKK3sKKwlzdHJ1Y3Qga3ZtaV9tc2dfaGRyIGhkcjsKKwlzdHJ1Y3Qga3ZtaV9l dmVudCBjb21tb247CisJc3RydWN0IGt2ZWMgdmVjW10gPSB7CisJCXsuaW92X2Jhc2UgPSAmaGRy LAkuaW92X2xlbiA9IHNpemVvZihoZHIpCSB9LAorCQl7Lmlvdl9iYXNlID0gJmNvbW1vbiwJLmlv dl9sZW4gPSBzaXplb2YoY29tbW9uKX0sCisJCXsuaW92X2Jhc2UgPSBldiwJLmlvdl9sZW4gPSBl dl9zaXplCSB9LAorCX07CisJc2l6ZV90IG1zZ19zaXplID0gc2l6ZW9mKGhkcikgKyBzaXplb2Yo Y29tbW9uKSArIGV2X3NpemU7CisJc2l6ZV90IG4gPSBldl9zaXplID8gQVJSQVlfU0laRSh2ZWMp IDogQVJSQVlfU0laRSh2ZWMpLTE7CisJc3RydWN0IGt2bWlfdmNwdSAqaXZjcHUgPSBJVkNQVSh2 Y3B1KTsKKwlzdHJ1Y3Qga3ZtaSAqaWt2bSA9IElLVk0odmNwdS0+a3ZtKTsKKwlpbnQgZXJyOwor CisJbWVtc2V0KCZoZHIsIDAsIHNpemVvZihoZHIpKTsKKwloZHIuaWQgPSBLVk1JX0VWRU5UOwor CWhkci5zZXEgPSBuZXdfc2VxKGlrdm0pOworCWhkci5zaXplID0gbXNnX3NpemUgLSBzaXplb2Yo aGRyKTsKKworCWt2bWlfc2V0dXBfZXZlbnQodmNwdSwgJmNvbW1vbiwgZXZfaWQpOworCisJbWVt c2V0KCZpdmNwdS0+cmVwbHksIDAsIHNpemVvZihpdmNwdS0+cmVwbHkpKTsKKworCWl2Y3B1LT5y ZXBseS5zZXEgPSBoZHIuc2VxOworCWl2Y3B1LT5yZXBseS5kYXRhID0gcnBsOworCWl2Y3B1LT5y ZXBseS5zaXplID0gcnBsX3NpemU7CisJaXZjcHUtPnJlcGx5LmVycm9yID0gLUVJTlRSOworCisJ ZXJyID0ga3ZtaV9zb2NrX3dyaXRlKGlrdm0sIHZlYywgbiwgbXNnX3NpemUpOworCWlmIChlcnIp CisJCWdvdG8gb3V0OworCisJaXZjcHUtPnJlcGx5X3dhaXRpbmcgPSB0cnVlOworCWVyciA9IGt2 bWlfcnVuX2pvYnNfYW5kX3dhaXQodmNwdSk7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwll cnIgPSBpdmNwdS0+cmVwbHkuZXJyb3I7CisJaWYgKGVycikKKwkJZ290byBvdXQ7CisKKwkqYWN0 aW9uID0gaXZjcHUtPnJlcGx5LmFjdGlvbjsKKworb3V0OgorCWlmIChlcnIpCisJCWt2bWlfc29j a19zaHV0ZG93bihpa3ZtKTsKKwlyZXR1cm4gZXJyOworfQorCl9fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fClZpcnR1YWxpemF0aW9uIG1haWxpbmcgbGlzdApW aXJ0dWFsaXphdGlvbkBsaXN0cy5saW51eC1mb3VuZGF0aW9uLm9yZwpodHRwczovL2xpc3RzLmxp bnV4Zm91bmRhdGlvbi5vcmcvbWFpbG1hbi9saXN0aW5mby92aXJ0dWFsaXphdGlvbg==