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 08B12C0015E for ; Tue, 4 Jul 2023 13:21:20 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S230197AbjGDNUt (ORCPT ); Tue, 4 Jul 2023 09:20:49 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:41242 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231217AbjGDNUQ (ORCPT ); Tue, 4 Jul 2023 09:20:16 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 27B8C10C1 for ; Tue, 4 Jul 2023 06:20:04 -0700 (PDT) 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 53C2FC14; Tue, 4 Jul 2023 06:20:46 -0700 (PDT) Received: from [10.1.35.40] (C02Z41KALVDN.cambridge.arm.com [10.1.35.40]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 49D233F663; Tue, 4 Jul 2023 06:20:02 -0700 (PDT) Message-ID: Date: Tue, 4 Jul 2023 14:20:01 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: [PATCH v2 3/5] mm: Default implementation of arch_wants_pte_order() To: Yu Zhao Cc: Andrew Morton , Matthew Wilcox , "Kirill A. Shutemov" , Yin Fengwei , 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 References: <20230703135330.1865927-1-ryan.roberts@arm.com> <20230703135330.1865927-4-ryan.roberts@arm.com> From: Ryan Roberts In-Reply-To: Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 03/07/2023 20:50, Yu Zhao wrote: > On Mon, Jul 3, 2023 at 7:53 AM 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 physical >> 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 and >> other per-page operation costs. >> >> Here we add the default implementation of the function, used when the >> architecture does not define it, which returns the order corresponding >> to 64K. > > I don't really mind a non-zero default value. But people would ask why > non-zero and why 64KB. Probably you could argue this is the large size > all known archs support if they have TLB coalescing. For x86, AMD CPUs > would want to override this. I'll leave it to Fengwei to decide > whether Intel wants a different default value.> > Also I don't like the vma parameter because it makes > arch_wants_pte_order() a mix of hw preference and vma policy. From my > POV, the function should be only about the former; the latter should > be decided by arch-independent MM code. However, I can live with it if > ARM MM people think this is really what you want. ATM, I'm skeptical > they do. Here's the big picture for what I'm tryng to achieve: - In the common case, I'd like all programs to get a performance bump by automatically and transparently using large anon folios - so no explicit requirement on the process to opt-in. - On arm64, in the above case, I'd like the preferred folio size to be 64K; from the (admittedly limitted) testing I've done that's about where the performance knee is and it doesn't appear to increase the memory wastage very much. It also has the benefits that for 4K base pages this is the contpte size (order-4) so I can take full benefit of contpte mappings transparently to the process. And for 16K this is the HPA size (order-2). - On arm64 when the process has marked the VMA for THP (or when transparent_hugepage=always) but the VMA does not meet the requirements for a PMD-sized mapping (or we failed to allocate, ...) then I'd like to map using contpte. For 4K base pages this is 64K (order-4), for 16K this is 2M (order-7) and for 64K this is 2M (order-5). The 64K base page case is very important since the PMD size for that base page is 512MB which is almost impossible to allocate in practice. So one approach would be to define arch_wants_pte_order() as always returning the contpte size (remove the vma parameter). Then max_anon_folio_order() in memory.c could so this: #define MAX_ANON_FOLIO_ORDER_NOTHP ilog2(SZ_64K >> PAGE_SHIFT); static inline int max_anon_folio_order(struct vm_area_struct *vma) { int order = arch_wants_pte_order(); // Fix up default case which returns 0 because PAGE_ALLOC_COSTLY_ORDER // can't be used directly in pgtable.h order = order ? order : PAGE_ALLOC_COSTLY_ORDER; if (hugepage_vma_check(vma, vma->vm_flags, false, true, true)) return order; else return min(order, MAX_ANON_FOLIO_ORDER_NOTHP); } This moves the SW policy into memory.c and gives you PAGE_ALLOC_COSTLY_ORDER (or whatever default we decide on) as the default for arches with no override, and also meets all my goals above. > >> Signed-off-by: Ryan Roberts > > After another CPU vendor, e.g., Fengwei, and an ARM MM person, e.g., > Will give the green light: > Reviewed-by: Yu Zhao > >> --- >> 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) != 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 requires large folios > > The warning is helpful. > >> + * to be at least order-2. >> + */ >> +static inline int arch_wants_pte_order(struct vm_area_struct *vma) >> +{ >> + return ilog2(SZ_64K >> PAGE_SHIFT); >> +} >> +#endif >> + >> #ifndef __HAVE_ARCH_PTEP_GET_AND_CLEAR >> static inline pte_t ptep_get_and_clear(struct mm_struct *mm, >> unsigned long address, 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 25D11C001DE for ; Thu, 6 Jul 2023 02:15:00 +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=WzIjG9Qa0pKhAxJE2SW7xeYMgkUSNpCqOUbFq2VL31k=; b=OLps/6jAX3uhtK Pq6Eceat9/uX/EN7qOqEpTnQB23OkWa4nmvfa1xDxIFMm9l8cExdsBY+05pGYS9L14+1WAVRxuiNj 4CFIamM0N+AJibxvw11x8W0QS4eS062/bh9I2g4U+usTFEO7xWIuSdoU6sW3AL3OTWEVvTqZx8FoY TCC4bCLMyXrIapJZq9r+aWr+H8r+ZvO863snH5s7COhraFyAuwkuRQhLszBsfqcZPpwdYP9haCLGy Rl9ODycV8JcH+UJcqC7xbF2ukx/72STL2yz/f8yYGNlePWU/CQPwcmmAdDCb49vB1wDFhJoqtTRDc YoFy1FQWX9806odv3Xtw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qHEVy-0005r9-0H; Thu, 06 Jul 2023 02:14:38 +0000 Received: from foss.arm.com ([217.140.110.172]) by bombadil.infradead.org with esmtp (Exim 4.96 #2 (Red Hat Linux)) id 1qHEVv-0005pF-1o for linux-arm-kernel@lists.infradead.org; Thu, 06 Jul 2023 02:14:37 +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 53C2FC14; Tue, 4 Jul 2023 06:20:46 -0700 (PDT) Received: from [10.1.35.40] (C02Z41KALVDN.cambridge.arm.com [10.1.35.40]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 49D233F663; Tue, 4 Jul 2023 06:20:02 -0700 (PDT) Message-ID: Date: Tue, 4 Jul 2023 14:20:01 +0100 MIME-Version: 1.0 User-Agent: Mozilla/5.0 (Macintosh; Intel Mac OS X 10.15; rv:102.0) Gecko/20100101 Thunderbird/102.12.0 Subject: Re: [PATCH v2 3/5] mm: Default implementation of arch_wants_pte_order() To: Yu Zhao Cc: Andrew Morton , Matthew Wilcox , "Kirill A. Shutemov" , Yin Fengwei , 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 References: <20230703135330.1865927-1-ryan.roberts@arm.com> <20230703135330.1865927-4-ryan.roberts@arm.com> From: Ryan Roberts In-Reply-To: X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20230705_191435_693969_3EAC47DF X-CRM114-Status: GOOD ( 30.91 ) 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 T24gMDMvMDcvMjAyMyAyMDo1MCwgWXUgWmhhbyB3cm90ZToKPiBPbiBNb24sIEp1bCAzLCAyMDIz IGF0IDc6NTPigK9BTSBSeWFuIFJvYmVydHMgPHJ5YW4ucm9iZXJ0c0Bhcm0uY29tPiB3cm90ZToK Pj4KPj4gYXJjaF93YW50c19wdGVfb3JkZXIoKSBjYW4gYmUgb3ZlcnJpZGRlbiBieSB0aGUgYXJj aCB0byByZXR1cm4gdGhlCj4+IHByZWZlcnJlZCBmb2xpbyBvcmRlciBmb3IgcHRlLW1hcHBlZCBt ZW1vcnkuIFRoaXMgaXMgdXNlZnVsIGFzIHNvbWUKPj4gYXJjaGl0ZWN0dXJlcyAoZS5nLiBhcm02 NCkgY2FuIGNvYWxlc2NlIFRMQiBlbnRyaWVzIHdoZW4gdGhlIHBoeXNpY2FsCj4+IG1lbW9yeSBp cyBzdWl0YWJseSBjb250aWd1b3VzLgo+Pgo+PiBUaGUgZmlyc3QgdXNlciBmb3IgdGhpcyBoaW50 IHdpbGwgYmUgRkxFWElCTEVfVEhQLCB3aGljaCBhaW1zIHRvCj4+IGFsbG9jYXRlIGxhcmdlIGZv bGlvcyBmb3IgYW5vbnltb3VzIG1lbW9yeSB0byByZWR1Y2UgcGFnZSBmYXVsdHMgYW5kCj4+IG90 aGVyIHBlci1wYWdlIG9wZXJhdGlvbiBjb3N0cy4KPj4KPj4gSGVyZSB3ZSBhZGQgdGhlIGRlZmF1 bHQgaW1wbGVtZW50YXRpb24gb2YgdGhlIGZ1bmN0aW9uLCB1c2VkIHdoZW4gdGhlCj4+IGFyY2hp dGVjdHVyZSBkb2VzIG5vdCBkZWZpbmUgaXQsIHdoaWNoIHJldHVybnMgdGhlIG9yZGVyIGNvcnJl c3BvbmRpbmcKPj4gdG8gNjRLLgo+IAo+IEkgZG9uJ3QgcmVhbGx5IG1pbmQgYSBub24temVybyBk ZWZhdWx0IHZhbHVlLiBCdXQgcGVvcGxlIHdvdWxkIGFzayB3aHkKPiBub24temVybyBhbmQgd2h5 IDY0S0IuIFByb2JhYmx5IHlvdSBjb3VsZCBhcmd1ZSB0aGlzIGlzIHRoZSBsYXJnZSBzaXplCj4g YWxsIGtub3duIGFyY2hzIHN1cHBvcnQgaWYgdGhleSBoYXZlIFRMQiBjb2FsZXNjaW5nLiBGb3Ig eDg2LCBBTUQgQ1BVcwo+IHdvdWxkIHdhbnQgdG8gb3ZlcnJpZGUgdGhpcy4gSSdsbCBsZWF2ZSBp dCB0byBGZW5nd2VpIHRvIGRlY2lkZQo+IHdoZXRoZXIgSW50ZWwgd2FudHMgYSBkaWZmZXJlbnQg ZGVmYXVsdCB2YWx1ZS4+Cj4gQWxzbyBJIGRvbid0IGxpa2UgdGhlIHZtYSBwYXJhbWV0ZXIgYmVj YXVzZSBpdCBtYWtlcwo+IGFyY2hfd2FudHNfcHRlX29yZGVyKCkgYSBtaXggb2YgaHcgcHJlZmVy ZW5jZSBhbmQgdm1hIHBvbGljeS4gRnJvbSBteQo+IFBPViwgdGhlIGZ1bmN0aW9uIHNob3VsZCBi ZSBvbmx5IGFib3V0IHRoZSBmb3JtZXI7IHRoZSBsYXR0ZXIgc2hvdWxkCj4gYmUgZGVjaWRlZCBi eSBhcmNoLWluZGVwZW5kZW50IE1NIGNvZGUuIEhvd2V2ZXIsIEkgY2FuIGxpdmUgd2l0aCBpdCBp Zgo+IEFSTSBNTSBwZW9wbGUgdGhpbmsgdGhpcyBpcyByZWFsbHkgd2hhdCB5b3Ugd2FudC4gQVRN LCBJJ20gc2tlcHRpY2FsCj4gdGhleSBkby4KCkhlcmUncyB0aGUgYmlnIHBpY3R1cmUgZm9yIHdo YXQgSSdtIHRyeW5nIHRvIGFjaGlldmU6CgogLSBJbiB0aGUgY29tbW9uIGNhc2UsIEknZCBsaWtl IGFsbCBwcm9ncmFtcyB0byBnZXQgYSBwZXJmb3JtYW5jZSBidW1wIGJ5CmF1dG9tYXRpY2FsbHkg YW5kIHRyYW5zcGFyZW50bHkgdXNpbmcgbGFyZ2UgYW5vbiBmb2xpb3MgLSBzbyBubyBleHBsaWNp dApyZXF1aXJlbWVudCBvbiB0aGUgcHJvY2VzcyB0byBvcHQtaW4uCgogLSBPbiBhcm02NCwgaW4g dGhlIGFib3ZlIGNhc2UsIEknZCBsaWtlIHRoZSBwcmVmZXJyZWQgZm9saW8gc2l6ZSB0byBiZSA2 NEs7CmZyb20gdGhlIChhZG1pdHRlZGx5IGxpbWl0dGVkKSB0ZXN0aW5nIEkndmUgZG9uZSB0aGF0 J3MgYWJvdXQgd2hlcmUgdGhlCnBlcmZvcm1hbmNlIGtuZWUgaXMgYW5kIGl0IGRvZXNuJ3QgYXBw ZWFyIHRvIGluY3JlYXNlIHRoZSBtZW1vcnkgd2FzdGFnZSB2ZXJ5Cm11Y2guIEl0IGFsc28gaGFz IHRoZSBiZW5lZml0cyB0aGF0IGZvciA0SyBiYXNlIHBhZ2VzIHRoaXMgaXMgdGhlIGNvbnRwdGUg c2l6ZQoob3JkZXItNCkgc28gSSBjYW4gdGFrZSBmdWxsIGJlbmVmaXQgb2YgY29udHB0ZSBtYXBw aW5ncyB0cmFuc3BhcmVudGx5IHRvIHRoZQpwcm9jZXNzLiBBbmQgZm9yIDE2SyB0aGlzIGlzIHRo ZSBIUEEgc2l6ZSAob3JkZXItMikuCgogLSBPbiBhcm02NCB3aGVuIHRoZSBwcm9jZXNzIGhhcyBt YXJrZWQgdGhlIFZNQSBmb3IgVEhQIChvciB3aGVuCnRyYW5zcGFyZW50X2h1Z2VwYWdlPWFsd2F5 cykgYnV0IHRoZSBWTUEgZG9lcyBub3QgbWVldCB0aGUgcmVxdWlyZW1lbnRzIGZvciBhClBNRC1z aXplZCBtYXBwaW5nIChvciB3ZSBmYWlsZWQgdG8gYWxsb2NhdGUsIC4uLikgdGhlbiBJJ2QgbGlr ZSB0byBtYXAgdXNpbmcKY29udHB0ZS4gRm9yIDRLIGJhc2UgcGFnZXMgdGhpcyBpcyA2NEsgKG9y ZGVyLTQpLCBmb3IgMTZLIHRoaXMgaXMgMk0gKG9yZGVyLTcpCmFuZCBmb3IgNjRLIHRoaXMgaXMg Mk0gKG9yZGVyLTUpLiBUaGUgNjRLIGJhc2UgcGFnZSBjYXNlIGlzIHZlcnkgaW1wb3J0YW50IHNp bmNlCnRoZSBQTUQgc2l6ZSBmb3IgdGhhdCBiYXNlIHBhZ2UgaXMgNTEyTUIgd2hpY2ggaXMgYWxt b3N0IGltcG9zc2libGUgdG8gYWxsb2NhdGUKaW4gcHJhY3RpY2UuCgpTbyBvbmUgYXBwcm9hY2gg d291bGQgYmUgdG8gZGVmaW5lIGFyY2hfd2FudHNfcHRlX29yZGVyKCkgYXMgYWx3YXlzIHJldHVy bmluZwp0aGUgY29udHB0ZSBzaXplIChyZW1vdmUgdGhlIHZtYSBwYXJhbWV0ZXIpLiBUaGVuIG1h eF9hbm9uX2ZvbGlvX29yZGVyKCkgaW4KbWVtb3J5LmMgY291bGQgc28gdGhpczoKCgojZGVmaW5l IE1BWF9BTk9OX0ZPTElPX09SREVSX05PVEhQCWlsb2cyKFNaXzY0SyA+PiBQQUdFX1NISUZUKTsK CnN0YXRpYyBpbmxpbmUgaW50IG1heF9hbm9uX2ZvbGlvX29yZGVyKHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hKQp7CglpbnQgb3JkZXIgPSBhcmNoX3dhbnRzX3B0ZV9vcmRlcigpOwoKCS8vIEZp eCB1cCBkZWZhdWx0IGNhc2Ugd2hpY2ggcmV0dXJucyAwIGJlY2F1c2UgUEFHRV9BTExPQ19DT1NU TFlfT1JERVIKCS8vIGNhbid0IGJlIHVzZWQgZGlyZWN0bHkgaW4gcGd0YWJsZS5oCglvcmRlciA9 IG9yZGVyID8gb3JkZXIgOiBQQUdFX0FMTE9DX0NPU1RMWV9PUkRFUjsKCglpZiAoaHVnZXBhZ2Vf dm1hX2NoZWNrKHZtYSwgdm1hLT52bV9mbGFncywgZmFsc2UsIHRydWUsIHRydWUpKQoJCXJldHVy biBvcmRlcjsKCWVsc2UKCQlyZXR1cm4gbWluKG9yZGVyLCBNQVhfQU5PTl9GT0xJT19PUkRFUl9O T1RIUCk7Cn0KCgpUaGlzIG1vdmVzIHRoZSBTVyBwb2xpY3kgaW50byBtZW1vcnkuYyBhbmQgZ2l2 ZXMgeW91IFBBR0VfQUxMT0NfQ09TVExZX09SREVSIChvcgp3aGF0ZXZlciBkZWZhdWx0IHdlIGRl Y2lkZSBvbikgYXMgdGhlIGRlZmF1bHQgZm9yIGFyY2hlcyB3aXRoIG5vIG92ZXJyaWRlLCBhbmQK YWxzbyBtZWV0cyBhbGwgbXkgZ29hbHMgYWJvdmUuCgo+IAo+PiBTaWduZWQtb2ZmLWJ5OiBSeWFu IFJvYmVydHMgPHJ5YW4ucm9iZXJ0c0Bhcm0uY29tPgo+IAo+IEFmdGVyIGFub3RoZXIgQ1BVIHZl bmRvciwgZS5nLiwgRmVuZ3dlaSwgYW5kIGFuIEFSTSBNTSBwZXJzb24sIGUuZy4sCj4gV2lsbCBn aXZlIHRoZSBncmVlbiBsaWdodDoKPiBSZXZpZXdlZC1ieTogWXUgWmhhbyA8eXV6aGFvQGdvb2ds ZS5jb20+Cj4gCj4+IC0tLQo+PiAgaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggfCAxMyArKysrKysr KysrKysrCj4+ICAxIGZpbGUgY2hhbmdlZCwgMTMgaW5zZXJ0aW9ucygrKQo+Pgo+PiBkaWZmIC0t Z2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAo+ PiBpbmRleCBhNjYxYTE3MTczZmEuLmY3ZTM4NTk4ZjIwYiAxMDA2NDQKPj4gLS0tIGEvaW5jbHVk ZS9saW51eC9wZ3RhYmxlLmgKPj4gKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKPj4gQEAg LTEzLDYgKzEzLDcgQEAKPj4gICNpbmNsdWRlIDxsaW51eC9lcnJuby5oPgo+PiAgI2luY2x1ZGUg PGFzbS1nZW5lcmljL3BndGFibGVfdWZmZC5oPgo+PiAgI2luY2x1ZGUgPGxpbnV4L3BhZ2VfdGFi bGVfY2hlY2suaD4KPj4gKyNpbmNsdWRlIDxsaW51eC9zaXplcy5oPgo+Pgo+PiAgI2lmIDUgLSBk ZWZpbmVkKF9fUEFHRVRBQkxFX1A0RF9GT0xERUQpIC0gZGVmaW5lZChfX1BBR0VUQUJMRV9QVURf Rk9MREVEKSAtIFwKPj4gICAgICAgICBkZWZpbmVkKF9fUEFHRVRBQkxFX1BNRF9GT0xERUQpICE9 IENPTkZJR19QR1RBQkxFX0xFVkVMUwo+PiBAQCAtMzM2LDYgKzMzNywxOCBAQCBzdGF0aWMgaW5s aW5lIGJvb2wgYXJjaF9oYXNfaHdfcHRlX3lvdW5nKHZvaWQpCj4+ICB9Cj4+ICAjZW5kaWYKPj4K Pj4gKyNpZm5kZWYgYXJjaF93YW50c19wdGVfb3JkZXIKPj4gKy8qCj4+ICsgKiBSZXR1cm5zIHBy ZWZlcnJlZCBmb2xpbyBvcmRlciBmb3IgcHRlLW1hcHBlZCBtZW1vcnkuIE11c3QgYmUgaW4gcmFu Z2UgWzAsCj4+ICsgKiBQTURfU0hJRlQtUEFHRV9TSElGVCkgYW5kIG11c3Qgbm90IGJlIG9yZGVy LTEgc2luY2UgVEhQIHJlcXVpcmVzIGxhcmdlIGZvbGlvcwo+IAo+IFRoZSB3YXJuaW5nIGlzIGhl bHBmdWwuCj4gCj4+ICsgKiB0byBiZSBhdCBsZWFzdCBvcmRlci0yLgo+PiArICovCj4+ICtzdGF0 aWMgaW5saW5lIGludCBhcmNoX3dhbnRzX3B0ZV9vcmRlcihzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3Qg KnZtYSkKPj4gK3sKPj4gKyAgICAgICByZXR1cm4gaWxvZzIoU1pfNjRLID4+IFBBR0VfU0hJRlQp Owo+PiArfQo+PiArI2VuZGlmCj4+ICsKPj4gICNpZm5kZWYgX19IQVZFX0FSQ0hfUFRFUF9HRVRf QU5EX0NMRUFSCj4+ICBzdGF0aWMgaW5saW5lIHB0ZV90IHB0ZXBfZ2V0X2FuZF9jbGVhcihzdHJ1 Y3QgbW1fc3RydWN0ICptbSwKPj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAoKCl9fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwgbWFpbGluZyBsaXN0CmxpbnV4LWFy bS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9t YWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK