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 vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B4F64EB64D9 for ; Wed, 5 Jul 2023 01:40:49 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S229469AbjGEBks (ORCPT ); Tue, 4 Jul 2023 21:40:48 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45872 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230448AbjGEBko (ORCPT ); Tue, 4 Jul 2023 21:40:44 -0400 Received: from mail-qt1-x82a.google.com (mail-qt1-x82a.google.com [IPv6:2607:f8b0:4864:20::82a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id EBD2410FB for ; Tue, 4 Jul 2023 18:40:39 -0700 (PDT) Received: by mail-qt1-x82a.google.com with SMTP id d75a77b69052e-401d1d967beso803371cf.0 for ; Tue, 04 Jul 2023 18:40:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1688521239; x=1691113239; 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=FFdVskwaA2s8VmI/RPC7w7nv1Uulp1bbtTeicpqhFJM=; b=fkcItRq7IjTK/v5lKc97LIP9v4MSOKBHLxElVQfEmVAlRKkUDfPLHcrZADHn72rWPd FRihodv9VPZ/qGNDg6Jhw3up6rpsBG9nufjgEAldwpaZkhTIF4l2EC+If7wiCjJX9yNc d3XUoaTadPePEyCBzCNkdfUq8b0IpNcpivY9BDVM+QQw0DjpV9FUx6vOX7wOJAMbQDCy BvE+07W2DuT7sEenIn5zRtDJk7EAKk4oSb+k817RG7xvL057FvQPNJVGv9kfs7mc4Uqq vwpIWfnt+w6HN2mbnIiVyGImDnJMfLKJZRJjYBFnAmAUJs+Hb2XspvKf5GTFSEFstlpp pm4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688521239; x=1691113239; 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=FFdVskwaA2s8VmI/RPC7w7nv1Uulp1bbtTeicpqhFJM=; b=GKyuD5PCRaPiqK4Gaz3UdxWTmNYOm9HPpyENiA/Ql5+cGm1EFiq/lfwYoRCrU8sr24 MIQzd+Ixxc4eMcZXkezGZwN/ZhyKFdygEyRK0WlVfxmJHx99Qsip+2wLTyw6L2O66HVf /rrZmatvvWC8hRRla6w4s70jS0eT7CW+EDarWbHw7NSu6W8x+GlyOMsxb9rFDdTi2Cbg rjtbmNANLSWwIMvU4HZ0uPMPhBvhFZfNWGZoA0Y+OQEudEylXDoNScErmoGdHh64Q85P wpzA6zMnSbMeSvGiTFWsbofQvhXpbhnNxMfj9qovvdV60Pmyipfzbr2h1wsB5shSEf5n Gh0A== X-Gm-Message-State: ABy/qLYELa/i0VkJM6NdXfieEL80Up3A++EZh7ddEARERTLzT1sR3nGb m0Pl+OOJJzgSQ38wqt3kFnYwJYLylHti419y9ZWyIQ== X-Google-Smtp-Source: APBJJlE3EW1xa90VgWXh65s2Sg3RlV68Y4T7PFwCSdCLBD92lbzBXTv8AduSkNV4uu5oFgeFbc09CUlsHkqmf0oFQ+M= X-Received: by 2002:a05:622a:24c:b0:403:5b16:3e8a with SMTP id c12-20020a05622a024c00b004035b163e8amr20208qtx.9.1688521238897; Tue, 04 Jul 2023 18:40:38 -0700 (PDT) MIME-Version: 1.0 References: <20230703135330.1865927-1-ryan.roberts@arm.com> <20230703135330.1865927-4-ryan.roberts@arm.com> <6d389825-1fc0-5c16-7858-2290fd632682@arm.com> In-Reply-To: From: Yu Zhao Date: Tue, 4 Jul 2023 19:40:02 -0600 Message-ID: Subject: Re: [PATCH v2 3/5] mm: Default implementation of arch_wants_pte_order() To: Ryan Roberts Cc: "Yin, Fengwei" , Andrew Morton , Matthew Wilcox , "Kirill A. Shutemov" , David Hildenbrand , Catalin Marinas , Will Deacon , Anshuman Khandual , Yang Shi , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On Tue, Jul 4, 2023 at 7:23=E2=80=AFAM Ryan Roberts = wrote: > > On 04/07/2023 13:36, Ryan Roberts wrote: > > On 04/07/2023 04:59, Yu Zhao wrote: > >> On Mon, Jul 3, 2023 at 9:02=E2=80=AFPM Yu Zhao wro= te: > >>> > >>> On Mon, Jul 3, 2023 at 8:23=E2=80=AFPM Yin, Fengwei wrote: > >>>> > >>>> > >>>> > >>>> On 7/3/2023 9:53 PM, Ryan Roberts wrote: > >>>>> arch_wants_pte_order() can be overridden by the arch to return the > >>>>> preferred folio order for pte-mapped memory. This is useful as some > >>>>> architectures (e.g. arm64) can coalesce TLB entries when the physic= al > >>>>> memory is suitably contiguous. > >>>>> > >>>>> The first user for this hint will be FLEXIBLE_THP, which aims to > >>>>> allocate large folios for anonymous memory to reduce page faults an= d > >>>>> other per-page operation costs. > >>>>> > >>>>> Here we add the default implementation of the function, used when t= he > >>>>> architecture does not define it, which returns the order correspond= ing > >>>>> to 64K. > >>>>> > >>>>> Signed-off-by: Ryan Roberts > >>>>> --- > >>>>> include/linux/pgtable.h | 13 +++++++++++++ > >>>>> 1 file changed, 13 insertions(+) > >>>>> > >>>>> diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h > >>>>> index a661a17173fa..f7e38598f20b 100644 > >>>>> --- a/include/linux/pgtable.h > >>>>> +++ b/include/linux/pgtable.h > >>>>> @@ -13,6 +13,7 @@ > >>>>> #include > >>>>> #include > >>>>> #include > >>>>> +#include > >>>>> > >>>>> #if 5 - defined(__PAGETABLE_P4D_FOLDED) - defined(__PAGETABLE_PUD_= FOLDED) - \ > >>>>> defined(__PAGETABLE_PMD_FOLDED) !=3D CONFIG_PGTABLE_LEVELS > >>>>> @@ -336,6 +337,18 @@ static inline bool arch_has_hw_pte_young(void) > >>>>> } > >>>>> #endif > >>>>> > >>>>> +#ifndef arch_wants_pte_order > >>>>> +/* > >>>>> + * Returns preferred folio order for pte-mapped memory. Must be in= range [0, > >>>>> + * PMD_SHIFT-PAGE_SHIFT) and must not be order-1 since THP require= s large folios > >>>>> + * to be at least order-2. > >>>>> + */ > >>>>> +static inline int arch_wants_pte_order(struct vm_area_struct *vma) > >>>>> +{ > >>>>> + return ilog2(SZ_64K >> PAGE_SHIFT); > >>>> Default value which is not related with any silicon may be: PAGE_ALL= OC_COSTLY_ORDER? > >>>> > >>>> Also, current pcp list support cache page with order 0...PAGE_ALLOC_= COSTLY_ORDER, 9. > >>>> If the pcp could cover the page, the pressure to zone lock will be r= educed by pcp. > >>> > >>> The value of PAGE_ALLOC_COSTLY_ORDER is reasonable but again it's a > >>> s/w policy not a h/w preference. Besides, I don't think we can includ= e > >>> mmzone.h in pgtable.h. > >> > >> I think we can make a compromise: > >> 1. change the default implementation of arch_has_hw_pte_young() to ret= urn 0, and > >> 2. in memory.c, we can try PAGE_ALLOC_COSTLY_ORDER for archs that > >> don't override arch_has_hw_pte_young(), or if its return value is too > >> large to fit. > >> This should also take care of the regression, right? > > > > I think you are suggesting that we use 0 as a sentinel which we then tr= anslate > > to PAGE_ALLOC_COSTLY_ORDER? I already have a max_anon_folio_order() fun= ction in > > memory.c (actually it is currently a macro defined as arch_wants_pte_or= der()). > > > > So it would become (I'll talk about the vma concern separately in the t= hread > > where you raised it): > > > > static inline int max_anon_folio_order(struct vm_area_struct *vma) > > { > > int order =3D arch_wants_pte_order(vma); > > > > return order ? order : PAGE_ALLOC_COSTLY_ORDER; > > } > > > > Correct? > > Actually, I'm not sure its a good idea to default to a fixed order. If ru= nning > on an arch with big base pages (e.g. powerpc with 64K pages?), that will = soon > add up to a big chunk of memory, which could be wasteful? > > PAGE_ALLOC_COSTLY_ORDER =3D 3 so with 64K base page, that 512K. Is that a= concern? > Wouldn't it be better to define this as an absolute size? Or even the min= of > PAGE_ALLOC_COSTLY_ORDER and an absolute size? For my POV, not at all. POWER can use smaller page sizes if they wanted to -- I don't think they do: at least the distros I use on my POWER9 all have THP=3Dalways by default (2MB). 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 9CF84EB64D9 for ; Wed, 5 Jul 2023 01:41:14 +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=05id59fQJ1Pe5PDL5c2nINlqk1E2/IKcxzQppKgs+Fc=; b=cdEMrunJu9np1l IkynQfN7naT7G0AsFU0bYbOq/pb1EzuaFuUlL8Hyi1oeXpu5b5bhcLtpLM7H07hylWMyEplOFbsXr 9HCxkT732uArqsXr3bsZJffkyh/zXlBLxVeNgWk706PTqUL4vSkdWuFSi8lfYai+3ULqnBUTbEV5n vVsT5YD6ofzI5wzlC6U3zbQyiSfVr6eO9THMUWshN6vTzz11N3IS0mNDo8t57qMOJYH7LayVuEanK sgZoOIsKgE4kIrjyBiQGKgbeIcHE/2JEgTQABQQi3BV7QgYlSnqd4nwx1oAY5UotuDem45HUUQcgv x1ntGbfF+2WsNAFwW8ew==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qGrVa-00EYB0-0m; Wed, 05 Jul 2023 01:40:42 +0000 Received: from mail-qt1-x830.google.com ([2607:f8b0:4864:20::830]) by bombadil.infradead.org with esmtps (Exim 4.96 #2 (Red Hat Linux)) id 1qGrVY-00EYA8-08 for linux-arm-kernel@lists.infradead.org; Wed, 05 Jul 2023 01:40:41 +0000 Received: by mail-qt1-x830.google.com with SMTP id d75a77b69052e-40371070eb7so253681cf.1 for ; Tue, 04 Jul 2023 18:40:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20221208; t=1688521239; x=1691113239; 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=FFdVskwaA2s8VmI/RPC7w7nv1Uulp1bbtTeicpqhFJM=; b=fkcItRq7IjTK/v5lKc97LIP9v4MSOKBHLxElVQfEmVAlRKkUDfPLHcrZADHn72rWPd FRihodv9VPZ/qGNDg6Jhw3up6rpsBG9nufjgEAldwpaZkhTIF4l2EC+If7wiCjJX9yNc d3XUoaTadPePEyCBzCNkdfUq8b0IpNcpivY9BDVM+QQw0DjpV9FUx6vOX7wOJAMbQDCy BvE+07W2DuT7sEenIn5zRtDJk7EAKk4oSb+k817RG7xvL057FvQPNJVGv9kfs7mc4Uqq vwpIWfnt+w6HN2mbnIiVyGImDnJMfLKJZRJjYBFnAmAUJs+Hb2XspvKf5GTFSEFstlpp pm4Q== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20221208; t=1688521239; x=1691113239; 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=FFdVskwaA2s8VmI/RPC7w7nv1Uulp1bbtTeicpqhFJM=; b=JgCJl+0Q8wXfITs4HUxQrV7SxaDE1Fq2SW1cQWWEXf4QLEskKZRb11tPunWFKaMGpa bftr7IHdfJXyGATSOiJIYlWtOlusV7LbQizmFwOMaFP2Nt2H2wAo7SHoD2avVv0MqZU3 wOzimOBJ8Z/eJERPZxb3kxbVQhvvX401KzpnDX1abCwhEspduU0BysEXfCgQQCA4VNOo aEPARd8J6M+RYJeNC73wwyMvRfW74i+lOySTHnmCo0M6j/mOnqpFOJ3UwwEcWCDHrLr+ Sl1qT4Wpm67r6zWVLZrF0s19i3hCCcR3xz7Kw/K2CO0COD7ghfjg6PStKY++QCWynRpE ffig== X-Gm-Message-State: ABy/qLawZyZeQ+/mCtXtRp+ZzTplHC+yCGRqPOBPeyAdKP+qKov7ILT5 AMBH1itaVQybjuN1SFdddoHLlq5PoAlgkXeX/1uovg== X-Google-Smtp-Source: APBJJlE3EW1xa90VgWXh65s2Sg3RlV68Y4T7PFwCSdCLBD92lbzBXTv8AduSkNV4uu5oFgeFbc09CUlsHkqmf0oFQ+M= X-Received: by 2002:a05:622a:24c:b0:403:5b16:3e8a with SMTP id c12-20020a05622a024c00b004035b163e8amr20208qtx.9.1688521238897; Tue, 04 Jul 2023 18:40:38 -0700 (PDT) MIME-Version: 1.0 References: <20230703135330.1865927-1-ryan.roberts@arm.com> <20230703135330.1865927-4-ryan.roberts@arm.com> <6d389825-1fc0-5c16-7858-2290fd632682@arm.com> In-Reply-To: From: Yu Zhao Date: Tue, 4 Jul 2023 19:40:02 -0600 Message-ID: Subject: Re: [PATCH v2 3/5] mm: Default implementation of arch_wants_pte_order() To: Ryan Roberts Cc: "Yin, Fengwei" , Andrew Morton , Matthew Wilcox , "Kirill A. Shutemov" , David Hildenbrand , Catalin Marinas , Will Deacon , Anshuman Khandual , Yang Shi , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230704_184040_084316_05A31FE0 X-CRM114-Status: GOOD ( 36.61 ) 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 T24gVHVlLCBKdWwgNCwgMjAyMyBhdCA3OjIz4oCvQU0gUnlhbiBSb2JlcnRzIDxyeWFuLnJvYmVy dHNAYXJtLmNvbT4gd3JvdGU6Cj4KPiBPbiAwNC8wNy8yMDIzIDEzOjM2LCBSeWFuIFJvYmVydHMg d3JvdGU6Cj4gPiBPbiAwNC8wNy8yMDIzIDA0OjU5LCBZdSBaaGFvIHdyb3RlOgo+ID4+IE9uIE1v biwgSnVsIDMsIDIwMjMgYXQgOTowMuKAr1BNIFl1IFpoYW8gPHl1emhhb0Bnb29nbGUuY29tPiB3 cm90ZToKPiA+Pj4KPiA+Pj4gT24gTW9uLCBKdWwgMywgMjAyMyBhdCA4OjIz4oCvUE0gWWluLCBG ZW5nd2VpIDxmZW5nd2VpLnlpbkBpbnRlbC5jb20+IHdyb3RlOgo+ID4+Pj4KPiA+Pj4+Cj4gPj4+ Pgo+ID4+Pj4gT24gNy8zLzIwMjMgOTo1MyBQTSwgUnlhbiBSb2JlcnRzIHdyb3RlOgo+ID4+Pj4+ IGFyY2hfd2FudHNfcHRlX29yZGVyKCkgY2FuIGJlIG92ZXJyaWRkZW4gYnkgdGhlIGFyY2ggdG8g cmV0dXJuIHRoZQo+ID4+Pj4+IHByZWZlcnJlZCBmb2xpbyBvcmRlciBmb3IgcHRlLW1hcHBlZCBt ZW1vcnkuIFRoaXMgaXMgdXNlZnVsIGFzIHNvbWUKPiA+Pj4+PiBhcmNoaXRlY3R1cmVzIChlLmcu IGFybTY0KSBjYW4gY29hbGVzY2UgVExCIGVudHJpZXMgd2hlbiB0aGUgcGh5c2ljYWwKPiA+Pj4+ PiBtZW1vcnkgaXMgc3VpdGFibHkgY29udGlndW91cy4KPiA+Pj4+Pgo+ID4+Pj4+IFRoZSBmaXJz dCB1c2VyIGZvciB0aGlzIGhpbnQgd2lsbCBiZSBGTEVYSUJMRV9USFAsIHdoaWNoIGFpbXMgdG8K PiA+Pj4+PiBhbGxvY2F0ZSBsYXJnZSBmb2xpb3MgZm9yIGFub255bW91cyBtZW1vcnkgdG8gcmVk dWNlIHBhZ2UgZmF1bHRzIGFuZAo+ID4+Pj4+IG90aGVyIHBlci1wYWdlIG9wZXJhdGlvbiBjb3N0 cy4KPiA+Pj4+Pgo+ID4+Pj4+IEhlcmUgd2UgYWRkIHRoZSBkZWZhdWx0IGltcGxlbWVudGF0aW9u IG9mIHRoZSBmdW5jdGlvbiwgdXNlZCB3aGVuIHRoZQo+ID4+Pj4+IGFyY2hpdGVjdHVyZSBkb2Vz IG5vdCBkZWZpbmUgaXQsIHdoaWNoIHJldHVybnMgdGhlIG9yZGVyIGNvcnJlc3BvbmRpbmcKPiA+ Pj4+PiB0byA2NEsuCj4gPj4+Pj4KPiA+Pj4+PiBTaWduZWQtb2ZmLWJ5OiBSeWFuIFJvYmVydHMg PHJ5YW4ucm9iZXJ0c0Bhcm0uY29tPgo+ID4+Pj4+IC0tLQo+ID4+Pj4+ICBpbmNsdWRlL2xpbnV4 L3BndGFibGUuaCB8IDEzICsrKysrKysrKysrKysKPiA+Pj4+PiAgMSBmaWxlIGNoYW5nZWQsIDEz IGluc2VydGlvbnMoKykKPiA+Pj4+Pgo+ID4+Pj4+IGRpZmYgLS1naXQgYS9pbmNsdWRlL2xpbnV4 L3BndGFibGUuaCBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCj4gPj4+Pj4gaW5kZXggYTY2MWEx NzE3M2ZhLi5mN2UzODU5OGYyMGIgMTAwNjQ0Cj4gPj4+Pj4gLS0tIGEvaW5jbHVkZS9saW51eC9w Z3RhYmxlLmgKPiA+Pj4+PiArKysgYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAo+ID4+Pj4+IEBA IC0xMyw2ICsxMyw3IEBACj4gPj4+Pj4gICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgo+ID4+Pj4+ ICAjaW5jbHVkZSA8YXNtLWdlbmVyaWMvcGd0YWJsZV91ZmZkLmg+Cj4gPj4+Pj4gICNpbmNsdWRl IDxsaW51eC9wYWdlX3RhYmxlX2NoZWNrLmg+Cj4gPj4+Pj4gKyNpbmNsdWRlIDxsaW51eC9zaXpl cy5oPgo+ID4+Pj4+Cj4gPj4+Pj4gICNpZiA1IC0gZGVmaW5lZChfX1BBR0VUQUJMRV9QNERfRk9M REVEKSAtIGRlZmluZWQoX19QQUdFVEFCTEVfUFVEX0ZPTERFRCkgLSBcCj4gPj4+Pj4gICAgICAg ZGVmaW5lZChfX1BBR0VUQUJMRV9QTURfRk9MREVEKSAhPSBDT05GSUdfUEdUQUJMRV9MRVZFTFMK PiA+Pj4+PiBAQCAtMzM2LDYgKzMzNywxOCBAQCBzdGF0aWMgaW5saW5lIGJvb2wgYXJjaF9oYXNf aHdfcHRlX3lvdW5nKHZvaWQpCj4gPj4+Pj4gIH0KPiA+Pj4+PiAgI2VuZGlmCj4gPj4+Pj4KPiA+ Pj4+PiArI2lmbmRlZiBhcmNoX3dhbnRzX3B0ZV9vcmRlcgo+ID4+Pj4+ICsvKgo+ID4+Pj4+ICsg KiBSZXR1cm5zIHByZWZlcnJlZCBmb2xpbyBvcmRlciBmb3IgcHRlLW1hcHBlZCBtZW1vcnkuIE11 c3QgYmUgaW4gcmFuZ2UgWzAsCj4gPj4+Pj4gKyAqIFBNRF9TSElGVC1QQUdFX1NISUZUKSBhbmQg bXVzdCBub3QgYmUgb3JkZXItMSBzaW5jZSBUSFAgcmVxdWlyZXMgbGFyZ2UgZm9saW9zCj4gPj4+ Pj4gKyAqIHRvIGJlIGF0IGxlYXN0IG9yZGVyLTIuCj4gPj4+Pj4gKyAqLwo+ID4+Pj4+ICtzdGF0 aWMgaW5saW5lIGludCBhcmNoX3dhbnRzX3B0ZV9vcmRlcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSkKPiA+Pj4+PiArewo+ID4+Pj4+ICsgICAgIHJldHVybiBpbG9nMihTWl82NEsgPj4gUEFH RV9TSElGVCk7Cj4gPj4+PiBEZWZhdWx0IHZhbHVlIHdoaWNoIGlzIG5vdCByZWxhdGVkIHdpdGgg YW55IHNpbGljb24gbWF5IGJlOiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUj8KPiA+Pj4+Cj4gPj4+ PiBBbHNvLCBjdXJyZW50IHBjcCBsaXN0IHN1cHBvcnQgY2FjaGUgcGFnZSB3aXRoIG9yZGVyIDAu Li5QQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiwgOS4KPiA+Pj4+IElmIHRoZSBwY3AgY291bGQgY292 ZXIgdGhlIHBhZ2UsIHRoZSBwcmVzc3VyZSB0byB6b25lIGxvY2sgd2lsbCBiZSByZWR1Y2VkIGJ5 IHBjcC4KPiA+Pj4KPiA+Pj4gVGhlIHZhbHVlIG9mIFBBR0VfQUxMT0NfQ09TVExZX09SREVSIGlz IHJlYXNvbmFibGUgYnV0IGFnYWluIGl0J3MgYQo+ID4+PiBzL3cgcG9saWN5IG5vdCBhIGgvdyBw cmVmZXJlbmNlLiBCZXNpZGVzLCBJIGRvbid0IHRoaW5rIHdlIGNhbiBpbmNsdWRlCj4gPj4+IG1t em9uZS5oIGluIHBndGFibGUuaC4KPiA+Pgo+ID4+IEkgdGhpbmsgd2UgY2FuIG1ha2UgYSBjb21w cm9taXNlOgo+ID4+IDEuIGNoYW5nZSB0aGUgZGVmYXVsdCBpbXBsZW1lbnRhdGlvbiBvZiBhcmNo X2hhc19od19wdGVfeW91bmcoKSB0byByZXR1cm4gMCwgYW5kCj4gPj4gMi4gaW4gbWVtb3J5LmMs IHdlIGNhbiB0cnkgUEFHRV9BTExPQ19DT1NUTFlfT1JERVIgZm9yIGFyY2hzIHRoYXQKPiA+PiBk b24ndCBvdmVycmlkZSBhcmNoX2hhc19od19wdGVfeW91bmcoKSwgb3IgaWYgaXRzIHJldHVybiB2 YWx1ZSBpcyB0b28KPiA+PiBsYXJnZSB0byBmaXQuCj4gPj4gVGhpcyBzaG91bGQgYWxzbyB0YWtl IGNhcmUgb2YgdGhlIHJlZ3Jlc3Npb24sIHJpZ2h0Pwo+ID4KPiA+IEkgdGhpbmsgeW91IGFyZSBz dWdnZXN0aW5nIHRoYXQgd2UgdXNlIDAgYXMgYSBzZW50aW5lbCB3aGljaCB3ZSB0aGVuIHRyYW5z bGF0ZQo+ID4gdG8gUEFHRV9BTExPQ19DT1NUTFlfT1JERVI/IEkgYWxyZWFkeSBoYXZlIGEgbWF4 X2Fub25fZm9saW9fb3JkZXIoKSBmdW5jdGlvbiBpbgo+ID4gbWVtb3J5LmMgKGFjdHVhbGx5IGl0 IGlzIGN1cnJlbnRseSBhIG1hY3JvIGRlZmluZWQgYXMgYXJjaF93YW50c19wdGVfb3JkZXIoKSku Cj4gPgo+ID4gU28gaXQgd291bGQgYmVjb21lIChJJ2xsIHRhbGsgYWJvdXQgdGhlIHZtYSBjb25j ZXJuIHNlcGFyYXRlbHkgaW4gdGhlIHRocmVhZAo+ID4gd2hlcmUgeW91IHJhaXNlZCBpdCk6Cj4g Pgo+ID4gc3RhdGljIGlubGluZSBpbnQgbWF4X2Fub25fZm9saW9fb3JkZXIoc3RydWN0IHZtX2Fy ZWFfc3RydWN0ICp2bWEpCj4gPiB7Cj4gPiAgICAgICBpbnQgb3JkZXIgPSBhcmNoX3dhbnRzX3B0 ZV9vcmRlcih2bWEpOwo+ID4KPiA+ICAgICAgIHJldHVybiBvcmRlciA/IG9yZGVyIDogUEFHRV9B TExPQ19DT1NUTFlfT1JERVI7Cj4gPiB9Cj4gPgo+ID4gQ29ycmVjdD8KPgo+IEFjdHVhbGx5LCBJ J20gbm90IHN1cmUgaXRzIGEgZ29vZCBpZGVhIHRvIGRlZmF1bHQgdG8gYSBmaXhlZCBvcmRlci4g SWYgcnVubmluZwo+IG9uIGFuIGFyY2ggd2l0aCBiaWcgYmFzZSBwYWdlcyAoZS5nLiBwb3dlcnBj IHdpdGggNjRLIHBhZ2VzPyksIHRoYXQgd2lsbCBzb29uCj4gYWRkIHVwIHRvIGEgYmlnIGNodW5r IG9mIG1lbW9yeSwgd2hpY2ggY291bGQgYmUgd2FzdGVmdWw/Cj4KPiBQQUdFX0FMTE9DX0NPU1RM WV9PUkRFUiA9IDMgc28gd2l0aCA2NEsgYmFzZSBwYWdlLCB0aGF0IDUxMksuIElzIHRoYXQgYSBj b25jZXJuPwo+IFdvdWxkbid0IGl0IGJlIGJldHRlciB0byBkZWZpbmUgdGhpcyBhcyBhbiBhYnNv bHV0ZSBzaXplPyBPciBldmVuIHRoZSBtaW4gb2YKPiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUiBh bmQgYW4gYWJzb2x1dGUgc2l6ZT8KCkZvciBteSBQT1YsIG5vdCBhdCBhbGwuIFBPV0VSIGNhbiB1 c2Ugc21hbGxlciBwYWdlIHNpemVzIGlmIHRoZXkKd2FudGVkIHRvIC0tIEkgZG9uJ3QgdGhpbmsg dGhleSBkbzogYXQgbGVhc3QgdGhlIGRpc3Ryb3MgSSB1c2Ugb24gbXkKUE9XRVI5IGFsbCBoYXZl IFRIUD1hbHdheXMgYnkgZGVmYXVsdCAoMk1CKS4KCl9fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4 LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9y Zy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK