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 Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id EC030C4167B for ; Wed, 29 Nov 2023 12:44:12 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:From:References:Cc:To: Subject:MIME-Version:Date:Message-ID:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=2xSyeADXN0smvoL/D6YWEqpH12hpVzc5av3vZ9U7/o4=; b=ghYiPkFT7K8W5t 0+j6NY0h/t4ReKG7vIXHNvHZIqmY5praDgbN3mr3yDwrbVgY8xiNHbohnSxw4cEb4JEKqf77FR5f+ fkZznD5jH9EIZ6GyeTbs/iEM9aYVdffmLvdeoDzDT9vRToZSVv49IKoZp2KoYjV+9ezDEuUCZNh0q 9HuIYQ6MXrpCj2QQxzH9OF2XLVbLQf+gmAIRf+IqvzYATHxGPtMvROLDu7Dm3A5EWXrJ1eGB4u3E0 dYCYuWRT/qKDmoq2kizBdxeQFcUzdjmHfOiBbypym1048y95eFYK2py3hUCo58jG3W51WDvnTMhlO 7x/o5shPk6HopDjbsiug==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r8Jur-008NEC-1h; Wed, 29 Nov 2023 12:43:45 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1r8Juo-008NDb-1D for linux-arm-kernel@lists.infradead.org; Wed, 29 Nov 2023 12:43:44 +0000 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 86DDF2F4; Wed, 29 Nov 2023 04:44:28 -0800 (PST) Received: from [10.57.70.211] (unknown [10.57.70.211]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id CD1843F5A1; Wed, 29 Nov 2023 04:43:37 -0800 (PST) Message-ID: <34da1e06-74da-4e45-b0b5-9c93d64eb64e@arm.com> Date: Wed, 29 Nov 2023 12:43:35 +0000 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH v2 14/14] arm64/mm: Add ptep_get_and_clear_full() to optimize process teardown Content-Language: en-GB To: Barry Song <21cnbao@gmail.com> Cc: akpm@linux-foundation.org, andreyknvl@gmail.com, anshuman.khandual@arm.com, ardb@kernel.org, catalin.marinas@arm.com, david@redhat.com, dvyukov@google.com, glider@google.com, james.morse@arm.com, jhubbard@nvidia.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, mark.rutland@arm.com, maz@kernel.org, oliver.upton@linux.dev, ryabinin.a.a@gmail.com, suzuki.poulose@arm.com, vincenzo.frascino@arm.com, wangkefeng.wang@huawei.com, will@kernel.org, willy@infradead.org, yuzenghui@huawei.com, yuzhao@google.com, ziy@nvidia.com References: <20231115163018.1303287-15-ryan.roberts@arm.com> <20231128081742.39204-1-v-songbaohua@oppo.com> <207de995-6d48-41ea-8373-2f9caad9b9c3@arm.com> From: Ryan Roberts In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20231129_044342_512088_AC1CDACD X-CRM114-Status: GOOD ( 52.95 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: base64 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org T24gMjgvMTEvMjAyMyAyMDoyMywgQmFycnkgU29uZyB3cm90ZToKPiBPbiBXZWQsIE5vdiAyOSwg MjAyMyBhdCAxMjo0OeKAr0FNIFJ5YW4gUm9iZXJ0cyA8cnlhbi5yb2JlcnRzQGFybS5jb20+IHdy b3RlOgo+Pgo+PiBPbiAyOC8xMS8yMDIzIDA4OjE3LCBCYXJyeSBTb25nIHdyb3RlOgo+Pj4+ICtw dGVfdCBjb250cHRlX3B0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKHN0cnVjdCBtbV9zdHJ1Y3QgKm1t LAo+Pj4+ICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bnNpZ25lZCBsb25n IGFkZHIsIHB0ZV90ICpwdGVwKQo+Pj4+ICt7Cj4+Pj4gKyAgICAvKgo+Pj4+ICsgICAgICogV2hl biBkb2luZyBhIGZ1bGwgYWRkcmVzcyBzcGFjZSB0ZWFyZG93biwgd2UgY2FuIGF2b2lkIHVuZm9s ZGluZyB0aGUKPj4+PiArICAgICAqIGNvbnRpZ3VvdXMgcmFuZ2UsIGFuZCB0aGVyZWZvcmUgYXZv aWQgdGhlIGFzc29jaWF0ZWQgdGxiaS4gSW5zdGVhZCwKPj4+PiArICAgICAqIGp1c3QgZ2V0IGFu ZCBjbGVhciB0aGUgcHRlLiBUaGUgY2FsbGVyIGlzIHByb21pc2luZyB0byBjYWxsIHVzIGZvcgo+ Pj4+ICsgICAgICogZXZlcnkgcHRlLCBzbyBldmVyeSBwdGUgaW4gdGhlIHJhbmdlIHdpbGwgYmUg Y2xlYXJlZCBieSB0aGUgdGltZSB0aGUKPj4+PiArICAgICAqIHRsYmkgaXMgaXNzdWVkLgo+Pj4+ ICsgICAgICoKPj4+PiArICAgICAqIFRoaXMgYXBwcm9hY2ggaXMgbm90IHBlcmZlY3QgdGhvdWdo LCBhcyBmb3IgdGhlIGR1cmF0aW9uIGJldHdlZW4KPj4+PiArICAgICAqIHJldHVybmluZyBmcm9t IHRoZSBmaXJzdCBjYWxsIHRvIHB0ZXBfZ2V0X2FuZF9jbGVhcl9mdWxsKCkgYW5kIG1ha2luZwo+ Pj4+ICsgICAgICogdGhlIGZpbmFsIGNhbGwsIHRoZSBjb250cHRlIGJsb2NrIGluIGFuIGludGVy bWVkaWF0ZSBzdGF0ZSwgd2hlcmUKPj4+PiArICAgICAqIHNvbWUgcHRlcyBhcmUgY2xlYXJlZCBh bmQgb3RoZXJzIGFyZSBzdGlsbCBzZXQgd2l0aCB0aGUgUFRFX0NPTlQgYml0Lgo+Pj4+ICsgICAg ICogSWYgYW55IG90aGVyIEFQSXMgYXJlIGNhbGxlZCBmb3IgdGhlIHB0ZXMgaW4gdGhlIGNvbnRw dGUgYmxvY2sgZHVyaW5nCj4+Pj4gKyAgICAgKiB0aGF0IHRpbWUsIHdlIGhhdmUgdG8gYmUgdmVy eSBjYXJlZnVsLiBUaGUgY29yZSBjb2RlIGN1cnJlbnRseQo+Pj4+ICsgICAgICogaW50ZXJsZWF2 ZXMgY2FsbHMgdG8gcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwoKSB3aXRoIHB0ZXBfZ2V0KCkgYW5k IHNvCj4+Pj4gKyAgICAgKiBwdGVwX2dldCgpIG11c3QgYmUgY2FyZWZ1bCB0byBpZ25vcmUgdGhl IGNsZWFyZWQgZW50cmllcyB3aGVuCj4+Pj4gKyAgICAgKiBhY2N1bXVsYXRpbmcgdGhlIGFjY2Vz cyBhbmQgZGlydHkgYml0cyAtIHRoZSBzYW1lIGdvZXMgZm9yCj4+Pj4gKyAgICAgKiBwdGVwX2dl dF9sb2NrbGVzcygpLiBUaGUgb25seSBvdGhlciBjYWxscyB3ZSBtaWdodCByZXNvbmFibHkgZXhw ZWN0Cj4+Pj4gKyAgICAgKiBhcmUgdG8gc2V0IG1hcmtlcnMgaW4gdGhlIHByZXZpb3VzbHkgY2xl YXJlZCBwdGVzLiAoV2Ugc2hvdWxkbid0IHNlZQo+Pj4+ICsgICAgICogdmFsaWQgZW50cmllcyBi ZWluZyBzZXQgdW50aWwgYWZ0ZXIgdGhlIHRsYmksIGF0IHdoaWNoIHBvaW50IHdlIGFyZQo+Pj4+ ICsgICAgICogbm8gbG9uZ2VyIGluIHRoZSBpbnRlcm1lZGlhdGUgc3RhdGUpLiBTaW5jZSBtYXJr ZXJzIGFyZSBub3QgdmFsaWQsCj4+Pj4gKyAgICAgKiB0aGlzIGlzIHNhZmU7IHNldF9wdGVzKCkg d2lsbCBzZWUgdGhlIG9sZCwgaW52YWxpZCBlbnRyeSBhbmQgd2lsbCBub3QKPj4+PiArICAgICAq IGF0dGVtcHQgdG8gdW5mb2xkLiBBbmQgdGhlIG5ldyBwdGUgaXMgYWxzbyBpbnZhbGlkIHNvIGl0 IHdvbid0Cj4+Pj4gKyAgICAgKiBhdHRlbXB0IHRvIGZvbGQuIFdlIHNob3VsZG4ndCBzZWUgdGhp cyBmb3IgdGhlICdmdWxsJyBjYXNlIGFueXdheS4KPj4+PiArICAgICAqCj4+Pj4gKyAgICAgKiBU aGUgbGFzdCByZW1haW5pbmcgaXNzdWUgaXMgcmV0dXJuaW5nIHRoZSBhY2Nlc3MvZGlydHkgYml0 cy4gVGhhdAo+Pj4+ICsgICAgICogaW5mbyBjb3VsZCBiZSBwcmVzZW50IGluIGFueSBvZiB0aGUg cHRlcyBpbiB0aGUgY29udHB0ZSBibG9jay4KPj4+PiArICAgICAqIHB0ZXBfZ2V0KCkgd2lsbCBn YXRoZXIgdGhvc2UgYml0cyBmcm9tIGFjcm9zcyB0aGUgY29udHB0ZSBibG9jay4gV2UKPj4+PiAr ICAgICAqIGRvbid0IGJvdGhlciBkb2luZyB0aGF0IGhlcmUsIGJlY2F1c2Ugd2Uga25vdyB0aGF0 IHRoZSBpbmZvcm1hdGlvbiBpcwo+Pj4+ICsgICAgICogdXNlZCBieSB0aGUgY29yZS1tbSB0byBt YXJrIHRoZSB1bmRlcmx5aW5nIGZvbGlvIGFzIGFjY2Vzc2VkL2RpcnR5Lgo+Pj4+ICsgICAgICog QW5kIHNpbmNlIHRoZSBzYW1lIGZvbGlvIG11c3QgYmUgdW5kZXJwaW5uaW5nIHRoZSB3aG9sZSBi bG9jayAodGhhdAo+Pj4+ICsgICAgICogd2FzIGEgcmVxdWlyZW1lbnQgZm9yIGZvbGRpbmcgaW4g dGhlIGZpcnN0IHBsYWNlKSwgdGhhdCBpbmZvcm1hdGlvbgo+Pj4+ICsgICAgICogd2lsbCBtYWtl IGl0IHRvIHRoZSBmb2xpbyBldmVudHVhbGx5IG9uY2UgYWxsIHRoZSBwdGVzIGhhdmUgYmVlbgo+ Pj4+ICsgICAgICogY2xlYXJlZC4gVGhpcyBhcHByb2FjaCBtZWFucyB3ZSBkb24ndCBoYXZlIHRv IHBsYXkgZ2FtZXMgd2l0aAo+Pj4+ICsgICAgICogYWNjdW11bGF0aW5nIGFuZCBzdG9yaW5nIHRo ZSBiaXRzLiBJdCBkb2VzIG1lYW4gdGhhdCBhbnkgaW50ZXJsZWF2ZWQKPj4+PiArICAgICAqIGNh bGxzIHRvIHB0ZXBfZ2V0KCkgbWF5IGxhY2sgY29ycmVjdCBhY2Nlc3MvZGlydHkgaW5mb3JtYXRp b24gaWYgd2UKPj4+PiArICAgICAqIGhhdmUgYWxyZWFkeSBjbGVhcmVkIHRoZSBwdGUgdGhhdCBo YXBwZW5lZCB0byBzdG9yZSBpdC4gVGhlIGNvcmUgY29kZQo+Pj4+ICsgICAgICogZG9lcyBub3Qg cmVseSBvbiB0aGlzIHRob3VnaC4KPj4+Cj4+PiBldmVuIHdpdGhvdXQgYW55IG90aGVyIHRocmVh ZHMgcnVubmluZyBhbmQgdG91Y2hpbmcgdGhvc2UgUFRFcywgdGhpcyB3b24ndCBzdXJ2aXZlCj4+ PiBvbiBzb21lIGhhcmR3YXJlLiB3ZSBleHBvc2UgaW5jb25zaXN0ZW50IENPTlRQVEVzIHRvIGhh cmR3YXJlLCB0aGlzIG1pZ2h0IHJlc3VsdAo+Pgo+PiBObyB0aGF0J3Mgbm90IHRoZSBjYXNlOyBp ZiB5b3UgcmVhZCB0aGUgQXJtIEFSTSwgdGhlIHBhZ2UgdGFibGUgaXMgb25seQo+PiBjb25zaWRl cmVkICJtaXNncm9ncmFtbWVkIiB3aGVuICp2YWxpZCogZW50cmllcyB3aXRoaW4gdGhlIHNhbWUg Y29udHB0ZSBibG9jawo+PiBoYXZlIGRpZmZlcmVudCB2YWx1ZXMgZm9yIHRoZSBjb250aWd1b3Vz IGJpdC4gV2UgYXJlIGNsZWFyaW5nIHRoZSBwdGVzIHRvIHplcm8KPj4gaGVyZSwgd2hpY2ggaXMg YW4gKmludmFsaWQqIGVudHJ5LiBTbyBpZiB0aGUgVExCIGVudHJ5IHNvbWVob3cgZ2V0cyBpbnZh bGlkYXRlZAo+PiAoZWl0aGVyIGR1ZSB0byBleHBsaWNpdCB0bGJpIGFzIHlvdSBwb2ludCBvdXQg YmVsb3csIG9yIGR1ZSB0byBhIGNvbmN1cnJlbnQgVExCCj4+IG1pc3Mgd2hpY2ggc2VsZWN0cyBv dXIgZW50cnkgZm9yIHJlbW92YWwgdG8gbWFrZSBzcGFjZSBmb3IgdGhlIG5ldyBpbmNvbW1pbmcK Pj4gZW50cnkpLCB0aGVuIGl0IGdldHMgYW4gYWNjZXNzIHJlcXVlc3QgZm9yIGFuIGFkZHJlc3Mg aW4gb3VyIHBhcnRpYWxseSBjbGVhcmVkCj4+IGNvbnRwdGUgYmxvY2sgdGhlIGFkZHJlc3Mgd2ls bCBlaXRoZXIgYmU6Cj4+Cj4+IEEpIGFuIGFkZHJlc3MgZm9yIGEgcHRlIGVudHJ5IHdlIGhhdmUg YWxyZWFkeSBjbGVhcmVkLCBzbyBpdHMgaW52YWxpZCBhbmQgaXQKPj4gd2lsbCBmYXVsdCAoYW5k IGdldCBzZXJpYWxpemVkIGJlaGluZCB0aGUgUFRMKS4KPj4KPj4gb3IKPj4KPj4gQikgYW4gYWRk cmVzcyBmb3IgYSBwdGUgZW50cnkgd2UgaGF2ZW4ndCB5ZXQgY2xlYXJlZCwgc28gaXQgd2lsbCBy ZWZvcm0gYSBUTEIKPj4gZW50cnkgZm9yIHRoZSBjb250cHRlIGJsb2NrLiBCdXQgdGhhdCdzIG9r IGJlY2F1c2UgdGhlIG1lbW9yeSBzdGlsbCBleGlzdHMKPj4gYmVjYXVzZSB3ZSBoYXZlbid0IHll dCBmaW5pc2hlZCBjbGVhcmluZyB0aGUgcGFnZSB0YWJsZSBhbmQgaGF2ZSBub3QgeWV0IGlzc3Vl ZAo+PiB0aGUgZmluYWwgdGxiaS4KPj4KPj4KPj4+IGluIGNyYXNoZWQgZmlybXdhcmUgZXZlbiBp biB0cnVzdHpvbmUsIHN0cmFuZ2UmdW5rbm93biBmYXVsdHMgdG8gdHJ1c3R6b25lIHdlIGhhdmUK Pj4+IHNlZW4gb24gUXVhbGNvbW0sIGJ1dCBmb3IgTVRLLCBpdCBzZWVtcyBmaW5lLiB3aGVuIHlv dSBkbyB0bGJpIG9uIGEgcGFydCBvZiBQVEVzCj4+PiB3aXRoIGRyb3BwZWQgQ09OVCBidXQgc3Rp bGwgc29tZSBvdGhlciBQVEVzIGhhdmUgQ09OVCwgd2UgbWFrZSBoYXJkd2FyZSB0b3RhbGx5Cj4+ PiBjb25mdXNlZC4KPj4KPj4gSSBzdXNwZWN0IHRoaXMgaXMgYmVjYXVzZSBpbiB5b3VyIGNhc2Ug eW91IGFyZSAibWlzcHJvZ3JhbW1pbmciIHRoZSBjb250cHRlCj4+IGJsb2NrOyB0aGVyZSBhcmUg KnZhbGlkKiBwdGUgZW50cmllcyB3aXRoaW4gdGhlIGJsb2NrIHRoYXQgZGlzYWdyZWUgYWJvdXQg dGhlCj4+IGNvbnRpZ3VvdXMgYml0IG9yIGFib3V0IHZhcmlvdXMgb3RoZXIgZmllbGRzLiBJbiB0 aGlzIGNhc2Ugc29tZSBIVyBUTEIgZGVzaWducwo+PiBjYW4gZG8gd2VpcmQgdGhpbmdzLiBJIHN1 c3BlY3QgaW4geW91ciBjYXNlLCB0aGF0J3MgcmVzdWx0aW5nIGluIGFjY2Vzc2luZyBiYWQKPj4g bWVtb3J5IHNwYWNlIGFuZCBjYXVzaW5nIGFuIFNFcnJvciwgd2hpY2ggaXMgdHJhcHBlZCBieSBF TDMsIGFuZCB0aGUgRlcgaXMKPj4gcHJvYmFibHkganVzdCBwYW5pY2tpbmcgYXQgdGhhdCBwb2lu dC4KPiAKPiB5b3UgYXJlIHByb2JhYmx5IHJpZ2h0LiBhcyB3ZSBtZXQgdGhlIFNFcnJvciwgd2Ug YmVjYW1lIHZlcnkgdmVyeQo+IGNhdXRpb3VzLiBzbyBhbnl0aW1lCj4gd2hlbiB3ZSBmbHVzaCB0 bGIgZm9yIGEgQ09OVFBURSwgd2Ugc3RyaWN0bHkgZG8gaXQgYnkKPiAxLiBzZXQgYWxsIDE2IHB0 ZXMgdG8gemVybwo+IDIuIGZsdXNoIHRoZSB3aG9sZSAxNiBwdGVzCgpCdXQgbXkgcG9pbnQgaXMg dGhhdCB0aGlzIHNlcXVlbmNlIGRvZXNuJ3QgZ3VhcnJhbnRlZSB0aGF0IHRoZSBUTEIgZG9lc24n dCByZWFkCnRoZSBwYWdlIHRhYmxlIGhhbGYgd2F5IHRocm91Z2ggdGhlIFNXIGNsZWFyaW5nIHRo ZSAxNiBlbnRyaWVzOyBhIFRMQiBlbnRyeSBjYW4KYmUgZWplY3RlZCBmb3Igb3RoZXIgcmVhc29u cyB0aGFuIGp1c3QgaXNzdWluZyBhIFRMQkkuIFNvIGluIHRoYXQgY2FzZSB0aGVzZSAyCmZsb3dz IGNhbiBiZSBlcXVpdmFsZW50LiBJdHMgdGhlIGZhY3QgdGhhdCB3ZSBhcmUgdW5zZXR0aW5nIHRo ZSB2YWxpZCBiaXQgd2hlbgpjbGVhcmluZyBlYWNoIHB0ZSB0aGF0IGd1YXJhbnRlZXMgdGhpcyB0 byBiZSBzYWZlLgoKPiAKPiBpbiB5b3VyIGNhc2UsIGl0IGNhbiBiZToKPiAxLiBzZXQgcHRlMCB0 byB6ZXJvCj4gMi4gZmx1c2ggcHRlMAo+IAo+IFRCSCwgaSBoYXZlIG5ldmVyIHRyaWVkIHRoaXMu IGJ1dCBpdCBtaWdodCBiZSBzYWZlIGFjY29yZGluZyB0byB5b3VyCj4gZGVzY3JpcHRpb24uCj4g Cj4+Cj4+Pgo+Pj4gemFwX3B0ZV9yYW5nZSgpIGhhcyBhIGZvcmNlX2ZsdXNoIHdoZW4gdGxiYmF0 Y2ggaXMgZnVsbDoKPj4+Cj4+PiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodW5saWtlbHko X190bGJfcmVtb3ZlX3BhZ2UodGxiLCBwYWdlLCBkZWxheV9ybWFwKSkpIHsKPj4+ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZm9yY2VfZmx1c2ggPSAxOwo+Pj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBhZGRyICs9IFBBR0VfU0laRTsKPj4+ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgYnJlYWs7Cj4+PiAgICAgICAgICAgICAgICAgICAgICAgICB9Cj4+ Pgo+Pj4gdGhpcyBtZWFucyB5b3UgY2FuIGV4cG9zZSBwYXJ0aWFsIHRsYmkvZmx1c2ggZGlyZWN0 bHkgdG8gaGFyZHdhcmUgd2hpbGUgc29tZQo+Pj4gb3RoZXIgUFRFcyBhcmUgc3RpbGwgQ09OVC4K Pj4KPj4gWWVzLCBidXQgdGhhdCdzIGFsc28gcG9zc2libGUgZXZlbiBpZiB3ZSBoYXZlIGEgdGln aHQgbG9vcCB0aGF0IGNsZWFycyBkb3duIHRoZQo+PiBjb250cHRlIGJsb2NrOyB0aGVyZSBjb3Vs ZCBzdGlsbCBiZSBhbm90aGVyIGNvcmUgdGhhdCBpc3N1ZXMgYSB0bGJpIHdoaWxlIHlvdSdyZQo+ PiBoYWxmd2F5IHRocm91Z2ggdGhhdCBsb29wLCBvciB0aGUgSFcgY291bGQgaGFwcGVuIHRvIGV2 aWN0IGR1ZSB0byBUTEIgcHJlc3N1cmUKPj4gYXQgYW55IHRpbWUuIFRoZSBwb2ludCBpcywgaXQn cyBzYWZlIGlmIHlvdSBhcmUgY2xlYXJpbmcgdGhlIHB0ZSB0byBhbiAqaW52YWxpZCoKPj4gZW50 cnkuCj4+Cj4+Pgo+Pj4gb24gdGhlIG90aGVyIGhhbmQsIGNvbnRwdGVfcHRlcF9nZXRfYW5kX2Ns ZWFyX2Z1bGwoKSBkb2Vzbid0IG5lZWQgdG8gZGVwZW5kCj4+PiBvbiBmdWxsbW0sIGFzIGxvbmcg YXMgemFwIHJhbmdlIGNvdmVycyBhIGxhcmdlIGZvbGlvLCB3ZSBjYW4gZmx1c2ggdGxiaSBmb3IK Pj4+IHRob3NlIENPTlRQVEVzIGFsbCB0b2dldGhlciBpbiB5b3VyIGNvbnRwdGVfcHRlcF9nZXRf YW5kX2NsZWFyX2Z1bGwoKSByYXRoZXIKPj4+IHRoYW4gY2xlYXJpbmcgb25lIFBURS4KPj4+Cj4+ PiBPdXIgYXBwcm9hY2ggaW4gWzFdIGlzIHdlIGRvIGEgZmx1c2ggZm9yIGFsbCBDT05UUFRFcyBh bmQgZ28gZGlyZWN0bHkgdG8gdGhlIGVuZAo+Pj4gb2YgdGhlIGxhcmdlIGZvbGlvOgo+Pj4KPj4+ ICNpZmRlZiBDT05GSUdfQ09OVF9QVEVfSFVHRVBBR0UKPj4+ICAgICAgICAgICAgICAgICAgICAg ICBpZiAocHRlX2NvbnQocHRlbnQpKSB7Cj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICB1bnNpZ25lZCBsb25nIG5leHQgPSBwdGVfY29udF9hZGRyX2VuZChhZGRyLCBlbmQpOwo+Pj4K Pj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmIChuZXh0IC0gYWRkciAhPSBIUEFH RV9DT05UX1BURV9TSVpFKSB7Cj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIF9fc3BsaXRfaHVnZV9jb250X3B0ZSh2bWEsIHB0ZSwgYWRkciwgZmFsc2UsIE5VTEwsIHB0 bCk7Cj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qCj4+PiAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqIEFmdGVyIHNwbGl0dGluZyBjb250 LXB0ZQo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB3ZSBuZWVk IHRvIHByb2Nlc3MgcHRlIGFnYWluLgo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKi8KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ290 byBhZ2Fpbl9wdGU7Cj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9IGVsc2Ugewo+ Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb250X3B0ZV9odWdlX3B0 ZXBfZ2V0X2FuZF9jbGVhcihtbSwgYWRkciwgcHRlKTsKPj4+Cj4+PiAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIHRsYl9yZW1vdmVfY29udF9wdGVfdGxiX2VudHJ5KHRsYiwg cHRlLCBhZGRyKTsKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYg KHVubGlrZWx5KCFwYWdlKSkKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBjb250aW51ZTsKPj4+Cj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIGlmIChpc19odWdlX3plcm9fcGFnZShwYWdlKSkgewo+Pj4gICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRsYl9yZW1vdmVfcGFnZV9zaXplKHRs YiwgcGFnZSwgSFBBR0VfQ09OVF9QVEVfU0laRSk7Cj4+PiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgZ290byBjb250X25leHQ7Cj4+PiAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIH0KPj4+Cj4+PiAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIHJzc1ttbV9jb3VudGVyKHBhZ2UpXSAtPSBIUEFHRV9DT05UX1BURV9O UjsKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcGFnZV9yZW1vdmVf cm1hcChwYWdlLCB0cnVlKTsKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgaWYgKHVubGlrZWx5KHBhZ2VfbWFwY291bnQocGFnZSkgPCAwKSkKPj4+ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcmludF9iYWRfcHRlKHZtYSwgYWRk ciwgcHRlbnQsIHBhZ2UpOwo+Pj4KPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgdGxiX3JlbW92ZV9wYWdlX3NpemUodGxiLCBwYWdlLCBIUEFHRV9DT05UX1BURV9TSVpF KTsKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0KPj4+IGNvbnRfbmV4dDoKPj4+ ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qICJkbyB3aGlsZSgpIiB3aWxsIGRvICJw dGUrKyIgYW5kICJhZGRyICsgUEFHRV9TSVpFIiAqLwo+Pj4gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgcHRlICs9IChuZXh0IC0gUEFHRV9TSVpFIC0gKGFkZHIgJiBQQUdFX01BU0spKS9Q QUdFX1NJWkU7Cj4+PiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhZGRyID0gbmV4dCAt IFBBR0VfU0laRTsKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwo+ Pj4gICAgICAgICAgICAgICAgICAgICAgIH0KPj4+ICNlbmRpZgo+Pj4KPj4+IHRoaXMgaXMgb3Vy ICJmdWxsIiBjb3VudGVycGFydCwgd2hpY2ggY2xlYXJfZmx1c2ggQ09OVF9QVEVTIHBhZ2VzIGRp cmVjdGx5LCBhbmQKPj4+IGl0IG5ldmVyIHJlcXVpcmVzIHRsYi0+ZnVsbG1tIGF0IGFsbC4KPj4K Pj4gWWVzLCBidXQgeW91IGFyZSBiZW5lZml0dGluZyBmcm9tIHRoZSBmYWN0IHRoYXQgY29udHB0 ZSBpcyBleHBvc2VkIHRvIGNvcmUtbW0KPj4gYW5kIGl0IGlzIHNwZWNpYWwtY2FzaW5nIHRoZW0g YXQgdGhpcyBsZXZlbC4gSSdtIHRyeWluZyB0byBhdm9pZCB0aGF0Lgo+IAo+IEkgYW0gdGhpbmtp bmcgd2UgY2FuIGV2ZW4gZG8gdGhpcyB3aGlsZSB3ZSBkb24ndCBleHBvc2UgQ09OVFBURS4KPiBp ZiB6YXBfcHRlX3JhbmdlIG1lZXRzIGEgbGFyZ2UgZm9saW8gYW5kIHRoZSB6YXBfcmFuZ2UgY292 ZXJzIHRoZSB3aG9sZQo+IGZvbGlvLCB3ZSBjYW4gZmx1c2ggYWxsIHB0ZXMgaW4gdGhpcyBmb2xp byBhbmQganVtcCB0byB0aGUgZW5kIG9mIHRoaXMgZm9saW8/Cj4gaSBtZWFuCj4gCj4gaWYgKGZv bGlvIGhlYWQgJiYgcmFuZ2VfZW5kID4gZm9saW9fZW5kKSB7Cj4gICAgICAgICAgbnIgPSBmb2xp b19ucl9wYWdlKGZvbGlvKTsKPiAgICAgICAgICBmdWxsX2ZsdXNoX25yX3B0ZXMoKQo+ICAgICAg ICAgIHB0ZSArPSBuciAtMTsKPiAgICAgICAgICBhZGRyICs9IChuciAtIDEpICogYmFzZXBhZ2Ug c2l6ZQo+IH0KCkp1c3QgYmVjYXVzZSB5b3UgZm91bmQgYSBwdGUgdGhhdCBtYXBzIGEgcGFnZSBm cm9tIGEgbGFyZ2UgZm9saW8sIHRoYXQgZG9lc24ndAptZWFuIHRoYXQgYWxsIHBhZ2VzIGZyb20g dGhlIGZvbGlvIGFyZSBtYXBwZWQsIGFuZCBpdCBkb2Vzbid0IG1lYW4gdGhleSBhcmUKbWFwcGVk IGNvbnRpZ3VvdXNseS4gV2UgaGF2ZSB0byBkZWFsIHdpdGggcGFydGlhbCBtdW5tYXAoKSwgcGFy dGlhbCBtcmVtYXAoKQpldGMuIFdlIGNvdWxkIHNwbGl0IGluIHRoZXNlIGNhc2VzIChhbmQgaW4g ZnV0dXJlIGl0IG1pZ2h0IGJlIHNlbnNpYmxlIHRvIHRyeSksCmJ1dCB0aGF0IGNhbiBmYWlsIChk dWUgdG8gR1VQKS4gU28gd2Ugc3RpbGwgaGF2ZSB0byBoYW5kbGUgdGhlIGNvcm5lciBjYXNlLgoK QnV0IEkgY2FuIGltYWdpbmUgZG9pbmcgYSBiYXRjaGVkIHZlcnNpb24gb2YgcHRlcF9nZXRfYW5k X2NsZWFyKCksIGxpa2UgSSBkaWQKZm9yIHB0ZXBfc2V0X3dycHJvdGVjdHMoKS4gQW5kIEkgdGhp bmsgdGhpcyB3b3VsZCBiZSBhbiBpbXByb3ZlbWVudC4KClRoZSByZWFzb24gSSBoYXZlbid0IGRv bmUgdGhhdCBzbyBmYXIsIGlzIGJlY2F1c2UgcHRlcF9nZXRfYW5kX2NsZWFyKCkgcmV0dXJucwp0 aGUgcHRlIHZhbHVlIHdoZW4gaXQgd2FzIGNsZWFyZWQgYW5kIHRoYXQncyBoYXJkIHRvIGRvIGlm IGJhdGNoaW5nIGR1ZSB0byB0aGUKc3RvcmFnZSByZXF1aXJlbWVudC4gQnV0IHBlcmhhcHMgeW91 IGNvdWxkIGp1c3QgcmV0dXJuIHRoZSBsb2dpY2FsIE9SIG9mIHRoZQpkaXJ0eSBhbmQgeW91bmcg Yml0cyBhY3Jvc3MgYWxsIHB0ZXMgaW4gdGhlIGJhdGNoLiBUaGUgY2FsbGVyIHNob3VsZCBiZSBh YmxlIHRvCnJlY29uc3RpdHV0ZSB0aGUgcmVzdCBpZiBpdCBuZWVkcyBpdD8KCldoYXQgZG8geW91 IHRoaW5rPwoKPiAKPiB6YXBfcHRlX3JhbmdlIGlzIHRoZSBtb3N0IGZyZXF1ZW50IGJlaGF2aW91 ciBmcm9tIHVzZXJzcGFjZSBsaWJjIGhlYXAKPiBhcyBpIGV4cGxhaW5lZAo+IGJlZm9yZS4gbGli YyBjYW4gY2FsbCBtYWR2aXNlKERPTlRORUVEKSB0aGUgbW9zdCBvZnRlbi4gSXQgaXMgY3J1Y2lh bAo+IHRvIHBlcmZvcm1hbmNlLgo+IAo+IGFuZCB0aGlzIHdheSBjYW4gYWxzbyBoZWxwIGRyb3Ag eW91ciBmdWxsIHZlcnNpb24gYnkgbW92aW5nIHRvIGZ1bGwKPiBmbHVzaGluZyB0aGUgd2hvbGUK PiBsYXJnZSBmb2xpb3M/IGFuZCB3ZSBkb24ndCBuZWVkIHRvIGRlcGVuZCBvbiBmdWxsbW0gYW55 IG1vcmU/Cj4gCj4+Cj4+IEkgZG9uJ3QgdGhpbmsgdGhlcmUgaXMgYW55IGNvcnJlY3RuZXNzIGlz c3VlIGhlcmUuIEJ1dCB0aGVyZSBpcyBhIHByb2JsZW0gd2l0aAo+PiBmcmFnaWxpdHksIGFzIHJh aXNlZCBieSBBbGlzdGFpci4gSSBoYXZlIHNvbWUgaWRlYXMgb24gcG90ZW50aWFsbHkgaG93IHRv IHNvbHZlCj4+IHRoYXQuIEknbSBnb2luZyB0byB0cnkgdG8gd29yayBvbiBpdCB0aGlzIGFmdGVy bm9vbiBhbmQgd2lsbCBwb3N0IGlmIEkgZ2V0IHNvbWUKPj4gY29uZmlkZW5jZSB0aGF0IGl0IGlz IGEgcmVhbCBzb2x1dGlvbi4KPj4KPj4gVGhhbmtzLAo+PiBSeWFuCj4+Cj4+Pgo+Pj4gc3RhdGlj IGlubGluZSBwdGVfdCBfX2NvbnRfcHRlX2h1Z2VfcHRlcF9nZXRfYW5kX2NsZWFyX2ZsdXNoKHN0 cnVjdCBtbV9zdHJ1Y3QgKm1tLAo+Pj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIHVuc2lnbmVkIGxvbmcgYWRkciwKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBwdGVfdCAqcHRlcCwKPj4+ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBib29sIGZsdXNoKQo+Pj4gewo+Pj4gICAgICAgcHRlX3Qgb3JpZ19wdGUgPSBwdGVwX2dl dChwdGVwKTsKPj4+Cj4+PiAgICAgICBDSFBfQlVHX09OKCFwdGVfY29udChvcmlnX3B0ZSkpOwo+ Pj4gICAgICAgQ0hQX0JVR19PTighSVNfQUxJR05FRChhZGRyLCBIUEFHRV9DT05UX1BURV9TSVpF KSk7Cj4+PiAgICAgICBDSFBfQlVHX09OKCFJU19BTElHTkVEKHB0ZV9wZm4ob3JpZ19wdGUpLCBI UEFHRV9DT05UX1BURV9OUikpOwo+Pj4KPj4+ICAgICAgIHJldHVybiBnZXRfY2xlYXJfZmx1c2go bW0sIGFkZHIsIHB0ZXAsIFBBR0VfU0laRSwgQ09OVF9QVEVTLCBmbHVzaCk7Cj4+PiB9Cj4+Pgo+ Pj4gWzFdIGh0dHBzOi8vZ2l0aHViLmNvbS9PbmVQbHVzT1NTL2FuZHJvaWRfa2VybmVsX29uZXBs dXNfc204NTUwL2Jsb2Ivb25lcGx1cy9zbTg1NTBfdV8xNC4wLjBfb25lcGx1czExL21tL21lbW9y eS5jI0wxNTM5Cj4+Pgo+Pj4+ICsgICAgICovCj4+Pj4gKwo+Pj4+ICsgICAgcmV0dXJuIF9fcHRl cF9nZXRfYW5kX2NsZWFyKG1tLCBhZGRyLCBwdGVwKTsKPj4+PiArfQo+Pj4+ICtFWFBPUlRfU1lN Qk9MKGNvbnRwdGVfcHRlcF9nZXRfYW5kX2NsZWFyX2Z1bGwpOwo+Pj4+ICsKPj4+Cj4gCj4gVGhh bmtzCj4gQmFycnkKPiAKPj4KCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVs QGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9s aXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==