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 AD2F5C54E58 for ; Mon, 18 Mar 2024 22:36:11 +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:Cc:To:Subject:Message-ID:Date:From: In-Reply-To:References:MIME-Version:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=HL6CYYTXPttEvhXItAPnxOsbk8xj7s0XsmsCH3YNPO8=; b=T6EPPTnMIYYCjM 6+pT473kRWLH5Z/vgD5nTbsYASFIoHrUO6lQvGquzF67j6wgIp6FkiXCHxV20Mil7GHOdAEkMzdst 78MzHPEbuR7P4oL3ol961ZLy8q5xyHvNp1wS7bQSMlZ+sY1BikKJymZGqV/vR3qnQVXSEsUFJAnAK qKx09sUsi6ii3oY45uH6NcCiQseQlm5SxitQyigccuRc/IiHtF8Asy4p79B9tTmPmO4Mhsa+BFWBS 0qz9sjNSVy39pTw86wgngbbn1z2kM73yLlhiokyU8UPsS1fyBJrnJGlPZhybOyjYoS7e1spd9jcGV E/bqL879ESTryRX3TrTA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1rmLaH-0000000AOLY-2Ves; Mon, 18 Mar 2024 22:35:57 +0000 Received: from mail-vs1-xe2c.google.com ([2607:f8b0:4864:20::e2c]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1rmLaE-0000000AOKU-26he for linux-arm-kernel@lists.infradead.org; Mon, 18 Mar 2024 22:35:55 +0000 Received: by mail-vs1-xe2c.google.com with SMTP id ada2fe7eead31-4768156d947so496856137.3 for ; Mon, 18 Mar 2024 15:35:52 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1710801352; x=1711406152; darn=lists.infradead.org; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:from:to:cc:subject:date :message-id:reply-to; bh=kc3DhF9+ScmocSNbzNV6tif7jI3+A9+U0NWPTcBs5Hg=; b=cgICctO0EHT2pKJ5qn0V1OkRCatCHLUzgiWBL4TRXXP/m2rUW39DfPOgvGJ6CDVYNW efcWiicwk78AdytWbAc+hiFwVpuowDdXIooHmC1oTTTZnsQGVx9gKKEy3mF6qcVs94Bf tvZ7x2weT/PjXKXuI4FQoAL0wBLYh3jYGDJx5HASaU3tXXuGmCBFGeUWsgw6u/shCheK PQK8tfJvg2PVaV/+qlv+slTtqDQ8oozy2/JXh8sMFg4LElTxS36+EmHsF5ISTMPI27IU gwp0KICCvv/rZ2t/LlrZrPVLtm1wgW5DEbQgVb2dGdxtBoKOlTsButBq1HgPqS2omTXZ hZ9A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1710801352; x=1711406152; h=content-transfer-encoding:cc:to:subject:message-id:date:from :in-reply-to:references:mime-version:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kc3DhF9+ScmocSNbzNV6tif7jI3+A9+U0NWPTcBs5Hg=; b=ht7DWSm+gL7bK6Jbp7HCy+xVe+w9hIg8L9B2mam9uT3avhoC6J4JYizh2BEYWamZx9 t5M2Osi6e2/vTq2eFqUSwCz9Pd0tZ6ghL5o384n7OVU4MXnphGy1yd9ckwE0y9/kmN1T T7UNqT0LH8ytKuw9AZBdKm60+vRRwaEjVXYs0m/u09IgLLSgE9MSDcJIVB/Vu/Y9jS+h wDVP0aWcK117lQLA0rgE1wi1SFw+op85EHfAOgb/ZkQmkkK8I0yWZg4TG9dV1Jv+dExN e6VC+emvzugQ+u1Ph1SJvXEvdKMIZ7PfRoVk+lMipIPkCvzPMidHIvD9CuZNswgEtJFe qfbQ== X-Forwarded-Encrypted: i=1; AJvYcCUA1Kx9Lhxt0ZvhLzCtX2x2ETkeIBUmT40Rk6gQToMeHmucknuyszFEqPVH3xSSQ3j1a3RWFOrA8rQm6AQC5Xp5crXInHCJ5TNbT6D3xWfu+OTJpxI= X-Gm-Message-State: AOJu0YxRsoDHDqLWp3o1bXKzW757mwyZwozX6tjrZ5FTblYTVglQopZC g+gbQrSBOXGHXBvX5K7sQQWscmD6vNjqIZ974M2+bx+ogNBt0fB8G66ZNchPNIoYcjLor7jYWel JjdVtbaK9gkzOzk/H7mQbIKn2k+o= X-Google-Smtp-Source: AGHT+IFAb1WYZJ7j/iOgjuuvdm/Qa1J6hKrNxdrY+P4V22z4ep46iaE22aIXCXtFVdYOVH6opUYp7MrZ5q1ymht/INU= X-Received: by 2002:a67:fd0c:0:b0:472:a8e0:49fe with SMTP id f12-20020a67fd0c000000b00472a8e049femr495077vsr.35.1710801351690; Mon, 18 Mar 2024 15:35:51 -0700 (PDT) MIME-Version: 1.0 References: <20240304081348.197341-1-21cnbao@gmail.com> <20240304081348.197341-5-21cnbao@gmail.com> In-Reply-To: From: Barry Song <21cnbao@gmail.com> Date: Tue, 19 Mar 2024 11:35:40 +1300 Message-ID: Subject: Re: [RFC PATCH v3 4/5] mm: swap: introduce swapcache_prepare_nr and swapcache_clear_nr for large folios swap-in To: Ryan Roberts Cc: akpm@linux-foundation.org, linux-mm@kvack.org, chengming.zhou@linux.dev, chrisl@kernel.org, david@redhat.com, hannes@cmpxchg.org, kasong@tencent.com, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, mhocko@suse.com, nphamcs@gmail.com, shy828301@gmail.com, steven.price@arm.com, surenb@google.com, wangkefeng.wang@huawei.com, willy@infradead.org, xiang@kernel.org, ying.huang@intel.com, yosryahmed@google.com, yuzhao@google.com, Barry Song , Hugh Dickins , Minchan Kim , SeongJae Park X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240318_153554_582139_E6041EF8 X-CRM114-Status: GOOD ( 37.06 ) 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 T24gV2VkLCBNYXIgMTMsIDIwMjQgYXQgNDozNeKAr0FNIFJ5YW4gUm9iZXJ0cyA8cnlhbi5yb2Jl cnRzQGFybS5jb20+IHdyb3RlOgo+Cj4gT24gMDQvMDMvMjAyNCAwODoxMywgQmFycnkgU29uZyB3 cm90ZToKPiA+IEZyb206IEJhcnJ5IFNvbmcgPHYtc29uZ2Jhb2h1YUBvcHBvLmNvbT4KPiA+Cj4g PiBDb21taXQgMTNkZGFmMjZiZTMyICgibW0vc3dhcDogZml4IHJhY2Ugd2hlbiBza2lwcGluZyBz d2FwY2FjaGUiKSBzdXBwb3J0cwo+ID4gb25lIGVudHJ5IG9ubHksIHRvIHN1cHBvcnQgbGFyZ2Ug Zm9saW8gc3dhcC1pbiwgd2UgbmVlZCB0byBoYW5kbGUgbXVsdGlwbGUKPiA+IHN3YXAgZW50cmll cy4KPiA+Cj4gPiBDYzogS2FpcnVpIFNvbmcgPGthc29uZ0B0ZW5jZW50LmNvbT4KPiA+IENjOiAi SHVhbmcsIFlpbmciIDx5aW5nLmh1YW5nQGludGVsLmNvbT4KPiA+IENjOiBEYXZpZCBIaWxkZW5i cmFuZCA8ZGF2aWRAcmVkaGF0LmNvbT4KPiA+IENjOiBDaHJpcyBMaSA8Y2hyaXNsQGtlcm5lbC5v cmc+Cj4gPiBDYzogSHVnaCBEaWNraW5zIDxodWdoZEBnb29nbGUuY29tPgo+ID4gQ2M6IEpvaGFu bmVzIFdlaW5lciA8aGFubmVzQGNtcHhjaGcub3JnPgo+ID4gQ2M6IE1hdHRoZXcgV2lsY294IChP cmFjbGUpIDx3aWxseUBpbmZyYWRlYWQub3JnPgo+ID4gQ2M6IE1pY2hhbCBIb2NrbyA8bWhvY2tv QHN1c2UuY29tPgo+ID4gQ2M6IE1pbmNoYW4gS2ltIDxtaW5jaGFuQGtlcm5lbC5vcmc+Cj4gPiBD YzogWW9zcnkgQWhtZWQgPHlvc3J5YWhtZWRAZ29vZ2xlLmNvbT4KPiA+IENjOiBZdSBaaGFvIDx5 dXpoYW9AZ29vZ2xlLmNvbT4KPiA+IENjOiBTZW9uZ0phZSBQYXJrIDxzakBrZXJuZWwub3JnPgo+ ID4gU2lnbmVkLW9mZi1ieTogQmFycnkgU29uZyA8di1zb25nYmFvaHVhQG9wcG8uY29tPgo+ID4g LS0tCj4gPiAgaW5jbHVkZS9saW51eC9zd2FwLmggfCAgIDEgKwo+ID4gIG1tL3N3YXAuaCAgICAg ICAgICAgIHwgICAxICsKPiA+ICBtbS9zd2FwZmlsZS5jICAgICAgICB8IDExOCArKysrKysrKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0tCj4gPiAgMyBmaWxlcyBjaGFuZ2VkLCA3 NCBpbnNlcnRpb25zKCspLCA0NiBkZWxldGlvbnMoLSkKPiA+Cj4gPiBkaWZmIC0tZ2l0IGEvaW5j bHVkZS9saW51eC9zd2FwLmggYi9pbmNsdWRlL2xpbnV4L3N3YXAuaAo+ID4gaW5kZXggZDZhYjI3 OTI5NDU4Li4yMjEwNWYwZmUyZDQgMTAwNjQ0Cj4gPiAtLS0gYS9pbmNsdWRlL2xpbnV4L3N3YXAu aAo+ID4gKysrIGIvaW5jbHVkZS9saW51eC9zd2FwLmgKPiA+IEBAIC00ODAsNiArNDgwLDcgQEAg ZXh0ZXJuIGludCBhZGRfc3dhcF9jb3VudF9jb250aW51YXRpb24oc3dwX2VudHJ5X3QsIGdmcF90 KTsKPiA+ICBleHRlcm4gdm9pZCBzd2FwX3NobWVtX2FsbG9jKHN3cF9lbnRyeV90KTsKPiA+ICBl eHRlcm4gaW50IHN3YXBfZHVwbGljYXRlKHN3cF9lbnRyeV90KTsKPiA+ICBleHRlcm4gaW50IHN3 YXBjYWNoZV9wcmVwYXJlKHN3cF9lbnRyeV90KTsKPiA+ICtleHRlcm4gaW50IHN3YXBjYWNoZV9w cmVwYXJlX25yKHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpOwo+ID4gIGV4dGVybiB2b2lkIHN3 YXBfZnJlZShzd3BfZW50cnlfdCk7Cj4gPiAgZXh0ZXJuIHZvaWQgc3dhcF9ucl9mcmVlKHN3cF9l bnRyeV90IGVudHJ5LCBpbnQgbnJfcGFnZXMpOwo+ID4gIGV4dGVybiB2b2lkIHN3YXBjYWNoZV9m cmVlX2VudHJpZXMoc3dwX2VudHJ5X3QgKmVudHJpZXMsIGludCBuKTsKPiA+IGRpZmYgLS1naXQg YS9tbS9zd2FwLmggYi9tbS9zd2FwLmgKPiA+IGluZGV4IGZjMmY2YWRlN2Y4MC4uMWNlYzk5MWVm Y2RhIDEwMDY0NAo+ID4gLS0tIGEvbW0vc3dhcC5oCj4gPiArKysgYi9tbS9zd2FwLmgKPiA+IEBA IC00Miw2ICs0Miw3IEBAIHZvaWQgZGVsZXRlX2Zyb21fc3dhcF9jYWNoZShzdHJ1Y3QgZm9saW8g KmZvbGlvKTsKPiA+ICB2b2lkIGNsZWFyX3NoYWRvd19mcm9tX3N3YXBfY2FjaGUoaW50IHR5cGUs IHVuc2lnbmVkIGxvbmcgYmVnaW4sCj4gPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IHVuc2lnbmVkIGxvbmcgZW5kKTsKPiA+ICB2b2lkIHN3YXBjYWNoZV9jbGVhcihzdHJ1Y3Qgc3dh cF9pbmZvX3N0cnVjdCAqc2ksIHN3cF9lbnRyeV90IGVudHJ5KTsKPiA+ICt2b2lkIHN3YXBjYWNo ZV9jbGVhcl9ucihzdHJ1Y3Qgc3dhcF9pbmZvX3N0cnVjdCAqc2ksIHN3cF9lbnRyeV90IGVudHJ5 LCBpbnQgbnIpOwo+ID4gIHN0cnVjdCBmb2xpbyAqc3dhcF9jYWNoZV9nZXRfZm9saW8oc3dwX2Vu dHJ5X3QgZW50cnksCj4gPiAgICAgICAgICAgICAgIHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1h LCB1bnNpZ25lZCBsb25nIGFkZHIpOwo+ID4gIHN0cnVjdCBmb2xpbyAqZmlsZW1hcF9nZXRfaW5j b3JlX2ZvbGlvKHN0cnVjdCBhZGRyZXNzX3NwYWNlICptYXBwaW5nLAo+ID4gZGlmZiAtLWdpdCBh L21tL3N3YXBmaWxlLmMgYi9tbS9zd2FwZmlsZS5jCj4gPiBpbmRleCAyNDQxMDY5OThhNjkuLmJh ZTFiODE2NWIxMSAxMDA2NDQKPiA+IC0tLSBhL21tL3N3YXBmaWxlLmMKPiA+ICsrKyBiL21tL3N3 YXBmaWxlLmMKPiA+IEBAIC0zMzA5LDcgKzMzMDksNyBAQCB2b2lkIHNpX3N3YXBpbmZvKHN0cnVj dCBzeXNpbmZvICp2YWwpCj4gPiAgfQo+ID4KPiA+ICAvKgo+ID4gLSAqIFZlcmlmeSB0aGF0IGEg c3dhcCBlbnRyeSBpcyB2YWxpZCBhbmQgaW5jcmVtZW50IGl0cyBzd2FwIG1hcCBjb3VudC4KPiA+ ICsgKiBWZXJpZnkgdGhhdCBuciBzd2FwIGVudHJpZXMgYXJlIHZhbGlkIGFuZCBpbmNyZW1lbnQg dGhlaXIgc3dhcCBtYXAgY291bnQuCj4gPiAgICoKPiA+ICAgKiBSZXR1cm5zIGVycm9yIGNvZGUg aW4gZm9sbG93aW5nIGNhc2UuCj4gPiAgICogLSBzdWNjZXNzIC0+IDAKPiA+IEBAIC0zMzE5LDY2 ICszMzE5LDc2IEBAIHZvaWQgc2lfc3dhcGluZm8oc3RydWN0IHN5c2luZm8gKnZhbCkKPiA+ICAg KiAtIHN3YXAtY2FjaGUgcmVmZXJlbmNlIGlzIHJlcXVlc3RlZCBidXQgdGhlIGVudHJ5IGlzIG5v dCB1c2VkLiAtPiBFTk9FTlQKPiA+ICAgKiAtIHN3YXAtbWFwcGVkIHJlZmVyZW5jZSByZXF1ZXN0 ZWQgYnV0IG5lZWRzIGNvbnRpbnVlZCBzd2FwIGNvdW50LiAtPiBFTk9NRU0KPiA+ICAgKi8KPiA+ IC1zdGF0aWMgaW50IF9fc3dhcF9kdXBsaWNhdGUoc3dwX2VudHJ5X3QgZW50cnksIHVuc2lnbmVk IGNoYXIgdXNhZ2UpCj4gPiArc3RhdGljIGludCBfX3N3YXBfZHVwbGljYXRlX25yKHN3cF9lbnRy eV90IGVudHJ5LCBpbnQgbnIsIHVuc2lnbmVkIGNoYXIgdXNhZ2UpCj4KPiBwZXJoYXBzIGl0cyBi ZXR0ZXIgdG8gcGFzcyBvcmRlciBpbnN0ZWFkIG9mIG5yIHRvIGFsbCB0aGVzZSBmdW5jdGlvbnMg dG8gbWFrZSBpdAo+IGNsZWFyZXIgdGhhdCBlbnRyeSBzaG91bGQgYmUgbmF0dXJhbGx5IGFsaWdu ZWQgYW5kIGJlIGEgcG93ZXItb2YtMiBudW1iZXIgb2YKPiBwYWdlcywgbm8gYmlnZ2VyIHRoYW4g U1dBUEZJTEVfQ0xVU1RFUj8KPgo+ID4gIHsKPiA+ICAgICAgIHN0cnVjdCBzd2FwX2luZm9fc3Ry dWN0ICpwOwo+ID4gICAgICAgc3RydWN0IHN3YXBfY2x1c3Rlcl9pbmZvICpjaTsKPiA+ICAgICAg IHVuc2lnbmVkIGxvbmcgb2Zmc2V0Owo+ID4gLSAgICAgdW5zaWduZWQgY2hhciBjb3VudDsKPiA+ IC0gICAgIHVuc2lnbmVkIGNoYXIgaGFzX2NhY2hlOwo+ID4gLSAgICAgaW50IGVycjsKPiA+ICsg ICAgIHVuc2lnbmVkIGNoYXIgY291bnRbU1dBUEZJTEVfQ0xVU1RFUl07Cj4gPiArICAgICB1bnNp Z25lZCBjaGFyIGhhc19jYWNoZVtTV0FQRklMRV9DTFVTVEVSXTsKPgo+IEknbSBub3Qgc3VyZSB0 aGlzIDFLIHN0YWNrIGJ1ZmZlciBpcyBhIGdvb2QgaWRlYT8KPgo+IENvdWxkIHlvdSBzcGxpdCBp dCBzbGlnaHRseSBkaWZmZXJlbnRseSBzbyB0aGF0IGxvb3AgMSBqdXN0IGRvZXMgZXJyb3IgY2hl Y2tpbmcKPiBhbmQgYmFpbHMgb3V0IGlmIGFuIGVycm9yIGlzIGZvdW5kLCBhbmQgbG9vcCAyIGRv ZXMgdGhlIG5ldyB2YWx1ZSBjYWxjdWxhdGlvbgo+IGFuZCB3cml0ZWJhY2s/IFRoZW4geW91IGRv bid0IG5lZWQgdGhlc2UgYXJyYXlzLgoKcmlnaHQuIHdlIGNhbiB0b3RhbGx5IHJlbW92ZSB0aG9l IGFycmF5cyBieSByZS1yZWFkaW5nIHN3YXBfbWFwLgoKPgo+ID4gKyAgICAgaW50IGVyciwgaTsK PiA+Cj4gPiAgICAgICBwID0gc3dwX3N3YXBfaW5mbyhlbnRyeSk7Cj4gPgo+ID4gICAgICAgb2Zm c2V0ID0gc3dwX29mZnNldChlbnRyeSk7Cj4gPiAgICAgICBjaSA9IGxvY2tfY2x1c3Rlcl9vcl9z d2FwX2luZm8ocCwgb2Zmc2V0KTsKPiA+Cj4gPiAtICAgICBjb3VudCA9IHAtPnN3YXBfbWFwW29m ZnNldF07Cj4gPiAtCj4gPiAtICAgICAvKgo+ID4gLSAgICAgICogc3dhcGluX3JlYWRhaGVhZCgp IGRvZXNuJ3QgY2hlY2sgaWYgYSBzd2FwIGVudHJ5IGlzIHZhbGlkLCBzbyB0aGUKPiA+IC0gICAg ICAqIHN3YXAgZW50cnkgY291bGQgYmUgU1dBUF9NQVBfQkFELiBDaGVjayBoZXJlIHdpdGggbG9j ayBoZWxkLgo+ID4gLSAgICAgICovCj4gPiAtICAgICBpZiAodW5saWtlbHkoc3dhcF9jb3VudChj b3VudCkgPT0gU1dBUF9NQVBfQkFEKSkgewo+ID4gLSAgICAgICAgICAgICBlcnIgPSAtRU5PRU5U Owo+ID4gLSAgICAgICAgICAgICBnb3RvIHVubG9ja19vdXQ7Cj4gPiAtICAgICB9Cj4gPiAtCj4g PiAtICAgICBoYXNfY2FjaGUgPSBjb3VudCAmIFNXQVBfSEFTX0NBQ0hFOwo+ID4gLSAgICAgY291 bnQgJj0gflNXQVBfSEFTX0NBQ0hFOwo+ID4gLSAgICAgZXJyID0gMDsKPiA+IC0KPiA+IC0gICAg IGlmICh1c2FnZSA9PSBTV0FQX0hBU19DQUNIRSkgewo+ID4gKyAgICAgZm9yIChpID0gMDsgaSA8 IG5yOyBpKyspIHsKPiA+ICsgICAgICAgICAgICAgY291bnRbaV0gPSBwLT5zd2FwX21hcFtvZmZz ZXQgKyBpXTsKPiA+Cj4gPiAtICAgICAgICAgICAgIC8qIHNldCBTV0FQX0hBU19DQUNIRSBpZiB0 aGVyZSBpcyBubyBjYWNoZSBhbmQgZW50cnkgaXMgdXNlZCAqLwo+ID4gLSAgICAgICAgICAgICBp ZiAoIWhhc19jYWNoZSAmJiBjb3VudCkKPiA+IC0gICAgICAgICAgICAgICAgICAgICBoYXNfY2Fj aGUgPSBTV0FQX0hBU19DQUNIRTsKPiA+IC0gICAgICAgICAgICAgZWxzZSBpZiAoaGFzX2NhY2hl KSAgICAgICAgICAgICAvKiBzb21lb25lIGVsc2UgYWRkZWQgY2FjaGUgKi8KPiA+IC0gICAgICAg ICAgICAgICAgICAgICBlcnIgPSAtRUVYSVNUOwo+ID4gLSAgICAgICAgICAgICBlbHNlICAgICAg ICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHVzZXJzIHJlbWFpbmluZyAqLwo+ID4gKyAgICAg ICAgICAgICAvKgo+ID4gKyAgICAgICAgICAgICAgKiBzd2FwaW5fcmVhZGFoZWFkKCkgZG9lc24n dCBjaGVjayBpZiBhIHN3YXAgZW50cnkgaXMgdmFsaWQsIHNvIHRoZQo+ID4gKyAgICAgICAgICAg ICAgKiBzd2FwIGVudHJ5IGNvdWxkIGJlIFNXQVBfTUFQX0JBRC4gQ2hlY2sgaGVyZSB3aXRoIGxv Y2sgaGVsZC4KPiA+ICsgICAgICAgICAgICAgICovCj4gPiArICAgICAgICAgICAgIGlmICh1bmxp a2VseShzd2FwX2NvdW50KGNvdW50W2ldKSA9PSBTV0FQX01BUF9CQUQpKSB7Cj4gPiAgICAgICAg ICAgICAgICAgICAgICAgZXJyID0gLUVOT0VOVDsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBn b3RvIHVubG9ja19vdXQ7Cj4gPiArICAgICAgICAgICAgIH0KPiA+Cj4gPiAtICAgICB9IGVsc2Ug aWYgKGNvdW50IHx8IGhhc19jYWNoZSkgewo+ID4gLQo+ID4gLSAgICAgICAgICAgICBpZiAoKGNv dW50ICYgfkNPVU5UX0NPTlRJTlVFRCkgPCBTV0FQX01BUF9NQVgpCj4gPiAtICAgICAgICAgICAg ICAgICAgICAgY291bnQgKz0gdXNhZ2U7Cj4gPiAtICAgICAgICAgICAgIGVsc2UgaWYgKChjb3Vu dCAmIH5DT1VOVF9DT05USU5VRUQpID4gU1dBUF9NQVBfTUFYKQo+ID4gLSAgICAgICAgICAgICAg ICAgICAgIGVyciA9IC1FSU5WQUw7Cj4gPiAtICAgICAgICAgICAgIGVsc2UgaWYgKHN3YXBfY291 bnRfY29udGludWVkKHAsIG9mZnNldCwgY291bnQpKQo+ID4gLSAgICAgICAgICAgICAgICAgICAg IGNvdW50ID0gQ09VTlRfQ09OVElOVUVEOwo+ID4gLSAgICAgICAgICAgICBlbHNlCj4gPiAtICAg ICAgICAgICAgICAgICAgICAgZXJyID0gLUVOT01FTTsKPiA+IC0gICAgIH0gZWxzZQo+ID4gLSAg ICAgICAgICAgICBlcnIgPSAtRU5PRU5UOyAgICAgICAgICAgICAgICAgIC8qIHVudXNlZCBzd2Fw IGVudHJ5ICovCj4gPiArICAgICAgICAgICAgIGhhc19jYWNoZVtpXSA9IGNvdW50W2ldICYgU1dB UF9IQVNfQ0FDSEU7Cj4gPiArICAgICAgICAgICAgIGNvdW50W2ldICY9IH5TV0FQX0hBU19DQUNI RTsKPiA+ICsgICAgICAgICAgICAgZXJyID0gMDsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgaWYg KHVzYWdlID09IFNXQVBfSEFTX0NBQ0hFKSB7Cj4gPiArCj4gPiArICAgICAgICAgICAgICAgICAg ICAgLyogc2V0IFNXQVBfSEFTX0NBQ0hFIGlmIHRoZXJlIGlzIG5vIGNhY2hlIGFuZCBlbnRyeSBp cyB1c2VkICovCj4gPiArICAgICAgICAgICAgICAgICAgICAgaWYgKCFoYXNfY2FjaGVbaV0gJiYg Y291bnRbaV0pCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAgICAgICBoYXNfY2FjaGVbaV0g PSBTV0FQX0hBU19DQUNIRTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBlbHNlIGlmIChoYXNf Y2FjaGVbaV0pICAgICAgICAgIC8qIHNvbWVvbmUgZWxzZSBhZGRlZCBjYWNoZSAqLwo+ID4gKyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gLUVFWElTVDsKPiA+ICsgICAgICAgICAg ICAgICAgICAgICBlbHNlICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8qIG5vIHVzZXJzIHJl bWFpbmluZyAqLwo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZXJyID0gLUVOT0VO VDsKPiA+ICsgICAgICAgICAgICAgfSBlbHNlIGlmIChjb3VudFtpXSB8fCBoYXNfY2FjaGVbaV0p IHsKPiA+ICsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBpZiAoKGNvdW50W2ldICYgfkNPVU5U X0NPTlRJTlVFRCkgPCBTV0FQX01BUF9NQVgpCj4gPiArICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBjb3VudFtpXSArPSB1c2FnZTsKPiA+ICsgICAgICAgICAgICAgICAgICAgICBlbHNlIGlm ICgoY291bnRbaV0gJiB+Q09VTlRfQ09OVElOVUVEKSA+IFNXQVBfTUFQX01BWCkKPiA+ICsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIGVyciA9IC1FSU5WQUw7Cj4gPiArICAgICAgICAgICAg ICAgICAgICAgZWxzZSBpZiAoc3dhcF9jb3VudF9jb250aW51ZWQocCwgb2Zmc2V0ICsgaSwgY291 bnRbaV0pKQo+ID4gKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY291bnRbaV0gPSBDT1VO VF9DT05USU5VRUQ7Cj4gPiArICAgICAgICAgICAgICAgICAgICAgZWxzZQo+ID4gKyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgZXJyID0gLUVOT01FTTsKPiA+ICsgICAgICAgICAgICAgfSBl bHNlCj4gPiArICAgICAgICAgICAgICAgICAgICAgZXJyID0gLUVOT0VOVDsgICAgICAgICAgICAg ICAgICAvKiB1bnVzZWQgc3dhcCBlbnRyeSAqLwo+ID4KPiA+IC0gICAgIGlmICghZXJyKQo+ID4g LSAgICAgICAgICAgICBXUklURV9PTkNFKHAtPnN3YXBfbWFwW29mZnNldF0sIGNvdW50IHwgaGFz X2NhY2hlKTsKPiA+ICsgICAgICAgICAgICAgaWYgKGVycikKPiA+ICsgICAgICAgICAgICAgICAg ICAgICBicmVhazsKPiA+ICsgICAgIH0KPiA+Cj4gPiArICAgICBpZiAoIWVycikgewo+ID4gKyAg ICAgICAgICAgICBmb3IgKGkgPSAwOyBpIDwgbnI7IGkrKykKPiA+ICsgICAgICAgICAgICAgICAg ICAgICBXUklURV9PTkNFKHAtPnN3YXBfbWFwW29mZnNldCArIGldLCBjb3VudFtpXSB8IGhhc19j YWNoZVtpXSk7Cj4gPiArICAgICB9Cj4gPiAgdW5sb2NrX291dDoKPiA+ICAgICAgIHVubG9ja19j bHVzdGVyX29yX3N3YXBfaW5mbyhwLCBjaSk7Cj4gPiAgICAgICByZXR1cm4gZXJyOwo+ID4gIH0K PiA+Cj4gPiArc3RhdGljIGludCBfX3N3YXBfZHVwbGljYXRlKHN3cF9lbnRyeV90IGVudHJ5LCB1 bnNpZ25lZCBjaGFyIHVzYWdlKQo+ID4gK3sKPiA+ICsgICAgIHJldHVybiBfX3N3YXBfZHVwbGlj YXRlX25yKGVudHJ5LCAxLCB1c2FnZSk7Cj4gPiArfQo+ID4gKwo+ID4gIC8qCj4gPiAgICogSGVs cCBzd2Fwb2ZmIGJ5IG5vdGluZyB0aGF0IHN3YXAgZW50cnkgYmVsb25ncyB0byBzaG1lbS90bXBm cwo+ID4gICAqIChpbiB3aGljaCBjYXNlIGl0cyByZWZlcmVuY2UgY291bnQgaXMgbmV2ZXIgaW5j cmVtZW50ZWQpLgo+ID4gQEAgLTM0MTcsMTcgKzM0MjcsMzMgQEAgaW50IHN3YXBjYWNoZV9wcmVw YXJlKHN3cF9lbnRyeV90IGVudHJ5KQo+ID4gICAgICAgcmV0dXJuIF9fc3dhcF9kdXBsaWNhdGUo ZW50cnksIFNXQVBfSEFTX0NBQ0hFKTsKPiA+ICB9Cj4gPgo+ID4gLXZvaWQgc3dhcGNhY2hlX2Ns ZWFyKHN0cnVjdCBzd2FwX2luZm9fc3RydWN0ICpzaSwgc3dwX2VudHJ5X3QgZW50cnkpCj4gPiAr aW50IHN3YXBjYWNoZV9wcmVwYXJlX25yKHN3cF9lbnRyeV90IGVudHJ5LCBpbnQgbnIpCj4gPiAr ewo+ID4gKyAgICAgcmV0dXJuIF9fc3dhcF9kdXBsaWNhdGVfbnIoZW50cnksIG5yLCBTV0FQX0hB U19DQUNIRSk7Cj4gPiArfQo+ID4gKwo+ID4gK3ZvaWQgc3dhcGNhY2hlX2NsZWFyX25yKHN0cnVj dCBzd2FwX2luZm9fc3RydWN0ICpzaSwgc3dwX2VudHJ5X3QgZW50cnksIGludCBucikKPiA+ICB7 Cj4gPiAgICAgICBzdHJ1Y3Qgc3dhcF9jbHVzdGVyX2luZm8gKmNpOwo+ID4gICAgICAgdW5zaWdu ZWQgbG9uZyBvZmZzZXQgPSBzd3Bfb2Zmc2V0KGVudHJ5KTsKPiA+IC0gICAgIHVuc2lnbmVkIGNo YXIgdXNhZ2U7Cj4gPiArICAgICB1bnNpZ25lZCBjaGFyIHVzYWdlW1NXQVBGSUxFX0NMVVNURVJd Owo+ID4gKyAgICAgaW50IGk7Cj4gPgo+ID4gICAgICAgY2kgPSBsb2NrX2NsdXN0ZXJfb3Jfc3dh cF9pbmZvKHNpLCBvZmZzZXQpOwo+ID4gLSAgICAgdXNhZ2UgPSBfX3N3YXBfZW50cnlfZnJlZV9s b2NrZWQoc2ksIG9mZnNldCwgU1dBUF9IQVNfQ0FDSEUpOwo+ID4gKyAgICAgZm9yIChpID0gMDsg aSA8IG5yOyBpKyspCj4gPiArICAgICAgICAgICAgIHVzYWdlW2ldID0gX19zd2FwX2VudHJ5X2Zy ZWVfbG9ja2VkKHNpLCBvZmZzZXQgKyBpLCBTV0FQX0hBU19DQUNIRSk7Cj4gPiAgICAgICB1bmxv Y2tfY2x1c3Rlcl9vcl9zd2FwX2luZm8oc2ksIGNpKTsKPiA+IC0gICAgIGlmICghdXNhZ2UpCj4g PiAtICAgICAgICAgICAgIGZyZWVfc3dhcF9zbG90KGVudHJ5KTsKPiA+ICsgICAgIGZvciAoaSA9 IDA7IGkgPCBucjsgaSsrKSB7Cj4gPiArICAgICAgICAgICAgIGlmICghdXNhZ2VbaV0pIHsKPiA+ ICsgICAgICAgICAgICAgICAgICAgICBmcmVlX3N3YXBfc2xvdChlbnRyeSk7Cj4gPiArICAgICAg ICAgICAgICAgICAgICAgZW50cnkudmFsKys7Cj4gPiArICAgICAgICAgICAgIH0KPiA+ICsgICAg IH0KPiA+ICt9Cj4KPiBUaGlzIGlzIHByZXR0eSBzaW1pbGFyIHRvIHN3YXBfbnJfZnJlZSgpIHdo aWNoIHlvdSBhZGRlZCBpbiBwYXRjaCAyLiBFeGNlcHQKPiBzd2FwX25yX2ZyZWUoKSBwYXNzZXMg MSBhcyBsYXN0IHBhcmFtIHRvIF9fc3dhcF9lbnRyeV9mcmVlX2xvY2tlZCgpIGFuZCB0aGlzCj4g cGFzc2VzIFNXQVBfSEFTX0NBQ0hFLiBQZXJoYXBzIHRoZWlyIHNob3VsZCBiZSBhIGNvbW1vbiBo ZWxwZXI/IEkgdGhpbmsKPiBzd2FwX25yX2ZyZWUoKSdzIHVzYWdlIGJpdG1hcCBpcyBwcmVmZXJh YmxlIHRvIHRoaXMgdmVyc2lvbidzIGNoYXIgYXJyYXkgdG9vLgoKcmlnaHQuCgo+Cj4gVGhhbmtz LAo+IFJ5YW4KPgo+ID4gKwo+ID4gK3ZvaWQgc3dhcGNhY2hlX2NsZWFyKHN0cnVjdCBzd2FwX2lu Zm9fc3RydWN0ICpzaSwgc3dwX2VudHJ5X3QgZW50cnkpCj4gPiArewo+ID4gKyAgICAgc3dhcGNh Y2hlX2NsZWFyX25yKHNpLCBlbnRyeSwgMSk7Cj4gPiAgfQo+ID4KPiA+ICBzdHJ1Y3Qgc3dhcF9p bmZvX3N0cnVjdCAqc3dwX3N3YXBfaW5mbyhzd3BfZW50cnlfdCBlbnRyeSkKClRoYW5rcwpCYXJy eQoKX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX18KbGludXgt YXJtLWtlcm5lbCBtYWlsaW5nIGxpc3QKbGludXgtYXJtLWtlcm5lbEBsaXN0cy5pbmZyYWRlYWQu b3JnCmh0dHA6Ly9saXN0cy5pbmZyYWRlYWQub3JnL21haWxtYW4vbGlzdGluZm8vbGludXgtYXJt LWtlcm5lbAo=