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 DA947C433FE for ; Wed, 18 May 2022 01:47:09 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S233843AbiERBrI (ORCPT ); Tue, 17 May 2022 21:47:08 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:56102 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233790AbiERBq7 (ORCPT ); Tue, 17 May 2022 21:46:59 -0400 Received: from mail-yb1-xb49.google.com (mail-yb1-xb49.google.com [IPv6:2607:f8b0:4864:20::b49]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6AEEA369F6 for ; Tue, 17 May 2022 18:46:58 -0700 (PDT) Received: by mail-yb1-xb49.google.com with SMTP id s196-20020a252ccd000000b0064ea2e6bcb7so229133ybs.3 for ; Tue, 17 May 2022 18:46:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=1bKeqo1zCElFP+SckxGjo2derYSk4l4pfi9HINvqfq4=; b=HsLFhyzjsAQkrYPW7tweXLviM2ac4Z/u86RJZLb+b4+uKw9PjWuLuZ/poZpOBXlJ4A EnLzqKLUp8mfbTC3uzZ35oFke3PMrffiZDsnYY+QZqBtNwEhl1uy2E0bpFXnluoh7L67 vklNO5RUH9u2/rP4//lRvouGI3jWzLqmYcmMENQfHoNSFkIu+P5F6Na9vhUAUVt2vqL9 PX1oYXdcS4oygIzDn7r9TSwLhjBQH3HDYzL2D6tZ09CiUA0tGd4Ed4tS7nYHF37XYXVR 2amql6QycMPOP1s7d34tUB6/TFPSvHk6mK85S15EuwCH/j0UXE6zAFdq4orvDLbO5AnQ 5JZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=1bKeqo1zCElFP+SckxGjo2derYSk4l4pfi9HINvqfq4=; b=mo8RJBPjH+cp5+jPwh98oAaStWsyChWHd9nH1BaAs+9lPSk7VOB6GrXU5qZAahMpZa 0PesaFfqwWlIJnzqirWvXCu9bH39G4bZGbIdYCJy+o5RLRfVp45jFEGV4KJsZpAlisld f2aCgv/p9bLOeVUZaOOt4/nx0zA4AUrA4UXWKVJ2FsyNHTK59/PDAMK7v6BAwrbGBnMK DBhWBG39brkowTH7Sm3GrWji9u1NpGmuKHIZcnFU5w7rUG7qfQvCtqPFR6V0Oo9IwSZ5 e/OrCGWEyw1kODXBGlsr+IlYrfmg1FaJOAZuM7H6mbg5DCiDikRrmo0clUu9gmrZS+q2 y9UA== X-Gm-Message-State: AOAM5315xG7vfZaMO5x9mH7s5NERDuojBaQnenDEpAqmRBcrCnOhfEsD ViuBi6Sv9AWrfaliYqheBeO2A5GJkto= X-Google-Smtp-Source: ABdhPJwoW0FqVmxJqH6MjT8JiYpV8QeLbjHhvuKY/1xTwLhHOPRrNl6S2kOtFNWFNSQfvLVIKwiqOtORNPY= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:f7bc:90c9:d86e:4ea8]) (user=yuzhao job=sendgmr) by 2002:a25:8c87:0:b0:64a:870a:e29d with SMTP id m7-20020a258c87000000b0064a870ae29dmr24844386ybl.596.1652838417591; Tue, 17 May 2022 18:46:57 -0700 (PDT) Date: Tue, 17 May 2022 19:46:21 -0600 In-Reply-To: <20220518014632.922072-1-yuzhao@google.com> Message-Id: <20220518014632.922072-3-yuzhao@google.com> Mime-Version: 1.0 References: <20220518014632.922072-1-yuzhao@google.com> X-Mailer: git-send-email 2.36.0.550.gb090851708-goog Subject: [PATCH v11 02/14] mm: x86: add CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG From: Yu Zhao To: Andrew Morton , linux-mm@kvack.org Cc: Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Johannes Weiner , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Peter Zijlstra , Tejun Heo , Vlastimil Babka , Will Deacon , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org, page-reclaim@google.com, Yu Zhao , Barry Song , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , "=?UTF-8?q?Holger=20Hoffst=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 Some architectures support the accessed bit in non-leaf PMD entries, e.g., x86 sets the accessed bit in a non-leaf PMD entry when using it as part of linear address translation [1]. Page table walkers that clear the accessed bit may use this capability to reduce their search space. Note that: 1. Although an inline function is preferable, this capability is added as a configuration option for consistency with the existing macros. 2. Due to the little interest in other varieties, this capability was only tested on Intel and AMD CPUs. Thanks to the following developers for their efforts [2][3]. Randy Dunlap Stephen Rothwell [1]: Intel 64 and IA-32 Architectures Software Developer's Manual Volume 3 (June 2021), section 4.8 [2] https://lore.kernel.org/r/bfdcc7c8-922f-61a9-aa15-7e7250f04af7@infradea= d.org/ [3] https://lore.kernel.org/r/20220413151513.5a0d7a7e@canb.auug.org.au/ Signed-off-by: Yu Zhao Reviewed-by: Barry Song Acked-by: Brian Geffon Acked-by: Jan Alexander Steffens (heftig) Acked-by: Oleksandr Natalenko Acked-by: Steven Barrett Acked-by: Suleiman Souhlal 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 --- arch/Kconfig | 8 ++++++++ arch/x86/Kconfig | 1 + arch/x86/include/asm/pgtable.h | 3 ++- arch/x86/mm/pgtable.c | 5 ++++- include/linux/pgtable.h | 4 ++-- 5 files changed, 17 insertions(+), 4 deletions(-) diff --git a/arch/Kconfig b/arch/Kconfig index 31c4fdc4a4ba..8a2cb732b09e 100644 --- a/arch/Kconfig +++ b/arch/Kconfig @@ -1376,6 +1376,14 @@ config DYNAMIC_SIGFRAME config HAVE_ARCH_NODE_DEV_GROUP bool =20 +config ARCH_HAS_NONLEAF_PMD_YOUNG + bool + help + Architectures that select this option are capable of setting the + accessed bit in non-leaf PMD entries when using them as part of linear + address translations. Page table walkers that clear the accessed bit + may use this capability to reduce their search space. + source "kernel/gcov/Kconfig" =20 source "scripts/gcc-plugins/Kconfig" diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig index 4bed3abf444d..fce1d9f41cc3 100644 --- a/arch/x86/Kconfig +++ b/arch/x86/Kconfig @@ -86,6 +86,7 @@ config X86 select ARCH_HAS_PMEM_API if X86_64 select ARCH_HAS_PTE_DEVMAP if X86_64 select ARCH_HAS_PTE_SPECIAL + select ARCH_HAS_NONLEAF_PMD_YOUNG if PGTABLE_LEVELS > 2 select ARCH_HAS_UACCESS_FLUSHCACHE if X86_64 select ARCH_HAS_COPY_MC if X86_64 select ARCH_HAS_SET_MEMORY diff --git a/arch/x86/include/asm/pgtable.h b/arch/x86/include/asm/pgtable.= h index 016606a0cf20..9cb3cf4cf6dd 100644 --- a/arch/x86/include/asm/pgtable.h +++ b/arch/x86/include/asm/pgtable.h @@ -820,7 +820,8 @@ static inline unsigned long pmd_page_vaddr(pmd_t pmd) =20 static inline int pmd_bad(pmd_t pmd) { - return (pmd_flags(pmd) & ~_PAGE_USER) !=3D _KERNPG_TABLE; + return (pmd_flags(pmd) & ~(_PAGE_USER | _PAGE_ACCESSED)) !=3D + (_KERNPG_TABLE & ~_PAGE_ACCESSED); } =20 static inline unsigned long pages_to_mb(unsigned long npg) diff --git a/arch/x86/mm/pgtable.c b/arch/x86/mm/pgtable.c index 3481b35cb4ec..a224193d84bf 100644 --- a/arch/x86/mm/pgtable.c +++ b/arch/x86/mm/pgtable.c @@ -550,7 +550,7 @@ int ptep_test_and_clear_young(struct vm_area_struct *vm= a, return ret; } =20 -#ifdef CONFIG_TRANSPARENT_HUGEPAGE +#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_ARCH_HAS_NONLEA= F_PMD_YOUNG) int pmdp_test_and_clear_young(struct vm_area_struct *vma, unsigned long addr, pmd_t *pmdp) { @@ -562,6 +562,9 @@ int pmdp_test_and_clear_young(struct vm_area_struct *vm= a, =20 return ret; } +#endif + +#ifdef CONFIG_TRANSPARENT_HUGEPAGE int pudp_test_and_clear_young(struct vm_area_struct *vma, unsigned long addr, pud_t *pudp) { diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h index 79f64dcff07d..743e7fc4afda 100644 --- a/include/linux/pgtable.h +++ b/include/linux/pgtable.h @@ -212,7 +212,7 @@ static inline int ptep_test_and_clear_young(struct vm_a= rea_struct *vma, #endif =20 #ifndef __HAVE_ARCH_PMDP_TEST_AND_CLEAR_YOUNG -#ifdef CONFIG_TRANSPARENT_HUGEPAGE +#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_ARCH_HAS_NONLEA= F_PMD_YOUNG) static inline int pmdp_test_and_clear_young(struct vm_area_struct *vma, unsigned long address, pmd_t *pmdp) @@ -233,7 +233,7 @@ static inline int pmdp_test_and_clear_young(struct vm_a= rea_struct *vma, BUILD_BUG(); return 0; } -#endif /* CONFIG_TRANSPARENT_HUGEPAGE */ +#endif /* CONFIG_TRANSPARENT_HUGEPAGE || CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG= */ #endif =20 #ifndef __HAVE_ARCH_PTEP_CLEAR_YOUNG_FLUSH --=20 2.36.0.550.gb090851708-goog 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 71F7CC433EF for ; Wed, 18 May 2022 03:01:46 +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:From:Subject:References: Mime-Version:Message-Id:In-Reply-To:Date:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=PPYeM0LB8eCvCXB46ExwyqGmDXCL6smzhXIRFwmYs/s=; b=d5BVRVtYHKR4BJn4hN4COis5u5 NHTGr+OnBJANZeoKXhUy6WyJKvhtPnhxgypf+1AnASexkzGcpTy2ogiH0j4qX+Nx6Sku6I66Z3vUI jttE0073+iXwxLMiq2hN7oV/numYeqob5XEdcm9NYehsOMUVhTpedaVtaARgKn4nRU18kE0+c710Q A8O7eGUQxeyb8o5CrB7OY5FgC39VFShv+cqwIBkS8S99I1eUmd18azfIsaLpBg7/8zrmtnqQGYDnw /S2Rma1p9TSd/2ErKXsM36zzdFMX0MxqqnG3XxXS+BuAixSQT5I3DnyVjE1iQRJJcQipmUib6OQpy Cp9QtXaA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr9vn-00Gm21-AQ; Wed, 18 May 2022 03:00:59 +0000 Received: from mail-yb1-xb4a.google.com ([2607:f8b0:4864:20::b4a]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1nr8mD-00Gd5A-Dv for linux-arm-kernel@lists.infradead.org; Wed, 18 May 2022 01:47:06 +0000 Received: by mail-yb1-xb4a.google.com with SMTP id m136-20020a25268e000000b0064b233e03d1so668169ybm.14 for ; Tue, 17 May 2022 18:46:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20210112; h=date:in-reply-to:message-id:mime-version:references:subject:from:to :cc:content-transfer-encoding; bh=1bKeqo1zCElFP+SckxGjo2derYSk4l4pfi9HINvqfq4=; b=HsLFhyzjsAQkrYPW7tweXLviM2ac4Z/u86RJZLb+b4+uKw9PjWuLuZ/poZpOBXlJ4A EnLzqKLUp8mfbTC3uzZ35oFke3PMrffiZDsnYY+QZqBtNwEhl1uy2E0bpFXnluoh7L67 vklNO5RUH9u2/rP4//lRvouGI3jWzLqmYcmMENQfHoNSFkIu+P5F6Na9vhUAUVt2vqL9 PX1oYXdcS4oygIzDn7r9TSwLhjBQH3HDYzL2D6tZ09CiUA0tGd4Ed4tS7nYHF37XYXVR 2amql6QycMPOP1s7d34tUB6/TFPSvHk6mK85S15EuwCH/j0UXE6zAFdq4orvDLbO5AnQ 5JZg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=x-gm-message-state:date:in-reply-to:message-id:mime-version :references:subject:from:to:cc:content-transfer-encoding; bh=1bKeqo1zCElFP+SckxGjo2derYSk4l4pfi9HINvqfq4=; b=F8XaBUJzduPg/3MkhnVm6BvHeNlkmmKNYO3lQkzdLVsIjta9sv+ZHxYeVb0F1bBsne tFkBQZcwxQ9Jl1zz2VlAxFwwklbWWShucfSQ9MO6/DaUgnO+PAh6J1krGUalWkwA+Sl9 VIFr14u6xyuaCOAr7ibUFJc1WVrZ1vK2Y0ao7rqiQUVe7ijiZpvw8hIjtdhCpXRqwqAQ Pyo2CzxHzeEs0o2jl37jtenrGeyqapWndjbh96AqIDN8Bx+FuigCYYeWanDzZdLtDN3D 4Hx1T2v66VebZiy0Hd3JQ2owuIlyu03exb3ECbD8kV7VY7QptYtSzNcrhdSQe7LkRAdQ 6gHQ== X-Gm-Message-State: AOAM5309dF1njNePpcwz4onC6LHg5pzED/lYJOrn2SxrU7MvB5+I2D6R sk/YxQ1mg1JisYVOMaot831gc9HkBiM= X-Google-Smtp-Source: ABdhPJwoW0FqVmxJqH6MjT8JiYpV8QeLbjHhvuKY/1xTwLhHOPRrNl6S2kOtFNWFNSQfvLVIKwiqOtORNPY= X-Received: from yuzhao.bld.corp.google.com ([2620:15c:183:200:f7bc:90c9:d86e:4ea8]) (user=yuzhao job=sendgmr) by 2002:a25:8c87:0:b0:64a:870a:e29d with SMTP id m7-20020a258c87000000b0064a870ae29dmr24844386ybl.596.1652838417591; Tue, 17 May 2022 18:46:57 -0700 (PDT) Date: Tue, 17 May 2022 19:46:21 -0600 In-Reply-To: <20220518014632.922072-1-yuzhao@google.com> Message-Id: <20220518014632.922072-3-yuzhao@google.com> Mime-Version: 1.0 References: <20220518014632.922072-1-yuzhao@google.com> X-Mailer: git-send-email 2.36.0.550.gb090851708-goog Subject: [PATCH v11 02/14] mm: x86: add CONFIG_ARCH_HAS_NONLEAF_PMD_YOUNG From: Yu Zhao To: Andrew Morton , linux-mm@kvack.org Cc: Andi Kleen , Aneesh Kumar , Catalin Marinas , Dave Hansen , Hillf Danton , Jens Axboe , Johannes Weiner , Jonathan Corbet , Linus Torvalds , Matthew Wilcox , Mel Gorman , Michael Larabel , Michal Hocko , Mike Rapoport , Peter Zijlstra , Tejun Heo , Vlastimil Babka , Will Deacon , linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, x86@kernel.org, page-reclaim@google.com, Yu Zhao , Barry Song , Brian Geffon , Jan Alexander Steffens , Oleksandr Natalenko , Steven Barrett , Suleiman Souhlal , Daniel Byrne , Donald Carr , "=?UTF-8?q?Holger=20Hoffst=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-20220517_184701_511217_ECFAE777 X-CRM114-Status: GOOD ( 17.63 ) 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 U29tZSBhcmNoaXRlY3R1cmVzIHN1cHBvcnQgdGhlIGFjY2Vzc2VkIGJpdCBpbiBub24tbGVhZiBQ TUQgZW50cmllcywKZS5nLiwgeDg2IHNldHMgdGhlIGFjY2Vzc2VkIGJpdCBpbiBhIG5vbi1sZWFm IFBNRCBlbnRyeSB3aGVuIHVzaW5nIGl0CmFzIHBhcnQgb2YgbGluZWFyIGFkZHJlc3MgdHJhbnNs YXRpb24gWzFdLiBQYWdlIHRhYmxlIHdhbGtlcnMgdGhhdApjbGVhciB0aGUgYWNjZXNzZWQgYml0 IG1heSB1c2UgdGhpcyBjYXBhYmlsaXR5IHRvIHJlZHVjZSB0aGVpciBzZWFyY2gKc3BhY2UuCgpO b3RlIHRoYXQ6CjEuIEFsdGhvdWdoIGFuIGlubGluZSBmdW5jdGlvbiBpcyBwcmVmZXJhYmxlLCB0 aGlzIGNhcGFiaWxpdHkgaXMgYWRkZWQKICAgYXMgYSBjb25maWd1cmF0aW9uIG9wdGlvbiBmb3Ig Y29uc2lzdGVuY3kgd2l0aCB0aGUgZXhpc3RpbmcgbWFjcm9zLgoyLiBEdWUgdG8gdGhlIGxpdHRs ZSBpbnRlcmVzdCBpbiBvdGhlciB2YXJpZXRpZXMsIHRoaXMgY2FwYWJpbGl0eSB3YXMKICAgb25s eSB0ZXN0ZWQgb24gSW50ZWwgYW5kIEFNRCBDUFVzLgoKVGhhbmtzIHRvIHRoZSBmb2xsb3dpbmcg ZGV2ZWxvcGVycyBmb3IgdGhlaXIgZWZmb3J0cyBbMl1bM10uCiAgUmFuZHkgRHVubGFwIDxyZHVu bGFwQGluZnJhZGVhZC5vcmc+CiAgU3RlcGhlbiBSb3Rod2VsbCA8c2ZyQGNhbmIuYXV1Zy5vcmcu YXU+CgpbMV06IEludGVsIDY0IGFuZCBJQS0zMiBBcmNoaXRlY3R1cmVzIFNvZnR3YXJlIERldmVs b3BlcidzIE1hbnVhbAogICAgIFZvbHVtZSAzIChKdW5lIDIwMjEpLCBzZWN0aW9uIDQuOApbMl0g aHR0cHM6Ly9sb3JlLmtlcm5lbC5vcmcvci9iZmRjYzdjOC05MjJmLTYxYTktYWExNS03ZTcyNTBm MDRhZjdAaW5mcmFkZWFkLm9yZy8KWzNdIGh0dHBzOi8vbG9yZS5rZXJuZWwub3JnL3IvMjAyMjA0 MTMxNTE1MTMuNWEwZDdhN2VAY2FuYi5hdXVnLm9yZy5hdS8KClNpZ25lZC1vZmYtYnk6IFl1IFpo YW8gPHl1emhhb0Bnb29nbGUuY29tPgpSZXZpZXdlZC1ieTogQmFycnkgU29uZyA8YmFvaHVhQGtl cm5lbC5vcmc+CkFja2VkLWJ5OiBCcmlhbiBHZWZmb24gPGJnZWZmb25AZ29vZ2xlLmNvbT4KQWNr ZWQtYnk6IEphbiBBbGV4YW5kZXIgU3RlZmZlbnMgKGhlZnRpZykgPGhlZnRpZ0BhcmNobGludXgu b3JnPgpBY2tlZC1ieTogT2xla3NhbmRyIE5hdGFsZW5rbyA8b2xla3NhbmRyQG5hdGFsZW5rby5u YW1lPgpBY2tlZC1ieTogU3RldmVuIEJhcnJldHQgPHN0ZXZlbkBsaXF1b3JpeC5uZXQ+CkFja2Vk LWJ5OiBTdWxlaW1hbiBTb3VobGFsIDxzdWxlaW1hbkBnb29nbGUuY29tPgpUZXN0ZWQtYnk6IERh bmllbCBCeXJuZSA8ZGpieXJuZUBtdHUuZWR1PgpUZXN0ZWQtYnk6IERvbmFsZCBDYXJyIDxkQGNo YW9zLXJlaW5zLmNvbT4KVGVzdGVkLWJ5OiBIb2xnZXIgSG9mZnN0w6R0dGUgPGhvbGdlckBhcHBs aWVkLWFzeW5jaHJvbnkuY29tPgpUZXN0ZWQtYnk6IEtvbnN0YW50aW4gS2hhcmxhbW92IDxIaS1B bmdlbEB5YW5kZXgucnU+ClRlc3RlZC1ieTogU2h1YW5nIFpoYWkgPHN6aGFpMkBjcy5yb2NoZXN0 ZXIuZWR1PgpUZXN0ZWQtYnk6IFNvZmlhIFRyaW5oIDxzb2ZpYS50cmluaEBlZGkud29ya3M+ClRl c3RlZC1ieTogVmFpYmhhdiBKYWluIDx2YWliaGF2QGxpbnV4LmlibS5jb20+Ci0tLQogYXJjaC9L Y29uZmlnICAgICAgICAgICAgICAgICAgIHwgOCArKysrKysrKwogYXJjaC94ODYvS2NvbmZpZyAg ICAgICAgICAgICAgIHwgMSArCiBhcmNoL3g4Ni9pbmNsdWRlL2FzbS9wZ3RhYmxlLmggfCAzICsr LQogYXJjaC94ODYvbW0vcGd0YWJsZS5jICAgICAgICAgIHwgNSArKysrLQogaW5jbHVkZS9saW51 eC9wZ3RhYmxlLmggICAgICAgIHwgNCArKy0tCiA1IGZpbGVzIGNoYW5nZWQsIDE3IGluc2VydGlv bnMoKyksIDQgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvYXJjaC9LY29uZmlnIGIvYXJjaC9L Y29uZmlnCmluZGV4IDMxYzRmZGM0YTRiYS4uOGEyY2I3MzJiMDllIDEwMDY0NAotLS0gYS9hcmNo L0tjb25maWcKKysrIGIvYXJjaC9LY29uZmlnCkBAIC0xMzc2LDYgKzEzNzYsMTQgQEAgY29uZmln IERZTkFNSUNfU0lHRlJBTUUKIGNvbmZpZyBIQVZFX0FSQ0hfTk9ERV9ERVZfR1JPVVAKIAlib29s CiAKK2NvbmZpZyBBUkNIX0hBU19OT05MRUFGX1BNRF9ZT1VORworCWJvb2wKKwloZWxwCisJICBB cmNoaXRlY3R1cmVzIHRoYXQgc2VsZWN0IHRoaXMgb3B0aW9uIGFyZSBjYXBhYmxlIG9mIHNldHRp bmcgdGhlCisJICBhY2Nlc3NlZCBiaXQgaW4gbm9uLWxlYWYgUE1EIGVudHJpZXMgd2hlbiB1c2lu ZyB0aGVtIGFzIHBhcnQgb2YgbGluZWFyCisJICBhZGRyZXNzIHRyYW5zbGF0aW9ucy4gUGFnZSB0 YWJsZSB3YWxrZXJzIHRoYXQgY2xlYXIgdGhlIGFjY2Vzc2VkIGJpdAorCSAgbWF5IHVzZSB0aGlz IGNhcGFiaWxpdHkgdG8gcmVkdWNlIHRoZWlyIHNlYXJjaCBzcGFjZS4KKwogc291cmNlICJrZXJu ZWwvZ2Nvdi9LY29uZmlnIgogCiBzb3VyY2UgInNjcmlwdHMvZ2NjLXBsdWdpbnMvS2NvbmZpZyIK ZGlmZiAtLWdpdCBhL2FyY2gveDg2L0tjb25maWcgYi9hcmNoL3g4Ni9LY29uZmlnCmluZGV4IDRi ZWQzYWJmNDQ0ZC4uZmNlMWQ5ZjQxY2MzIDEwMDY0NAotLS0gYS9hcmNoL3g4Ni9LY29uZmlnCisr KyBiL2FyY2gveDg2L0tjb25maWcKQEAgLTg2LDYgKzg2LDcgQEAgY29uZmlnIFg4NgogCXNlbGVj dCBBUkNIX0hBU19QTUVNX0FQSQkJaWYgWDg2XzY0CiAJc2VsZWN0IEFSQ0hfSEFTX1BURV9ERVZN QVAJCWlmIFg4Nl82NAogCXNlbGVjdCBBUkNIX0hBU19QVEVfU1BFQ0lBTAorCXNlbGVjdCBBUkNI X0hBU19OT05MRUFGX1BNRF9ZT1VORwlpZiBQR1RBQkxFX0xFVkVMUyA+IDIKIAlzZWxlY3QgQVJD SF9IQVNfVUFDQ0VTU19GTFVTSENBQ0hFCWlmIFg4Nl82NAogCXNlbGVjdCBBUkNIX0hBU19DT1BZ X01DCQkJaWYgWDg2XzY0CiAJc2VsZWN0IEFSQ0hfSEFTX1NFVF9NRU1PUlkKZGlmZiAtLWdpdCBh L2FyY2gveDg2L2luY2x1ZGUvYXNtL3BndGFibGUuaCBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Bn dGFibGUuaAppbmRleCAwMTY2MDZhMGNmMjAuLjljYjNjZjRjZjZkZCAxMDA2NDQKLS0tIGEvYXJj aC94ODYvaW5jbHVkZS9hc20vcGd0YWJsZS5oCisrKyBiL2FyY2gveDg2L2luY2x1ZGUvYXNtL3Bn dGFibGUuaApAQCAtODIwLDcgKzgyMCw4IEBAIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBw bWRfcGFnZV92YWRkcihwbWRfdCBwbWQpCiAKIHN0YXRpYyBpbmxpbmUgaW50IHBtZF9iYWQocG1k X3QgcG1kKQogewotCXJldHVybiAocG1kX2ZsYWdzKHBtZCkgJiB+X1BBR0VfVVNFUikgIT0gX0tF Uk5QR19UQUJMRTsKKwlyZXR1cm4gKHBtZF9mbGFncyhwbWQpICYgfihfUEFHRV9VU0VSIHwgX1BB R0VfQUNDRVNTRUQpKSAhPQorCSAgICAgICAoX0tFUk5QR19UQUJMRSAmIH5fUEFHRV9BQ0NFU1NF RCk7CiB9CiAKIHN0YXRpYyBpbmxpbmUgdW5zaWduZWQgbG9uZyBwYWdlc190b19tYih1bnNpZ25l ZCBsb25nIG5wZykKZGlmZiAtLWdpdCBhL2FyY2gveDg2L21tL3BndGFibGUuYyBiL2FyY2gveDg2 L21tL3BndGFibGUuYwppbmRleCAzNDgxYjM1Y2I0ZWMuLmEyMjQxOTNkODRiZiAxMDA2NDQKLS0t IGEvYXJjaC94ODYvbW0vcGd0YWJsZS5jCisrKyBiL2FyY2gveDg2L21tL3BndGFibGUuYwpAQCAt NTUwLDcgKzU1MCw3IEBAIGludCBwdGVwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9h cmVhX3N0cnVjdCAqdm1hLAogCXJldHVybiByZXQ7CiB9CiAKLSNpZmRlZiBDT05GSUdfVFJBTlNQ QVJFTlRfSFVHRVBBR0UKKyNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkg fHwgZGVmaW5lZChDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkcpCiBpbnQgcG1kcF90 ZXN0X2FuZF9jbGVhcl95b3VuZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAkJCSAgICAg IHVuc2lnbmVkIGxvbmcgYWRkciwgcG1kX3QgKnBtZHApCiB7CkBAIC01NjIsNiArNTYyLDkgQEAg aW50IHBtZHBfdGVzdF9hbmRfY2xlYXJfeW91bmcoc3RydWN0IHZtX2FyZWFfc3RydWN0ICp2bWEs CiAKIAlyZXR1cm4gcmV0OwogfQorI2VuZGlmCisKKyNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRf SFVHRVBBR0UKIGludCBwdWRwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0 cnVjdCAqdm1hLAogCQkJICAgICAgdW5zaWduZWQgbG9uZyBhZGRyLCBwdWRfdCAqcHVkcCkKIHsK ZGlmZiAtLWdpdCBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oIGIvaW5jbHVkZS9saW51eC9wZ3Rh YmxlLmgKaW5kZXggNzlmNjRkY2ZmMDdkLi43NDNlN2ZjNGFmZGEgMTAwNjQ0Ci0tLSBhL2luY2x1 ZGUvbGludXgvcGd0YWJsZS5oCisrKyBiL2luY2x1ZGUvbGludXgvcGd0YWJsZS5oCkBAIC0yMTIs NyArMjEyLDcgQEAgc3RhdGljIGlubGluZSBpbnQgcHRlcF90ZXN0X2FuZF9jbGVhcl95b3VuZyhz dHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKICNlbmRpZgogCiAjaWZuZGVmIF9fSEFWRV9BUkNI X1BNRFBfVEVTVF9BTkRfQ0xFQVJfWU9VTkcKLSNpZmRlZiBDT05GSUdfVFJBTlNQQVJFTlRfSFVH RVBBR0UKKyNpZiBkZWZpbmVkKENPTkZJR19UUkFOU1BBUkVOVF9IVUdFUEFHRSkgfHwgZGVmaW5l ZChDT05GSUdfQVJDSF9IQVNfTk9OTEVBRl9QTURfWU9VTkcpCiBzdGF0aWMgaW5saW5lIGludCBw bWRwX3Rlc3RfYW5kX2NsZWFyX3lvdW5nKHN0cnVjdCB2bV9hcmVhX3N0cnVjdCAqdm1hLAogCQkJ CQkgICAgdW5zaWduZWQgbG9uZyBhZGRyZXNzLAogCQkJCQkgICAgcG1kX3QgKnBtZHApCkBAIC0y MzMsNyArMjMzLDcgQEAgc3RhdGljIGlubGluZSBpbnQgcG1kcF90ZXN0X2FuZF9jbGVhcl95b3Vu ZyhzdHJ1Y3Qgdm1fYXJlYV9zdHJ1Y3QgKnZtYSwKIAlCVUlMRF9CVUcoKTsKIAlyZXR1cm4gMDsK IH0KLSNlbmRpZiAvKiBDT05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgKi8KKyNlbmRpZiAvKiBD T05GSUdfVFJBTlNQQVJFTlRfSFVHRVBBR0UgfHwgQ09ORklHX0FSQ0hfSEFTX05PTkxFQUZfUE1E X1lPVU5HICovCiAjZW5kaWYKIAogI2lmbmRlZiBfX0hBVkVfQVJDSF9QVEVQX0NMRUFSX1lPVU5H X0ZMVVNICi0tIAoyLjM2LjAuNTUwLmdiMDkwODUxNzA4LWdvb2cKCgpfX19fX19fX19fX19fX19f X19fX19fX19fX19fX19fX19fX19fX19fX19fX19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcg bGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3RzLmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmlu ZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5mby9saW51eC1hcm0ta2VybmVsCg==