From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-6.6 required=3.0 tests=DKIM_INVALID,DKIM_SIGNED, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,SIGNED_OFF_BY, SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id A51A0C2BA83 for ; Wed, 12 Feb 2020 17:44:27 +0000 (UTC) Received: from lists.xenproject.org (lists.xenproject.org [192.237.175.120]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 6AE5A2073C for ; Wed, 12 Feb 2020 17:44:27 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=fail reason="signature verification failed" (1024-bit key) header.d=citrix.com header.i=@citrix.com header.b="HV7eUar/" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 6AE5A2073C Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=citrix.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=xen-devel-bounces@lists.xenproject.org Received: from localhost ([127.0.0.1] helo=lists.xenproject.org) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j1w3L-0004KA-St; Wed, 12 Feb 2020 17:43:59 +0000 Received: from us1-rack-iad1.inumbo.com ([172.99.69.81]) by lists.xenproject.org with esmtp (Exim 4.89) (envelope-from ) id 1j1w3K-0004K5-Jc for xen-devel@lists.xenproject.org; Wed, 12 Feb 2020 17:43:58 +0000 X-Inumbo-ID: 3e4752b6-4dbf-11ea-ade5-bc764e2007e4 Received: from esa5.hc3370-68.iphmx.com (unknown [216.71.155.168]) by us1-rack-iad1.inumbo.com (Halon) with ESMTPS id 3e4752b6-4dbf-11ea-ade5-bc764e2007e4; Wed, 12 Feb 2020 17:43:57 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=citrix.com; s=securemail; t=1581529437; h=date:from:to:cc:subject:message-id:references: mime-version:in-reply-to; bh=1rjhmOwVRqaB7LKIKOYIpWzMToB/GOhnx5ePmRmssqs=; b=HV7eUar/+5qY9R7br9v7fMfcJnYqMm8MDI3N5QiLLPTRlV0qxRGIP+ab H0K+besJIH2yW9IEzsqXMyMfVB6yK1CccfGlANI8h1gSUCC+OW6jLbwBS ahMcgA+he6PACFQK0hvqg9vWjE3Pdm+M/aobr3fsu1t45ZRrTdPv4isNX o=; Authentication-Results: esa5.hc3370-68.iphmx.com; dkim=none (message not signed) header.i=none; spf=None smtp.pra=roger.pau@citrix.com; spf=Pass smtp.mailfrom=roger.pau@citrix.com; spf=None smtp.helo=postmaster@mail.citrix.com Received-SPF: None (esa5.hc3370-68.iphmx.com: no sender authenticity information available from domain of roger.pau@citrix.com) identity=pra; client-ip=162.221.158.21; receiver=esa5.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible Received-SPF: Pass (esa5.hc3370-68.iphmx.com: domain of roger.pau@citrix.com designates 162.221.158.21 as permitted sender) identity=mailfrom; client-ip=162.221.158.21; receiver=esa5.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="roger.pau@citrix.com"; x-conformance=sidf_compatible; x-record-type="v=spf1"; x-record-text="v=spf1 ip4:209.167.231.154 ip4:178.63.86.133 ip4:195.66.111.40/30 ip4:85.115.9.32/28 ip4:199.102.83.4 ip4:192.28.146.160 ip4:192.28.146.107 ip4:216.52.6.88 ip4:216.52.6.188 ip4:162.221.158.21 ip4:162.221.156.83 ip4:168.245.78.127 ~all" Received-SPF: None (esa5.hc3370-68.iphmx.com: no sender authenticity information available from domain of postmaster@mail.citrix.com) identity=helo; client-ip=162.221.158.21; receiver=esa5.hc3370-68.iphmx.com; envelope-from="roger.pau@citrix.com"; x-sender="postmaster@mail.citrix.com"; x-conformance=sidf_compatible IronPort-SDR: JIK679Fpz4HB7aw1OWcWfSHMYvgfksE06jq7nrrZGHrlo36JdVHqD0oqRV/Fh/aTW7Svd2/p15 QQBUXuQsOGENDKULoJaaMFv+PfissBNKyo4G3jBAiP2Bi2qqGMtFkmMZbeG+JWWbWzSAU0Ae2o 3hP7tK336oTtd0xm6vipTVAvOhJEZjtbhf0vXw2xlnEa1YTe+0ZvyHleUBWSgG1F5G2Ud5BHLk y+GUO5212cmonb8r5JSFUkuisFIfpp3YzKrXyUEBq0ouGTzvmP+gWovoTnLe9FLa1DLnsc8zOQ L8k= X-SBRS: 2.7 X-MesageID: 12720649 X-Ironport-Server: esa5.hc3370-68.iphmx.com X-Remote-IP: 162.221.158.21 X-Policy: $RELAYED X-IronPort-AV: E=Sophos;i="5.70,433,1574139600"; d="scan'208";a="12720649" Date: Wed, 12 Feb 2020 18:43:47 +0100 From: Roger Pau =?utf-8?B?TW9ubsOp?= To: Wei Liu Message-ID: <20200212174347.GU4679@Air-de-Roger> References: <20200212160918.18470-1-liuwe@microsoft.com> <20200212160918.18470-5-liuwe@microsoft.com> MIME-Version: 1.0 Content-Disposition: inline In-Reply-To: <20200212160918.18470-5-liuwe@microsoft.com> X-ClientProxiedBy: AMSPEX02CAS02.citrite.net (10.69.22.113) To AMSPEX02CL01.citrite.net (10.69.22.125) Subject: Re: [Xen-devel] [PATCH 4/4] x86/hyperv: L0 assisted TLB flush X-BeenThere: xen-devel@lists.xenproject.org X-Mailman-Version: 2.1.23 Precedence: list List-Id: Xen developer discussion List-Unsubscribe: , List-Post: List-Help: List-Subscribe: , Cc: Wei Liu , Andrew Cooper , Paul Durrant , Michael Kelley , Jan Beulich , Xen Development List Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Errors-To: xen-devel-bounces@lists.xenproject.org Sender: "Xen-devel" T24gV2VkLCBGZWIgMTIsIDIwMjAgYXQgMDQ6MDk6MThQTSArMDAwMCwgV2VpIExpdSB3cm90ZToK PiBJbXBsZW1lbnQgTDAgYXNzaXN0ZWQgVExCIGZsdXNoIGZvciBYZW4gb24gSHlwZXItVi4gSXQg dGFrZXMgYWR2YW50YWdlCj4gb2Ygc2V2ZXJhbCBoeXBlcmNhbGxzOgo+IAo+ICAqIEhWQ0FMTF9G TFVTSF9WSVJUVUFMX0FERFJFU1NfTElTVAo+ICAqIEhWQ0FMTF9GTFVTSF9WSVJUVUFMX0FERFJF U1NfTElTVF9FWAo+ICAqIEhWQ0FMTF9GTFVTSF9WSVJUVUFMX0FERFJFU1NfU1BBQ0UKPiAgKiBI VkNBTExfRkxVU0hfVklSVFVBTF9BRERSRVNTX1NQQUNFX0VYCj4gCj4gUGljayB0aGUgbW9zdCBl ZmZpY2llbnQgaHlwZXJjYWxscyBhdmFpbGFibGUuCj4gCj4gU2lnbmVkLW9mZi1ieTogV2VpIExp dSA8bGl1d2VAbWljcm9zb2Z0LmNvbT4KPiAtLS0KPiAgeGVuL2FyY2gveDg2L2d1ZXN0L2h5cGVy di9NYWtlZmlsZSAgfCAgIDEgKwo+ICB4ZW4vYXJjaC94ODYvZ3Vlc3QvaHlwZXJ2L3ByaXZhdGUu aCB8ICAgOSArKwo+ICB4ZW4vYXJjaC94ODYvZ3Vlc3QvaHlwZXJ2L3RsYi5jICAgICB8IDE3MiAr KysrKysrKysrKysrKysrKysrKysrKysrKystCj4gIHhlbi9hcmNoL3g4Ni9ndWVzdC9oeXBlcnYv dXRpbC5jICAgIHwgIDcyICsrKysrKysrKysrKwo+ICA0IGZpbGVzIGNoYW5nZWQsIDI1MyBpbnNl cnRpb25zKCspLCAxIGRlbGV0aW9uKC0pCj4gIGNyZWF0ZSBtb2RlIDEwMDY0NCB4ZW4vYXJjaC94 ODYvZ3Vlc3QvaHlwZXJ2L3V0aWwuYwo+IAo+IGRpZmYgLS1naXQgYS94ZW4vYXJjaC94ODYvZ3Vl c3QvaHlwZXJ2L01ha2VmaWxlIGIveGVuL2FyY2gveDg2L2d1ZXN0L2h5cGVydi9NYWtlZmlsZQo+ IGluZGV4IDE4OTAyYzMzZTkuLjBlMzk0MTA5NjggMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gveDg2 L2d1ZXN0L2h5cGVydi9NYWtlZmlsZQo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9ndWVzdC9oeXBlcnYv TWFrZWZpbGUKPiBAQCAtMSwyICsxLDMgQEAKPiAgb2JqLXkgKz0gaHlwZXJ2Lm8KPiAgb2JqLXkg Kz0gdGxiLm8KPiArb2JqLXkgKz0gdXRpbC5vCj4gZGlmZiAtLWdpdCBhL3hlbi9hcmNoL3g4Ni9n dWVzdC9oeXBlcnYvcHJpdmF0ZS5oIGIveGVuL2FyY2gveDg2L2d1ZXN0L2h5cGVydi9wcml2YXRl LmgKPiBpbmRleCA3OGU1MmY3NGNlLi4zMTFmMDYwNDk1IDEwMDY0NAo+IC0tLSBhL3hlbi9hcmNo L3g4Ni9ndWVzdC9oeXBlcnYvcHJpdmF0ZS5oCj4gKysrIGIveGVuL2FyY2gveDg2L2d1ZXN0L2h5 cGVydi9wcml2YXRlLmgKPiBAQCAtMjQsMTIgKzI0LDIxIEBACj4gIAo+ICAjaW5jbHVkZSA8eGVu L2NwdW1hc2suaD4KPiAgI2luY2x1ZGUgPHhlbi9wZXJjcHUuaD4KPiArI2luY2x1ZGUgPHhlbi90 eXBlcy5oPgo+ICAKPiAgREVDTEFSRV9QRVJfQ1BVKHZvaWQgKiwgaHZfaW5wdXRfcGFnZSk7Cj4g IERFQ0xBUkVfUEVSX0NQVSh2b2lkICosIGh2X3ZwX2Fzc2lzdCk7Cj4gIERFQ0xBUkVfUEVSX0NQ VSh1aW50MzJfdCwgaHZfdnBfaW5kZXgpOwo+ICAKPiArc3RhdGljIGlubGluZSB1aW50MzJfdCBo dl92cF9pbmRleChpbnQgY3B1KQoKdW5zaWduZWQgaW50IGZvciBjcHUuCgo+ICt7Cj4gKyAgICBy ZXR1cm4gcGVyX2NwdShodl92cF9pbmRleCwgY3B1KTsKPiArfQo+ICsKPiAgaW50IGh5cGVydl9m bHVzaF90bGIoY29uc3QgY3B1bWFza190ICptYXNrLCBjb25zdCB2b2lkICp2YSwKPiAgICAgICAg ICAgICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKTsKPiAgCj4gKy8qIFJldHVybnMgbnVt YmVyIG9mIGJhbmtzLCAtZXYgaWYgZXJyb3IgKi8KPiAraW50IGNwdW1hc2tfdG9fdnBzZXQoc3Ry dWN0IGh2X3Zwc2V0ICp2cHNldCwgY29uc3QgY3B1bWFza190ICptYXNrKTsKPiArCj4gICNlbmRp ZiAvKiBfX1hFTl9IWVBFUlZfUFJJVklBVEVfSF9fICAqLwo+IGRpZmYgLS1naXQgYS94ZW4vYXJj aC94ODYvZ3Vlc3QvaHlwZXJ2L3RsYi5jIGIveGVuL2FyY2gveDg2L2d1ZXN0L2h5cGVydi90bGIu Ywo+IGluZGV4IDQ4ZjUyNzIyOWUuLjk5Yjc4OWQ5ZTkgMTAwNjQ0Cj4gLS0tIGEveGVuL2FyY2gv eDg2L2d1ZXN0L2h5cGVydi90bGIuYwo+ICsrKyBiL3hlbi9hcmNoL3g4Ni9ndWVzdC9oeXBlcnYv dGxiLmMKPiBAQCAtMTksMTUgKzE5LDE4NSBAQAo+ICAgKiBDb3B5cmlnaHQgKGMpIDIwMjAgTWlj cm9zb2Z0Lgo+ICAgKi8KPiAgCj4gKyNpbmNsdWRlIDx4ZW4vY3B1Lmg+Cj4gICNpbmNsdWRlIDx4 ZW4vY3B1bWFzay5oPgo+ICAjaW5jbHVkZSA8eGVuL2Vycm5vLmg+Cj4gIAo+ICsjaW5jbHVkZSA8 YXNtL2d1ZXN0L2h5cGVydi5oPgo+ICsjaW5jbHVkZSA8YXNtL2d1ZXN0L2h5cGVydi1oY2FsbC5o Pgo+ICsjaW5jbHVkZSA8YXNtL2d1ZXN0L2h5cGVydi10bGZzLmg+Cj4gKwo+ICAjaW5jbHVkZSAi cHJpdmF0ZS5oIgo+ICAKPiArLyoKPiArICogSXQgaXMgcG9zc2libGUgdG8gZW5jb2RlIHVwIHRv IDQwOTYgcGFnZXMgdXNpbmcgdGhlIGxvd2VyIDEyIGJpdHMKPiArICogaW4gYW4gZWxlbWVudCBv ZiBndmFfbGlzdAo+ICsgKi8KPiArI2RlZmluZSBIVl9UTEJfRkxVU0hfVU5JVCAoNDA5NiAqIFBB R0VfU0laRSkKPiArI2RlZmluZSBPUkRFUl9UT19CWVRFUyhvcmRlcikgKCgxdWwgPDwgKG9yZGVy KSkgKiBQQUdFX1NJWkUpCgpUaGVyZSBhcmUgYWxyZWFkeSBzb21lIGNvbnZlcnNpb24gZnVuY3Rp b25zIGluIHhlbi9tbS5oCihnZXRfb3JkZXJfZnJvbV97Ynl0ZXMvcGFnZXN9KSwgbWF5YmUgeW91 IGNvdWxkIGFkZCBhCmdldF9ieXRlc19mcm9tX29yZGVyIGhlbHBlciB0aGVyZT8KCj4gKwo+ICtz dGF0aWMgdW5zaWduZWQgaW50IGZpbGxfZ3ZhX2xpc3QodWludDY0X3QgKmd2YV9saXN0LCBjb25z dCB2b2lkICp2YSwKPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuc2lnbmVk IGludCBvcmRlcikKPiArewo+ICsgICAgdW5zaWduZWQgbG9uZyBzdGFydCA9ICh1bnNpZ25lZCBs b25nKXZhOwo+ICsgICAgdW5zaWduZWQgbG9uZyBlbmQgPSBzdGFydCArIE9SREVSX1RPX0JZVEVT KG9yZGVyKSAtIDE7Cj4gKyAgICB1bnNpZ25lZCBpbnQgbiA9IDA7Cj4gKwo+ICsgICAgZG8gewo+ ICsgICAgICAgIHVuc2lnbmVkIGxvbmcgcmVtYWluID0gZW5kID4gc3RhcnQgPyBlbmQgLSBzdGFy dCA6IDA7CgpJIGRvbid0IHRoaW5rIHlvdSBjYW4gZ2V0IGhlcmUgd2l0aCBlbmQgPT0gc3RhcnQ/ CgpBcyB0aGF0J3MgdGhlIGNvbmRpdGlvbiBvZiB0aGUgbG9vcCwgYW5kIG9yZGVyIDAgaXMgZ29p bmcgdG8gc2V0CmVuZCA9IHN0YXJ0ICsgNDA5NiAtIDEuCgo+ICsKPiArICAgICAgICBndmFfbGlz dFtuXSA9IHN0YXJ0ICYgUEFHRV9NQVNLOwo+ICsKPiArICAgICAgICAvKgo+ICsgICAgICAgICAq IFVzZSBsb3dlciAxMiBiaXRzIHRvIGVuY29kZSB0aGUgbnVtYmVyIG9mIGFkZGl0aW9uYWwgcGFn ZXMKPiArICAgICAgICAgKiB0byBmbHVzaAo+ICsgICAgICAgICAqLwo+ICsgICAgICAgIGlmICgg cmVtYWluID49IEhWX1RMQl9GTFVTSF9VTklUICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAg IGd2YV9saXN0W25dIHw9IH5QQUdFX01BU0s7Cj4gKyAgICAgICAgICAgIHN0YXJ0ICs9IEhWX1RM Ql9GTFVTSF9VTklUOwo+ICsgICAgICAgIH0KPiArICAgICAgICBlbHNlIGlmICggcmVtYWluICkK PiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIGd2YV9saXN0W25dIHw9IChyZW1haW4gLSAxKSA+ PiBQQUdFX1NISUZUOwo+ICsgICAgICAgICAgICBzdGFydCA9IGVuZDsKPiArICAgICAgICB9Cj4g Kwo+ICsgICAgICAgIG4rKzsKPiArICAgIH0gd2hpbGUgKCBzdGFydCA8IGVuZCApOwo+ICsKPiAr ICAgIHJldHVybiBuOwo+ICt9Cj4gKwo+ICtzdGF0aWMgdWludDY0X3QgZmx1c2hfdGxiX2V4KGNv bnN0IGNwdW1hc2tfdCAqbWFzaywgY29uc3Qgdm9pZCAqdmEsCj4gKyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgdW5zaWduZWQgaW50IGZsYWdzKQo+ICt7Cj4gKyAgICBzdHJ1Y3QgaHZfdGxi X2ZsdXNoX2V4ICpmbHVzaCA9IHRoaXNfY3B1KGh2X2lucHV0X3BhZ2UpOwo+ICsgICAgaW50IG5y X2JhbmtzOwo+ICsgICAgdW5zaWduZWQgaW50IG1heF9ndmFzOwo+ICsgICAgdW5zaWduZWQgaW50 IG9yZGVyID0gZmxhZ3MgJiBGTFVTSF9PUkRFUl9NQVNLOwo+ICsgICAgdWludDY0X3QgcmV0Owo+ ICsKPiArICAgIEFTU0VSVChmbHVzaCk7Cj4gKyAgICBBU1NFUlQoIWxvY2FsX2lycV9pc19lbmFi bGVkKCkpOwoKQ2FuIHlvdSB0dXJuIHRoaXMgaW50byBhbiBpZiBjb25kaXRpb24gd2l0aCBBU1NF UlRfVU5SRUFDSEFCTEUgYW5kCnJldHVybiB+MFVMTD8gKGFzIEkgdGhpbmsgdGhhdCBzaWduYWxz IGFuIGVycm9yKS4KCj4gKwo+ICsgICAgaWYgKCAhKG1zX2h5cGVydi5oaW50cyAmIEhWX1g2NF9F WF9QUk9DRVNTT1JfTUFTS1NfUkVDT01NRU5ERUQpICkKPiArICAgICAgICByZXR1cm4gfjBVTEw7 Cj4gKwo+ICsgICAgZmx1c2gtPmFkZHJlc3Nfc3BhY2UgPSAwOwo+ICsgICAgZmx1c2gtPmZsYWdz ID0gSFZfRkxVU0hfQUxMX1ZJUlRVQUxfQUREUkVTU19TUEFDRVM7Cj4gKyAgICBpZiAoICEoZmxh Z3MgJiBGTFVTSF9UTEJfR0xPQkFMKSApCj4gKyAgICAgICAgZmx1c2gtPmZsYWdzIHw9IEhWX0ZM VVNIX05PTl9HTE9CQUxfTUFQUElOR1NfT05MWTsKPiArCj4gKyAgICBmbHVzaC0+aHZfdnBfc2V0 LnZhbGlkX2JhbmtfbWFzayA9IDA7Cj4gKyAgICBmbHVzaC0+aHZfdnBfc2V0LmZvcm1hdCA9IEhW X0dFTkVSSUNfU0VUX1NQQVJTRV80SzsKPiArCj4gKyAgICBucl9iYW5rcyA9IGNwdW1hc2tfdG9f dnBzZXQoJmZsdXNoLT5odl92cF9zZXQsIG1hc2spOwo+ICsgICAgaWYgKCBucl9iYW5rcyA8IDAg KQo+ICsgICAgICAgIHJldHVybiB+MFVMTDsKPiArCj4gKyAgICBtYXhfZ3ZhcyA9Cj4gKyAgICAg ICAgKFBBR0VfU0laRSAtIHNpemVvZigqZmx1c2gpIC0gbnJfYmFua3MgKgo+ICsgICAgICAgICBz aXplb2YoZmx1c2gtPmh2X3ZwX3NldC5iYW5rX2NvbnRlbnRzWzBdKSkgLwo+ICsgICAgICAgIHNp emVvZih1aW50NjRfdCk7ICAgICAgIC8qIGd2YSBpcyByZXByZXNlbnRlZCBhcyB1aW50NjRfdCAq Lwo+ICsKPiArICAgIC8qCj4gKyAgICAgKiBGbHVzaCB0aGUgZW50aXJlIGFkZHJlc3Mgc3BhY2Ug aWYgdmEgaXMgTlVMTCBvciBpZiB0aGVyZSBpcyBub3QKPiArICAgICAqIGVub3VnaCBzcGFjZSBm b3IgZ3ZhX2xpc3QuCj4gKyAgICAgKi8KPiArICAgIGlmICggIXZhIHx8IChPUkRFUl9UT19CWVRF UyhvcmRlcikgLyBIVl9UTEJfRkxVU0hfVU5JVCkgPiBtYXhfZ3ZhcyApCj4gKyAgICAgICAgcmV0 ID0gaHZfZG9fcmVwX2h5cGVyY2FsbChIVkNBTExfRkxVU0hfVklSVFVBTF9BRERSRVNTX1NQQUNF X0VYLCAwLAo+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbnJfYmFua3MsIHZp cnRfdG9fbWFkZHIoZmx1c2gpLCAwKTsKPiArICAgIGVsc2UKPiArICAgIHsKPiArICAgICAgICB1 aW50NjRfdCAqZ3ZhX2xpc3QgPSAodWludDY0X3QgKilmbHVzaCArIHNpemVvZigqZmx1c2gpICsg bnJfYmFua3M7CgpEb24ndCB5b3UgbmVlZCBucl9iYW5rcyAqIHNpemVvZihmbHVzaC0+aHZfdnBf c2V0LmJhbmtfY29udGVudHMpIGluCm9yZGVyIHRvIGNhbGN1bGF0ZSB0aGUgcG9zaXRpb24gb2Yg dGhlIGd2YV9saXN0PwoKPiArICAgICAgICB1bnNpZ25lZCBpbnQgZ3ZhcyA9IGZpbGxfZ3ZhX2xp c3QoZ3ZhX2xpc3QsIHZhLCBvcmRlcik7Cj4gKwo+ICsgICAgICAgIHJldCA9IGh2X2RvX3JlcF9o eXBlcmNhbGwoSFZDQUxMX0ZMVVNIX1ZJUlRVQUxfQUREUkVTU19MSVNUX0VYLAo+ICsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZ3ZhcywgbnJfYmFua3MsIHZpcnRfdG9fbWFkZHIo Zmx1c2gpLCAwKTsKPiArICAgIH0KPiArCj4gKyAgICByZXR1cm4gcmV0Owo+ICt9Cj4gKwo+ICBp bnQgaHlwZXJ2X2ZsdXNoX3RsYihjb25zdCBjcHVtYXNrX3QgKm1hc2ssIGNvbnN0IHZvaWQgKnZh LAo+ICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBpbnQgZmxhZ3MpCj4gIHsKPiAtICAg IHJldHVybiAtRU9QTk9UU1VQUDsKPiArICAgIHVuc2lnbmVkIGxvbmcgaXJxX2ZsYWdzOwo+ICsg ICAgc3RydWN0IGh2X3RsYl9mbHVzaCAqZmx1c2ggPSB0aGlzX2NwdShodl9pbnB1dF9wYWdlKTsK PiArICAgIHVpbnQ2NF90IHJldDsKPiArICAgIHVuc2lnbmVkIGludCBvcmRlciA9IGZsYWdzICYg RkxVU0hfT1JERVJfTUFTSzsKPiArICAgIHVuc2lnbmVkIGludCBtYXhfZ3ZhczsKPiArCj4gKyAg ICBBU1NFUlQoZmx1c2gpOwo+ICsgICAgQVNTRVJUKCFjcHVtYXNrX2VtcHR5KG1hc2spKTsKPiAr Cj4gKyAgICBsb2NhbF9pcnFfc2F2ZShpcnFfZmxhZ3MpOwo+ICsKPiArICAgIGZsdXNoLT5hZGRy ZXNzX3NwYWNlID0gMDsKPiArICAgIGZsdXNoLT5mbGFncyA9IEhWX0ZMVVNIX0FMTF9WSVJUVUFM X0FERFJFU1NfU1BBQ0VTOwo+ICsgICAgZmx1c2gtPnByb2Nlc3Nvcl9tYXNrID0gMDsKPiArICAg IGlmICggIShmbGFncyAmIEZMVVNIX1RMQl9HTE9CQUwpICkKPiArICAgICAgICBmbHVzaC0+Zmxh Z3MgfD0gSFZfRkxVU0hfTk9OX0dMT0JBTF9NQVBQSU5HU19PTkxZOwo+ICsKPiArICAgIGlmICgg Y3B1bWFza19lcXVhbChtYXNrLCAmY3B1X29ubGluZV9tYXApICkKPiArICAgICAgICBmbHVzaC0+ ZmxhZ3MgfD0gSFZfRkxVU0hfQUxMX1BST0NFU1NPUlM7Cj4gKyAgICBlbHNlCj4gKyAgICB7Cj4g KyAgICAgICAgaW50IGNwdTsKCnVuc2lnbmVkIGludC4KCj4gKwo+ICsgICAgICAgIC8qCj4gKyAg ICAgICAgICogTm9ybWFsbHkgVlAgaW5kaWNlcyBhcmUgaW4gYXNjZW5kaW5nIG9yZGVyIGFuZCBt YXRjaCBYZW4ncwo+ICsgICAgICAgICAqIGlkZWEgb2YgQ1BVIGlkcy4gQ2hlY2sgdGhlIGxhc3Qg aW5kZXggdG8gc2VlIGlmIFZQIGluZGV4IGlzCj4gKyAgICAgICAgICogPj0gNjQuIElmIHNvLCB3 ZSBjYW4gc2tpcCBzZXR0aW5nIHVwIHBhcmFtZXRlcnMgZm9yCj4gKyAgICAgICAgICogbm9uLWFw cGxpY2FibGUgaHlwZXJjYWxscyB3aXRob3V0IGxvb2tpbmcgZnVydGhlci4KPiArICAgICAgICAg Ki8KPiArICAgICAgICBpZiAoIGh2X3ZwX2luZGV4KGNwdW1hc2tfbGFzdChtYXNrKSkgPj0gNjQg KQo+ICsgICAgICAgICAgICBnb3RvIGRvX2V4X2h5cGVyY2FsbDsKPiArCj4gKyAgICAgICAgZm9y X2VhY2hfY3B1ICggY3B1LCBtYXNrICkKPiArICAgICAgICB7Cj4gKyAgICAgICAgICAgIHVpbnQz Ml90IHZwaWQgPSBodl92cF9pbmRleChjcHUpOwo+ICsKPiArICAgICAgICAgICAgaWYgKCB2cGlk ID4gbXNfaHlwZXJ2Lm1heF92cF9pbmRleCApCj4gKyAgICAgICAgICAgIHsKPiArICAgICAgICAg ICAgICAgIGxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7Cj4gKyAgICAgICAgICAgICAgICBy ZXR1cm4gLUVOWElPOwo+ICsgICAgICAgICAgICB9Cj4gKwo+ICsgICAgICAgICAgICBpZiAoIHZw aWQgPj0gNjQgKQo+ICsgICAgICAgICAgICAgICAgZ290byBkb19leF9oeXBlcmNhbGw7Cj4gKwo+ ICsgICAgICAgICAgICBfX3NldF9iaXQodnBpZCwgJmZsdXNoLT5wcm9jZXNzb3JfbWFzayk7Cj4g KyAgICAgICAgfQo+ICsgICAgfQo+ICsKPiArICAgIG1heF9ndmFzID0gKFBBR0VfU0laRSAtIHNp emVvZigqZmx1c2gpKSAvIHNpemVvZihmbHVzaC0+Z3ZhX2xpc3RbMF0pOwo+ICsKPiArICAgIC8q Cj4gKyAgICAgKiBGbHVzaCB0aGUgZW50aXJlIGFkZHJlc3Mgc3BhY2UgaWYgdmEgaXMgTlVMTCBv ciBpZiB0aGVyZSBpcyBub3QKPiArICAgICAqIGVub3VnaCBzcGFjZSBmb3IgZ3ZhX2xpc3QuCj4g KyAgICAgKi8KPiArICAgIGlmICggIXZhIHx8IChPUkRFUl9UT19CWVRFUyhvcmRlcikgLyBIVl9U TEJfRkxVU0hfVU5JVCkgPiBtYXhfZ3ZhcyApCj4gKyAgICAgICAgcmV0ID0gaHZfZG9faHlwZXJj YWxsKEhWQ0FMTF9GTFVTSF9WSVJUVUFMX0FERFJFU1NfU1BBQ0UsCj4gKyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHZpcnRfdG9fbWFkZHIoZmx1c2gpLCAwKTsKPiArICAgIGVsc2UKPiAr ICAgIHsKPiArICAgICAgICB1bnNpZ25lZCBpbnQgZ3ZhcyA9IGZpbGxfZ3ZhX2xpc3QoZmx1c2gt Pmd2YV9saXN0LCB2YSwgb3JkZXIpOwo+ICsKPiArICAgICAgICByZXQgPSBodl9kb19yZXBfaHlw ZXJjYWxsKEhWQ0FMTF9GTFVTSF9WSVJUVUFMX0FERFJFU1NfTElTVCwgZ3ZhcywgMCwKPiArICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZpcnRfdG9fbWFkZHIoZmx1c2gpLCAwKTsK PiArICAgIH0KPiArCj4gKyAgICBnb3RvIGRvbmU7Cj4gKwo+ICsgZG9fZXhfaHlwZXJjYWxsOgo+ ICsgICAgcmV0ID0gZmx1c2hfdGxiX2V4KG1hc2ssIHZhLCBmbGFncyk7Cj4gKwo+ICsgZG9uZToK PiArICAgIGxvY2FsX2lycV9yZXN0b3JlKGlycV9mbGFncyk7Cj4gKwo+ICsgICAgcmV0dXJuIHJl dCAmIEhWX0hZUEVSQ0FMTF9SRVNVTFRfTUFTSzsKCldpbGwgdGhpcyByZXR1cm4gYW4gZXJyb3Ig Y29kZSB0aGF0IHVzZXMgdGhlIHNhbWUgc3BhY2UgYXMgWGVuJ3MgZXJybm8KdmFsdWVzPwoKPiAg fQo+ICAKPiAgLyoKPiBkaWZmIC0tZ2l0IGEveGVuL2FyY2gveDg2L2d1ZXN0L2h5cGVydi91dGls LmMgYi94ZW4vYXJjaC94ODYvZ3Vlc3QvaHlwZXJ2L3V0aWwuYwo+IG5ldyBmaWxlIG1vZGUgMTAw NjQ0Cj4gaW5kZXggMDAwMDAwMDAwMC4uOWQwYjVmNGE0Ngo+IC0tLSAvZGV2L251bGwKPiArKysg Yi94ZW4vYXJjaC94ODYvZ3Vlc3QvaHlwZXJ2L3V0aWwuYwo+IEBAIC0wLDAgKzEsNzIgQEAKPiAr LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKgo+ICsgKiBhcmNoL3g4Ni9ndWVzdC9oeXBlcnYvdXRpbC5j Cj4gKyAqCj4gKyAqIEh5cGVyLVYgdXRpbGl0eSBmdW5jdGlvbnMKPiArICoKPiArICogVGhpcyBw cm9ncmFtIGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vciBt b2RpZnkKPiArICogaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUgR2VuZXJhbCBQdWJsaWMg TGljZW5zZSBhcyBwdWJsaXNoZWQgYnkKPiArICogdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlv bjsgZWl0aGVyIHZlcnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IKPiArICogKGF0IHlvdXIgb3B0 aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KPiArICoKPiArICogVGhpcyBwcm9ncmFtIGlzIGRpc3Ry aWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2VmdWwsCj4gKyAqIGJ1dCBXSVRI T1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCj4g KyAqIE1FUkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4g IFNlZSB0aGUKPiArICogR05VIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls cy4KPiArICoKPiArICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05V IEdlbmVyYWwgUHVibGljIExpY2Vuc2UKPiArICogYWxvbmcgd2l0aCB0aGlzIHByb2dyYW07IElm IG5vdCwgc2VlIDxodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvPi4KPiArICoKPiArICogQ29w eXJpZ2h0IChjKSAyMDIwIE1pY3Jvc29mdC4KPiArICovCj4gKwo+ICsjaW5jbHVkZSA8eGVuL2Nw dS5oPgo+ICsjaW5jbHVkZSA8eGVuL2NwdW1hc2suaD4KPiArI2luY2x1ZGUgPHhlbi9lcnJuby5o Pgo+ICsKPiArI2luY2x1ZGUgPGFzbS9ndWVzdC9oeXBlcnYuaD4KPiArI2luY2x1ZGUgPGFzbS9n dWVzdC9oeXBlcnYtdGxmcy5oPgo+ICsKPiArI2luY2x1ZGUgInByaXZhdGUuaCIKPiArCj4gK2lu dCBjcHVtYXNrX3RvX3Zwc2V0KHN0cnVjdCBodl92cHNldCAqdnBzZXQsCj4gKyAgICAgICAgICAg ICAgICAgICAgIGNvbnN0IGNwdW1hc2tfdCAqbWFzaykKPiArewo+ICsgICAgaW50IG5yID0gMSwg Y3B1LCB2Y3B1X2JhbmssIHZjcHVfb2Zmc2V0Owo+ICsgICAgaW50IG1heF9iYW5rcyA9IG1zX2h5 cGVydi5tYXhfdnBfaW5kZXggLyA2NDsKCkkgdGhpbmsgbnIgd2hhdHMgdG8gYmUgaW50ICh0byBt YXRjaCB0aGUgZnVuY3Rpb24gcmV0dXJuIHR5cGUpLCBidXQKdGhlIHJlc3Qgc2hvdWxkIGJlIHVu c2lnbmVkIGludHMsIHNwZWNpYWxseSBiZWNhdXNlIHRoZXkgYXJlIHVzZWQgYXMKYXJyYXkgaW5k ZXhlcy4KCj4gKwo+ICsgICAgLyogVXAgdG8gNjQgYmFua3MgY2FuIGJlIHJlcHJlc2VudGVkIGJ5 IHZhbGlkX2JhbmtfbWFzayAqLwo+ICsgICAgaWYgKCBtYXhfYmFua3MgPj0gNjQgKQo+ICsgICAg ICAgIHJldHVybiAtMTsKCkUyQklHIG9yIHNvbWUgc3VjaD8KCj4gKwo+ICsgICAgLyogQ2xlYXIg YWxsIGJhbmtzIHRvIGF2b2lkIGZsdXNoaW5nIHVud2FudGVkIENQVXMgKi8KPiArICAgIGZvciAo IHZjcHVfYmFuayA9IDA7IHZjcHVfYmFuayA8PSBtYXhfYmFua3M7IHZjcHVfYmFuaysrICkKPiAr ICAgICAgICB2cHNldC0+YmFua19jb250ZW50c1t2Y3B1X2JhbmtdID0gMDsKPiArCj4gKyAgICB2 cHNldC0+dmFsaWRfYmFua19tYXNrID0gMDsKPiArCj4gKyAgICBmb3JfZWFjaF9jcHUgKCBjcHUs IG1hc2sgKQo+ICsgICAgewo+ICsgICAgICAgIGludCB2Y3B1ID0gaHZfdnBfaW5kZXgoY3B1KTsK CnVuc2lnbmVkIGludCBvciB1aW50MzJfdCAod2hpY2ggaXMgdGhlIHR5dXBlIHRoYXQgaHZfdnBf aW5kZXgKcmV0dXJucykuCgpUaGFua3MsIFJvZ2VyLgoKX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX18KWGVuLWRldmVsIG1haWxpbmcgbGlzdApYZW4tZGV2ZWxA bGlzdHMueGVucHJvamVjdC5vcmcKaHR0cHM6Ly9saXN0cy54ZW5wcm9qZWN0Lm9yZy9tYWlsbWFu L2xpc3RpbmZvL3hlbi1kZXZlbA==