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 D529FC433FE for ; Fri, 11 Mar 2022 10:55:34 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1348092AbiCKK4g (ORCPT ); Fri, 11 Mar 2022 05:56:36 -0500 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:60154 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231485AbiCKK4e (ORCPT ); Fri, 11 Mar 2022 05:56:34 -0500 Received: from mail-yw1-x1129.google.com (mail-yw1-x1129.google.com [IPv6:2607:f8b0:4864:20::1129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 243B81B510C; Fri, 11 Mar 2022 02:55:31 -0800 (PST) Received: by mail-yw1-x1129.google.com with SMTP id 00721157ae682-2d07ae0b1c4so88330117b3.11; Fri, 11 Mar 2022 02:55:31 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=qlwCyDk8qlleYrAYeX+7n1Ivn6nloAFSh4xt8Gq150o=; b=oaYU4zv7z2lQ1xabpxAZyjYx0RA1wJsVPblkE5xVDqUf7Z10PTPs6cEpwKyIXaEZLp OR7FHaerSmPEUm9vpiREI5PHgfQIUR3LNKbaTrJ59BzycE9q6bxoG23jcyuHsza1KufN EQuoGUhNP4ua9p4MDDqkY+Hi1KIDssycuBolb6ZYVVVVJHBAHd4uoSOkZaAo2ZmSqaHi IpLg/FGBIvKw5JoL6Pgz+YTfcBHOi3war4xtv5GFc9k+2vDi+KNJx9qTZqgOdMCUymG2 602cuilghZfUlapRNuKVU6exzuh6x5ooe3mnoP70gdJq9Ojs0rAhGMKT0SOjjlPu4NfP 5tAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=qlwCyDk8qlleYrAYeX+7n1Ivn6nloAFSh4xt8Gq150o=; b=LtmB0q4THveFr5dTMjzWBmosn9j58EuQRNmxsvhwdfiJjmMAiDg7CwNccvvdBJXNhu ZKiyfN9Oe7e08iQ0abW2a4uBxUuA8opGcmNDlOPwiWHx/YnUY8u5cQvtNEzjHhY/zwaO J2TMvSRYFSavCSAf9vaFmrFVvT3CRmsgK9fthyq7rm/XwA6uVsaZ6ihlyPqzB8AvVT1z WH6CgXdixGWiImnP+T13cioYU2HDC5+2S2D3GgI46F8WbEPKjjQW94LzY7Tj29SRz7EM 8zPoK5szQ+QpY/60r1CJyTAm40FCYO5HspI+dzjIhpcqUiS1i5lyJWkdnBCEgNQsLoP7 0fuw== X-Gm-Message-State: AOAM532X3trf0O5CGwcTpPTcL0T33DfY7xIs1rSbUFSoLrcDZRZxZ/AN jp1bVNzTD9h2sUyl3zGREXYB8Ng0rF2mQrouKnU= X-Google-Smtp-Source: ABdhPJxW4CPn/wNnPf2NhXuDc0qbrCNkJ5zhS0YrB60/r/3wkqcqNNWHHLNWpmFub9ERdIkvwy2HwUOOIS4OoJKLLp8= X-Received: by 2002:a81:19c3:0:b0:2dc:2686:14e3 with SMTP id 186-20020a8119c3000000b002dc268614e3mr7479905ywz.515.1646996130236; Fri, 11 Mar 2022 02:55:30 -0800 (PST) MIME-Version: 1.0 References: <20220309021230.721028-1-yuzhao@google.com> <20220309021230.721028-2-yuzhao@google.com> In-Reply-To: <20220309021230.721028-2-yuzhao@google.com> From: Barry Song <21cnbao@gmail.com> Date: Fri, 11 Mar 2022 23:55:19 +1300 Message-ID: Subject: Re: [PATCH v9 01/14] mm: x86, arm64: add arch_has_hw_pte_young() To: Yu Zhao Cc: Andrew Morton , Linus Torvalds , Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Jesse Barnes , Johannes Weiner , Jonathan Corbet , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Rik van Riel , Vlastimil Babka , Will Deacon , Ying Huang , LAK , Linux Doc Mailing List , LKML , Linux-MM , page-reclaim@google.com, x86 , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , =?UTF-8?Q?Holger_Hoffst=C3=A4tte?= , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain 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 Wed, Mar 9, 2022 at 3:47 PM Yu Zhao wrote: > > Some architectures automatically set the accessed bit in PTEs, e.g., > x86 and arm64 v8.2. On architectures that do not have this capability, > clearing the accessed bit in a PTE usually triggers a page fault > following the TLB miss of this PTE (to emulate the accessed bit). > > Being aware of this capability can help make better decisions, e.g., > whether to spread the work out over a period of time to reduce bursty > page faults when trying to clear the accessed bit in many PTEs. > > Note that theoretically this capability can be unreliable, e.g., > hotplugged CPUs might be different from builtin ones. Therefore it > should not be used in architecture-independent code that involves > correctness, e.g., to determine whether TLB flushes are required (in > combination with the accessed bit). > > Signed-off-by: Yu Zhao > Acked-by: Brian Geffon > Acked-by: Jan Alexander Steffens (heftig) > Acked-by: Oleksandr Natalenko > Acked-by: Steven Barrett > Acked-by: Suleiman Souhlal > Acked-by: Will Deacon > Tested-by: Daniel Byrne > Tested-by: Donald Carr > Tested-by: Holger Hoffst=C3=A4tte > Tested-by: Konstantin Kharlamov > Tested-by: Shuang Zhai > Tested-by: Sofia Trinh > Tested-by: Vaibhav Jain > --- Reviewed-by: Barry Song i guess arch_has_hw_pte_young() isn't called that often in either mm/memory.c or mm/vmscan.c. Otherwise, moving to a static key might help. Is it? > arch/arm64/include/asm/pgtable.h | 14 ++------------ > arch/x86/include/asm/pgtable.h | 6 +++--- > include/linux/pgtable.h | 13 +++++++++++++ > mm/memory.c | 14 +------------- > 4 files changed, 19 insertions(+), 28 deletions(-) > > diff --git a/arch/arm64/include/asm/pgtable.h b/arch/arm64/include/asm/pg= table.h > index c4ba047a82d2..990358eca359 100644 > --- a/arch/arm64/include/asm/pgtable.h > +++ b/arch/arm64/include/asm/pgtable.h > @@ -999,23 +999,13 @@ static inline void update_mmu_cache(struct vm_area_= struct *vma, > * page after fork() + CoW for pfn mappings. We don't always have a > * hardware-managed access flag on arm64. > */ > -static inline bool arch_faults_on_old_pte(void) > -{ > - WARN_ON(preemptible()); > - > - return !cpu_has_hw_af(); > -} > -#define arch_faults_on_old_pte arch_faults_on_old_pte > +#define arch_has_hw_pte_young cpu_has_hw_af > > /* > * Experimentally, it's cheap to set the access flag in hardware and we > * benefit from prefaulting mappings as 'old' to start with. > */ > -static inline bool arch_wants_old_prefaulted_pte(void) > -{ > - return !arch_faults_on_old_pte(); > -} > -#define arch_wants_old_prefaulted_pte arch_wants_old_prefaulted_pte > +#define arch_wants_old_prefaulted_pte cpu_has_hw_af > > static inline pgprot_t arch_filter_pgprot(pgprot_t prot) > { > diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtabl= e.h > index 8a9432fb3802..60b6ce45c2e3 100644 > --- a/arch/x86/include/asm/pgtable.h > +++ b/arch/x86/include/asm/pgtable.h > @@ -1423,10 +1423,10 @@ static inline bool arch_has_pfn_modify_check(void= ) > return boot_cpu_has_bug(X86_BUG_L1TF); > } > > -#define arch_faults_on_old_pte arch_faults_on_old_pte > -static inline bool arch_faults_on_old_pte(void) > +#define arch_has_hw_pte_young arch_has_hw_pte_young > +static inline bool arch_has_hw_pte_young(void) > { > - return false; > + return true; > } > > #endif /* __ASSEMBLY__ */ > diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h > index f4f4077b97aa..79f64dcff07d 100644 > --- a/include/linux/pgtable.h > +++ b/include/linux/pgtable.h > @@ -259,6 +259,19 @@ static inline int pmdp_clear_flush_young(struct vm_a= rea_struct *vma, > #endif /* CONFIG_TRANSPARENT_HUGEPAGE */ > #endif > > +#ifndef arch_has_hw_pte_young > +/* > + * Return whether the accessed bit is supported on the local CPU. > + * > + * This stub assumes accessing through an old PTE triggers a page fault. > + * Architectures that automatically set the access bit should overwrite = it. > + */ > +static inline bool arch_has_hw_pte_young(void) > +{ > + return false; > +} > +#endif > + > #ifndef __HAVE_ARCH_PTEP_CLEAR > static inline void ptep_clear(struct mm_struct *mm, unsigned long addr, > pte_t *ptep) > diff --git a/mm/memory.c b/mm/memory.c > index c125c4969913..a7379196a47e 100644 > --- a/mm/memory.c > +++ b/mm/memory.c > @@ -122,18 +122,6 @@ int randomize_va_space __read_mostly =3D > 2; > #endif > > -#ifndef arch_faults_on_old_pte > -static inline bool arch_faults_on_old_pte(void) > -{ > - /* > - * Those arches which don't have hw access flag feature need to > - * implement their own helper. By default, "true" means pagefault > - * will be hit on old pte. > - */ > - return true; > -} > -#endif > - > #ifndef arch_wants_old_prefaulted_pte > static inline bool arch_wants_old_prefaulted_pte(void) > { > @@ -2778,7 +2766,7 @@ static inline bool cow_user_page(struct page *dst, = struct page *src, > * On architectures with software "accessed" bits, we would > * take a double page fault, so mark it accessed here. > */ > - if (arch_faults_on_old_pte() && !pte_young(vmf->orig_pte)) { > + if (!arch_has_hw_pte_young() && !pte_young(vmf->orig_pte)) { > pte_t entry; > > vmf->pte =3D pte_offset_map_lock(mm, vmf->pmd, addr, &vmf= ->ptl); > -- > 2.35.1.616.g0bdcbb4464-goog > Thanks Barry 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 E22B6C433F5 for ; Fri, 11 Mar 2022 10:56:52 +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=S+yLP5nBwiGYZ7Hx6PLEzmaIalGHF2qfXseJ3lWhF2o=; b=4JG4V2dbubmtxm WMol23kCl6DFdHnBbmdk6X3jKDGA3YCJOji4hJFgVnWrT2nooMWiL8pBr78LAeJbldreQP9coYmcC /gqXEGF3QBucVuUbZrvxRWJ7mMEanqwkxqh/7S4OciUxYgXXeGFPH2ok+hysDUCXbfSLi8yvGHRN4 DaG5Xth657br8wZOaUsl0SWAdsjQT7rFuQMK3UKd0smSBC4mMAOCX63Mv3Br5TiX1S008rQkEU52V geMOixjWjRbuTCaqGV/lXbVFasUAGYcr+d2JrbcxI9VDHtbpy8b/tpMZ6XFGhBuaWOMgJPuz1Qld7 gHLhbRH31jhdmwywLCNw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nScvn-00G8C5-D3; Fri, 11 Mar 2022 10:55:35 +0000 Received: from mail-yw1-x1134.google.com ([2607:f8b0:4864:20::1134]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nScvj-00G8Ak-3Z for linux-arm-kernel@lists.infradead.org; Fri, 11 Mar 2022 10:55:32 +0000 Received: by mail-yw1-x1134.google.com with SMTP id 00721157ae682-2d07ae0b1c0so88924747b3.2 for ; Fri, 11 Mar 2022 02:55:30 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=mime-version:references:in-reply-to:from:date:message-id:subject:to :cc:content-transfer-encoding; bh=qlwCyDk8qlleYrAYeX+7n1Ivn6nloAFSh4xt8Gq150o=; b=oaYU4zv7z2lQ1xabpxAZyjYx0RA1wJsVPblkE5xVDqUf7Z10PTPs6cEpwKyIXaEZLp OR7FHaerSmPEUm9vpiREI5PHgfQIUR3LNKbaTrJ59BzycE9q6bxoG23jcyuHsza1KufN EQuoGUhNP4ua9p4MDDqkY+Hi1KIDssycuBolb6ZYVVVVJHBAHd4uoSOkZaAo2ZmSqaHi IpLg/FGBIvKw5JoL6Pgz+YTfcBHOi3war4xtv5GFc9k+2vDi+KNJx9qTZqgOdMCUymG2 602cuilghZfUlapRNuKVU6exzuh6x5ooe3mnoP70gdJq9Ojs0rAhGMKT0SOjjlPu4NfP 5tAg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:mime-version:references:in-reply-to:from:date :message-id:subject:to:cc:content-transfer-encoding; bh=qlwCyDk8qlleYrAYeX+7n1Ivn6nloAFSh4xt8Gq150o=; b=DwLEgdH2UldwwqvYxR9xQ0ROSan4FjURXDnhKiQGKiVi7/ScKIinpbijH0aUfGiiYJ cHkukcJMmMngMAuRwaFSybCsAmFAA5t9akT+QqncyDIjnEg4eIeI6iUvRRo4qBSnGNPi Z+EiEJcQ0E46PX1NxbaABkCIrNGpMTjt8m/BMWEGuje3sIp0kDIhYes/g8o1ntWJEE9L XXeSp7V8T/IIBF59S/CPnk93wWRKFymXQXuy1FdmnObBgNVAV2txK4zVEXyzFl7zup84 VLdqXtgh4UbZycRDpE35K8+bBpjiz1M+bWiNSAuycb06o3dNHFaDQnbA+9CJ3gE9N2VX qFmQ== X-Gm-Message-State: AOAM530t3KC2NWF/4u6szl5eSmpq0Q1aXxYqsvfRR8gQ/86+LGOwMTkS oKndyfpSm6bgdn7+ghZrH1T0+cbY3ryRRIHLAEw= X-Google-Smtp-Source: ABdhPJxW4CPn/wNnPf2NhXuDc0qbrCNkJ5zhS0YrB60/r/3wkqcqNNWHHLNWpmFub9ERdIkvwy2HwUOOIS4OoJKLLp8= X-Received: by 2002:a81:19c3:0:b0:2dc:2686:14e3 with SMTP id 186-20020a8119c3000000b002dc268614e3mr7479905ywz.515.1646996130236; Fri, 11 Mar 2022 02:55:30 -0800 (PST) MIME-Version: 1.0 References: <20220309021230.721028-1-yuzhao@google.com> <20220309021230.721028-2-yuzhao@google.com> In-Reply-To: <20220309021230.721028-2-yuzhao@google.com> From: Barry Song <21cnbao@gmail.com> Date: Fri, 11 Mar 2022 23:55:19 +1300 Message-ID: Subject: Re: [PATCH v9 01/14] mm: x86, arm64: add arch_has_hw_pte_young() To: Yu Zhao Cc: Andrew Morton , Linus Torvalds , Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Jesse Barnes , Johannes Weiner , Jonathan Corbet , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Rik van Riel , Vlastimil Babka , Will Deacon , Ying Huang , LAK , Linux Doc Mailing List , LKML , Linux-MM , page-reclaim@google.com, x86 , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , =?UTF-8?Q?Holger_Hoffst=C3=A4tte?= , Konstantin Kharlamov , Shuang Zhai , Sofia Trinh , Vaibhav Jain X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20220311_025531_187453_05C027E2 X-CRM114-Status: GOOD ( 30.29 ) 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 T24gV2VkLCBNYXIgOSwgMjAyMiBhdCAzOjQ3IFBNIFl1IFpoYW8gPHl1emhhb0Bnb29nbGUuY29t PiB3cm90ZToKPgo+IFNvbWUgYXJjaGl0ZWN0dXJlcyBhdXRvbWF0aWNhbGx5IHNldCB0aGUgYWNj ZXNzZWQgYml0IGluIFBURXMsIGUuZy4sCj4geDg2IGFuZCBhcm02NCB2OC4yLiBPbiBhcmNoaXRl Y3R1cmVzIHRoYXQgZG8gbm90IGhhdmUgdGhpcyBjYXBhYmlsaXR5LAo+IGNsZWFyaW5nIHRoZSBh Y2Nlc3NlZCBiaXQgaW4gYSBQVEUgdXN1YWxseSB0cmlnZ2VycyBhIHBhZ2UgZmF1bHQKPiBmb2xs b3dpbmcgdGhlIFRMQiBtaXNzIG9mIHRoaXMgUFRFICh0byBlbXVsYXRlIHRoZSBhY2Nlc3NlZCBi aXQpLgo+Cj4gQmVpbmcgYXdhcmUgb2YgdGhpcyBjYXBhYmlsaXR5IGNhbiBoZWxwIG1ha2UgYmV0 dGVyIGRlY2lzaW9ucywgZS5nLiwKPiB3aGV0aGVyIHRvIHNwcmVhZCB0aGUgd29yayBvdXQgb3Zl ciBhIHBlcmlvZCBvZiB0aW1lIHRvIHJlZHVjZSBidXJzdHkKPiBwYWdlIGZhdWx0cyB3aGVuIHRy eWluZyB0byBjbGVhciB0aGUgYWNjZXNzZWQgYml0IGluIG1hbnkgUFRFcy4KPgo+IE5vdGUgdGhh dCB0aGVvcmV0aWNhbGx5IHRoaXMgY2FwYWJpbGl0eSBjYW4gYmUgdW5yZWxpYWJsZSwgZS5nLiwK PiBob3RwbHVnZ2VkIENQVXMgbWlnaHQgYmUgZGlmZmVyZW50IGZyb20gYnVpbHRpbiBvbmVzLiBU aGVyZWZvcmUgaXQKPiBzaG91bGQgbm90IGJlIHVzZWQgaW4gYXJjaGl0ZWN0dXJlLWluZGVwZW5k ZW50IGNvZGUgdGhhdCBpbnZvbHZlcwo+IGNvcnJlY3RuZXNzLCBlLmcuLCB0byBkZXRlcm1pbmUg d2hldGhlciBUTEIgZmx1c2hlcyBhcmUgcmVxdWlyZWQgKGluCj4gY29tYmluYXRpb24gd2l0aCB0 aGUgYWNjZXNzZWQgYml0KS4KPgo+IFNpZ25lZC1vZmYtYnk6IFl1IFpoYW8gPHl1emhhb0Bnb29n bGUuY29tPgo+IEFja2VkLWJ5OiBCcmlhbiBHZWZmb24gPGJnZWZmb25AZ29vZ2xlLmNvbT4KPiBB Y2tlZC1ieTogSmFuIEFsZXhhbmRlciBTdGVmZmVucyAoaGVmdGlnKSA8aGVmdGlnQGFyY2hsaW51 eC5vcmc+Cj4gQWNrZWQtYnk6IE9sZWtzYW5kciBOYXRhbGVua28gPG9sZWtzYW5kckBuYXRhbGVu a28ubmFtZT4KPiBBY2tlZC1ieTogU3RldmVuIEJhcnJldHQgPHN0ZXZlbkBsaXF1b3JpeC5uZXQ+ Cj4gQWNrZWQtYnk6IFN1bGVpbWFuIFNvdWhsYWwgPHN1bGVpbWFuQGdvb2dsZS5jb20+Cj4gQWNr ZWQtYnk6IFdpbGwgRGVhY29uIDx3aWxsQGtlcm5lbC5vcmc+Cj4gVGVzdGVkLWJ5OiBEYW5pZWwg QnlybmUgPGRqYnlybmVAbXR1LmVkdT4KPiBUZXN0ZWQtYnk6IERvbmFsZCBDYXJyIDxkQGNoYW9z LXJlaW5zLmNvbT4KPiBUZXN0ZWQtYnk6IEhvbGdlciBIb2Zmc3TDpHR0ZSA8aG9sZ2VyQGFwcGxp ZWQtYXN5bmNocm9ueS5jb20+Cj4gVGVzdGVkLWJ5OiBLb25zdGFudGluIEtoYXJsYW1vdiA8SGkt QW5nZWxAeWFuZGV4LnJ1Pgo+IFRlc3RlZC1ieTogU2h1YW5nIFpoYWkgPHN6aGFpMkBjcy5yb2No ZXN0ZXIuZWR1Pgo+IFRlc3RlZC1ieTogU29maWEgVHJpbmggPHNvZmlhLnRyaW5oQGVkaS53b3Jr cz4KPiBUZXN0ZWQtYnk6IFZhaWJoYXYgSmFpbiA8dmFpYmhhdkBsaW51eC5pYm0uY29tPgo+IC0t LQoKUmV2aWV3ZWQtYnk6IEJhcnJ5IFNvbmcgPGJhb2h1YUBrZXJuZWwub3JnPgoKaSBndWVzcyBh cmNoX2hhc19od19wdGVfeW91bmcoKSBpc24ndCBjYWxsZWQgdGhhdCBvZnRlbiBpbiBlaXRoZXIK bW0vbWVtb3J5LmMgb3IgbW0vdm1zY2FuLmMuCk90aGVyd2lzZSwgbW92aW5nIHRvIGEgc3RhdGlj IGtleSBtaWdodCBoZWxwLiBJcyBpdD8KCgo+ICBhcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFi bGUuaCB8IDE0ICsrLS0tLS0tLS0tLS0tCj4gIGFyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUu aCAgIHwgIDYgKysrLS0tCj4gIGluY2x1ZGUvbGludXgvcGd0YWJsZS5oICAgICAgICAgIHwgMTMg KysrKysrKysrKysrKwo+ICBtbS9tZW1vcnkuYyAgICAgICAgICAgICAgICAgICAgICB8IDE0ICst LS0tLS0tLS0tLS0tCj4gIDQgZmlsZXMgY2hhbmdlZCwgMTkgaW5zZXJ0aW9ucygrKSwgMjggZGVs ZXRpb25zKC0pCj4KPiBkaWZmIC0tZ2l0IGEvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxl LmggYi9hcmNoL2FybTY0L2luY2x1ZGUvYXNtL3BndGFibGUuaAo+IGluZGV4IGM0YmEwNDdhODJk Mi4uOTkwMzU4ZWNhMzU5IDEwMDY0NAo+IC0tLSBhL2FyY2gvYXJtNjQvaW5jbHVkZS9hc20vcGd0 YWJsZS5oCj4gKysrIGIvYXJjaC9hcm02NC9pbmNsdWRlL2FzbS9wZ3RhYmxlLmgKPiBAQCAtOTk5 LDIzICs5OTksMTMgQEAgc3RhdGljIGlubGluZSB2b2lkIHVwZGF0ZV9tbXVfY2FjaGUoc3RydWN0 IHZtX2FyZWFfc3RydWN0ICp2bWEsCj4gICAqIHBhZ2UgYWZ0ZXIgZm9yaygpICsgQ29XIGZvciBw Zm4gbWFwcGluZ3MuIFdlIGRvbid0IGFsd2F5cyBoYXZlIGEKPiAgICogaGFyZHdhcmUtbWFuYWdl ZCBhY2Nlc3MgZmxhZyBvbiBhcm02NC4KPiAgICovCj4gLXN0YXRpYyBpbmxpbmUgYm9vbCBhcmNo X2ZhdWx0c19vbl9vbGRfcHRlKHZvaWQpCj4gLXsKPiAtICAgICAgIFdBUk5fT04ocHJlZW1wdGli bGUoKSk7Cj4gLQo+IC0gICAgICAgcmV0dXJuICFjcHVfaGFzX2h3X2FmKCk7Cj4gLX0KPiAtI2Rl ZmluZSBhcmNoX2ZhdWx0c19vbl9vbGRfcHRlICAgICAgICAgYXJjaF9mYXVsdHNfb25fb2xkX3B0 ZQo+ICsjZGVmaW5lIGFyY2hfaGFzX2h3X3B0ZV95b3VuZyAgICAgICAgICBjcHVfaGFzX2h3X2Fm Cj4KPiAgLyoKPiAgICogRXhwZXJpbWVudGFsbHksIGl0J3MgY2hlYXAgdG8gc2V0IHRoZSBhY2Nl c3MgZmxhZyBpbiBoYXJkd2FyZSBhbmQgd2UKPiAgICogYmVuZWZpdCBmcm9tIHByZWZhdWx0aW5n IG1hcHBpbmdzIGFzICdvbGQnIHRvIHN0YXJ0IHdpdGguCj4gICAqLwo+IC1zdGF0aWMgaW5saW5l IGJvb2wgYXJjaF93YW50c19vbGRfcHJlZmF1bHRlZF9wdGUodm9pZCkKPiAtewo+IC0gICAgICAg cmV0dXJuICFhcmNoX2ZhdWx0c19vbl9vbGRfcHRlKCk7Cj4gLX0KPiAtI2RlZmluZSBhcmNoX3dh bnRzX29sZF9wcmVmYXVsdGVkX3B0ZSAgYXJjaF93YW50c19vbGRfcHJlZmF1bHRlZF9wdGUKPiAr I2RlZmluZSBhcmNoX3dhbnRzX29sZF9wcmVmYXVsdGVkX3B0ZSAgY3B1X2hhc19od19hZgo+Cj4g IHN0YXRpYyBpbmxpbmUgcGdwcm90X3QgYXJjaF9maWx0ZXJfcGdwcm90KHBncHJvdF90IHByb3Qp Cj4gIHsKPiBkaWZmIC0tZ2l0IGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oIGIvYXJj aC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCj4gaW5kZXggOGE5NDMyZmIzODAyLi42MGI2Y2U0 NWMyZTMgMTAwNjQ0Cj4gLS0tIGEvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCj4gKysr IGIvYXJjaC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCj4gQEAgLTE0MjMsMTAgKzE0MjMsMTAg QEAgc3RhdGljIGlubGluZSBib29sIGFyY2hfaGFzX3Bmbl9tb2RpZnlfY2hlY2sodm9pZCkKPiAg ICAgICAgIHJldHVybiBib290X2NwdV9oYXNfYnVnKFg4Nl9CVUdfTDFURik7Cj4gIH0KPgo+IC0j ZGVmaW5lIGFyY2hfZmF1bHRzX29uX29sZF9wdGUgYXJjaF9mYXVsdHNfb25fb2xkX3B0ZQo+IC1z dGF0aWMgaW5saW5lIGJvb2wgYXJjaF9mYXVsdHNfb25fb2xkX3B0ZSh2b2lkKQo+ICsjZGVmaW5l IGFyY2hfaGFzX2h3X3B0ZV95b3VuZyBhcmNoX2hhc19od19wdGVfeW91bmcKPiArc3RhdGljIGlu bGluZSBib29sIGFyY2hfaGFzX2h3X3B0ZV95b3VuZyh2b2lkKQo+ICB7Cj4gLSAgICAgICByZXR1 cm4gZmFsc2U7Cj4gKyAgICAgICByZXR1cm4gdHJ1ZTsKPiAgfQo+Cj4gICNlbmRpZiAvKiBfX0FT U0VNQkxZX18gKi8KPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggYi9pbmNs dWRlL2xpbnV4L3BndGFibGUuaAo+IGluZGV4IGY0ZjQwNzdiOTdhYS4uNzlmNjRkY2ZmMDdkIDEw MDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCj4gKysrIGIvaW5jbHVkZS9saW51 eC9wZ3RhYmxlLmgKPiBAQCAtMjU5LDYgKzI1OSwxOSBAQCBzdGF0aWMgaW5saW5lIGludCBwbWRw X2NsZWFyX2ZsdXNoX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAo+ICAjZW5kaWYg LyogQ09ORklHX1RSQU5TUEFSRU5UX0hVR0VQQUdFICovCj4gICNlbmRpZgo+Cj4gKyNpZm5kZWYg YXJjaF9oYXNfaHdfcHRlX3lvdW5nCj4gKy8qCj4gKyAqIFJldHVybiB3aGV0aGVyIHRoZSBhY2Nl c3NlZCBiaXQgaXMgc3VwcG9ydGVkIG9uIHRoZSBsb2NhbCBDUFUuCj4gKyAqCj4gKyAqIFRoaXMg c3R1YiBhc3N1bWVzIGFjY2Vzc2luZyB0aHJvdWdoIGFuIG9sZCBQVEUgdHJpZ2dlcnMgYSBwYWdl IGZhdWx0Lgo+ICsgKiBBcmNoaXRlY3R1cmVzIHRoYXQgYXV0b21hdGljYWxseSBzZXQgdGhlIGFj Y2VzcyBiaXQgc2hvdWxkIG92ZXJ3cml0ZSBpdC4KPiArICovCj4gK3N0YXRpYyBpbmxpbmUgYm9v bCBhcmNoX2hhc19od19wdGVfeW91bmcodm9pZCkKPiArewo+ICsgICAgICAgcmV0dXJuIGZhbHNl Owo+ICt9Cj4gKyNlbmRpZgo+ICsKPiAgI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSCj4g IHN0YXRpYyBpbmxpbmUgdm9pZCBwdGVwX2NsZWFyKHN0cnVjdCBtbV9zdHJ1Y3QgKm1tLCB1bnNp Z25lZCBsb25nIGFkZHIsCj4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgcHRlX3QgKnB0 ZXApCj4gZGlmZiAtLWdpdCBhL21tL21lbW9yeS5jIGIvbW0vbWVtb3J5LmMKPiBpbmRleCBjMTI1 YzQ5Njk5MTMuLmE3Mzc5MTk2YTQ3ZSAxMDA2NDQKPiAtLS0gYS9tbS9tZW1vcnkuYwo+ICsrKyBi L21tL21lbW9yeS5jCj4gQEAgLTEyMiwxOCArMTIyLDYgQEAgaW50IHJhbmRvbWl6ZV92YV9zcGFj ZSBfX3JlYWRfbW9zdGx5ID0KPiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgMjsKPiAgI2VuZGlmCj4KPiAtI2lmbmRlZiBhcmNoX2ZhdWx0c19vbl9vbGRfcHRlCj4gLXN0 YXRpYyBpbmxpbmUgYm9vbCBhcmNoX2ZhdWx0c19vbl9vbGRfcHRlKHZvaWQpCj4gLXsKPiAtICAg ICAgIC8qCj4gLSAgICAgICAgKiBUaG9zZSBhcmNoZXMgd2hpY2ggZG9uJ3QgaGF2ZSBodyBhY2Nl c3MgZmxhZyBmZWF0dXJlIG5lZWQgdG8KPiAtICAgICAgICAqIGltcGxlbWVudCB0aGVpciBvd24g aGVscGVyLiBCeSBkZWZhdWx0LCAidHJ1ZSIgbWVhbnMgcGFnZWZhdWx0Cj4gLSAgICAgICAgKiB3 aWxsIGJlIGhpdCBvbiBvbGQgcHRlLgo+IC0gICAgICAgICovCj4gLSAgICAgICByZXR1cm4gdHJ1 ZTsKPiAtfQo+IC0jZW5kaWYKPiAtCj4gICNpZm5kZWYgYXJjaF93YW50c19vbGRfcHJlZmF1bHRl ZF9wdGUKPiAgc3RhdGljIGlubGluZSBib29sIGFyY2hfd2FudHNfb2xkX3ByZWZhdWx0ZWRfcHRl KHZvaWQpCj4gIHsKPiBAQCAtMjc3OCw3ICsyNzY2LDcgQEAgc3RhdGljIGlubGluZSBib29sIGNv d191c2VyX3BhZ2Uoc3RydWN0IHBhZ2UgKmRzdCwgc3RydWN0IHBhZ2UgKnNyYywKPiAgICAgICAg ICAqIE9uIGFyY2hpdGVjdHVyZXMgd2l0aCBzb2Z0d2FyZSAiYWNjZXNzZWQiIGJpdHMsIHdlIHdv dWxkCj4gICAgICAgICAgKiB0YWtlIGEgZG91YmxlIHBhZ2UgZmF1bHQsIHNvIG1hcmsgaXQgYWNj ZXNzZWQgaGVyZS4KPiAgICAgICAgICAqLwo+IC0gICAgICAgaWYgKGFyY2hfZmF1bHRzX29uX29s ZF9wdGUoKSAmJiAhcHRlX3lvdW5nKHZtZi0+b3JpZ19wdGUpKSB7Cj4gKyAgICAgICBpZiAoIWFy Y2hfaGFzX2h3X3B0ZV95b3VuZygpICYmICFwdGVfeW91bmcodm1mLT5vcmlnX3B0ZSkpIHsKPiAg ICAgICAgICAgICAgICAgcHRlX3QgZW50cnk7Cj4KPiAgICAgICAgICAgICAgICAgdm1mLT5wdGUg PSBwdGVfb2Zmc2V0X21hcF9sb2NrKG1tLCB2bWYtPnBtZCwgYWRkciwgJnZtZi0+cHRsKTsKPiAt LQo+IDIuMzUuMS42MTYuZzBiZGNiYjQ0NjQtZ29vZwo+CgpUaGFua3MKQmFycnkKCl9fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fCmxpbnV4LWFybS1rZXJuZWwg bWFpbGluZyBsaXN0CmxpbnV4LWFybS1rZXJuZWxAbGlzdHMuaW5mcmFkZWFkLm9yZwpodHRwOi8v bGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LWFybS1rZXJuZWwK