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 X-Spam-Level: X-Spam-Status: No, score=-12.9 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id EFA63C433E2 for ; Tue, 8 Sep 2020 05:19:54 +0000 (UTC) Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by mail.kernel.org (Postfix) with ESMTP id C8F2521D20 for ; Tue, 8 Sep 2020 05:19:54 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728589AbgIHFTu (ORCPT ); Tue, 8 Sep 2020 01:19:50 -0400 Received: from pegase1.c-s.fr ([93.17.236.30]:8843 "EHLO pegase1.c-s.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726387AbgIHFTu (ORCPT ); Tue, 8 Sep 2020 01:19:50 -0400 Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4BltkT4qvvz9tyfH; Tue, 8 Sep 2020 07:19:45 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at c-s.fr Received: from pegase1.c-s.fr ([192.168.12.234]) by localhost (pegase1.c-s.fr [192.168.12.234]) (amavisd-new, port 10024) with ESMTP id mF_Z1FlHMh_F; Tue, 8 Sep 2020 07:19:45 +0200 (CEST) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase1.c-s.fr (Postfix) with ESMTP id 4BltkT3c0Rz9tyfG; Tue, 8 Sep 2020 07:19:45 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 48B608B793; Tue, 8 Sep 2020 07:19:46 +0200 (CEST) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id G7-bMta_Fa-y; Tue, 8 Sep 2020 07:19:46 +0200 (CEST) Received: from [192.168.4.90] (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 0B4918B768; Tue, 8 Sep 2020 07:19:44 +0200 (CEST) Subject: Re: [RFC PATCH v2 3/3] mm: make generic pXd_addr_end() macros inline functions To: Gerald Schaefer , Jason Gunthorpe , John Hubbard Cc: Peter Zijlstra , Dave Hansen , linux-mm , Paul Mackerras , linux-sparc , Alexander Gordeev , Claudio Imbrenda , Will Deacon , linux-arch , linux-s390 , Vasily Gorbik , Richard Weinberger , linux-x86 , Russell King , Christian Borntraeger , Ingo Molnar , Catalin Marinas , Andrey Ryabinin , Heiko Carstens , Arnd Bergmann , Jeff Dike , linux-um , Borislav Petkov , Andy Lutomirski , Thomas Gleixner , linux-arm , linux-power , LKML , Andrew Morton , Linus Torvalds , Mike Rapoport References: <20200907180058.64880-1-gerald.schaefer@linux.ibm.com> <20200907180058.64880-4-gerald.schaefer@linux.ibm.com> From: Christophe Leroy Message-ID: <4c101685-5b29-dace-9dd2-b6f0ae193a9c@csgroup.eu> Date: Tue, 8 Sep 2020 07:19:38 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 MIME-Version: 1.0 In-Reply-To: <20200907180058.64880-4-gerald.schaefer@linux.ibm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: fr Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Le 07/09/2020 à 20:00, Gerald Schaefer a écrit : > From: Alexander Gordeev > > Since pXd_addr_end() macros take pXd page-table entry as a > parameter it makes sense to check the entry type on compile. > Even though most archs do not make use of page-table entries > in pXd_addr_end() calls, checking the type in traversal code > paths could help to avoid subtle bugs. > > Signed-off-by: Alexander Gordeev > Signed-off-by: Gerald Schaefer > --- > include/linux/pgtable.h | 36 ++++++++++++++++++++---------------- > 1 file changed, 20 insertions(+), 16 deletions(-) > > diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h > index 67ebc22cf83d..d9e7d16c2263 100644 > --- a/include/linux/pgtable.h > +++ b/include/linux/pgtable.h > @@ -656,31 +656,35 @@ static inline int arch_unmap_one(struct mm_struct *mm, > */ > > #ifndef pgd_addr_end > -#define pgd_addr_end(pgd, addr, end) \ > -({ unsigned long __boundary = ((addr) + PGDIR_SIZE) & PGDIR_MASK; \ > - (__boundary - 1 < (end) - 1)? __boundary: (end); \ > -}) > +#define pgd_addr_end pgd_addr_end I think that #define is pointless, usually there is no such #define for the default case. > +static inline unsigned long pgd_addr_end(pgd_t pgd, unsigned long addr, unsigned long end) > +{ unsigned long __boundary = (addr + PGDIR_SIZE) & PGDIR_MASK; > + return (__boundary - 1 < end - 1) ? __boundary : end; > +} Please use the standard layout, ie entry { and exit } alone on their line, and space between local vars declaration and the rest. Also remove the leading __ in front of var names as it's not needed once it is not macros anymore. f_name() { some_local_var; do_something(); } > #endif > > #ifndef p4d_addr_end > -#define p4d_addr_end(p4d, addr, end) \ > -({ unsigned long __boundary = ((addr) + P4D_SIZE) & P4D_MASK; \ > - (__boundary - 1 < (end) - 1)? __boundary: (end); \ > -}) > +#define p4d_addr_end p4d_addr_end > +static inline unsigned long p4d_addr_end(p4d_t p4d, unsigned long addr, unsigned long end) > +{ unsigned long __boundary = (addr + P4D_SIZE) & P4D_MASK; > + return (__boundary - 1 < end - 1) ? __boundary : end; > +} > #endif > > #ifndef pud_addr_end > -#define pud_addr_end(pud, addr, end) \ > -({ unsigned long __boundary = ((addr) + PUD_SIZE) & PUD_MASK; \ > - (__boundary - 1 < (end) - 1)? __boundary: (end); \ > -}) > +#define pud_addr_end pud_addr_end > +static inline unsigned long pud_addr_end(pud_t pud, unsigned long addr, unsigned long end) > +{ unsigned long __boundary = (addr + PUD_SIZE) & PUD_MASK; > + return (__boundary - 1 < end - 1) ? __boundary : end; > +} > #endif > > #ifndef pmd_addr_end > -#define pmd_addr_end(pmd, addr, end) \ > -({ unsigned long __boundary = ((addr) + PMD_SIZE) & PMD_MASK; \ > - (__boundary - 1 < (end) - 1)? __boundary: (end); \ > -}) > +#define pmd_addr_end pmd_addr_end > +static inline unsigned long pmd_addr_end(pmd_t pmd, unsigned long addr, unsigned long end) > +{ unsigned long __boundary = (addr + PMD_SIZE) & PMD_MASK; > + return (__boundary - 1 < end - 1) ? __boundary : end; > +} > #endif > > /* > From mboxrd@z Thu Jan 1 00:00:00 1970 From: Christophe Leroy Date: Tue, 08 Sep 2020 05:19:38 +0000 Subject: Re: [RFC PATCH v2 3/3] mm: make generic pXd_addr_end() macros inline functions Message-Id: <4c101685-5b29-dace-9dd2-b6f0ae193a9c@csgroup.eu> List-Id: References: <20200907180058.64880-1-gerald.schaefer@linux.ibm.com> <20200907180058.64880-4-gerald.schaefer@linux.ibm.com> In-Reply-To: <20200907180058.64880-4-gerald.schaefer@linux.ibm.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: 8bit To: Gerald Schaefer , Jason Gunthorpe , John Hubbard Cc: Peter Zijlstra , Dave Hansen , linux-mm , Paul Mackerras , linux-sparc , Alexander Gordeev , Claudio Imbrenda , Will Deacon , linux-arch , linux-s390 , Vasily Gorbik , Richard Weinberger , linux-x86 , Russell King , Christian Borntraeger , Ingo Molnar , Catalin Marinas , Andrey Ryabinin , Heiko Carstens , Arnd Bergmann , Jeff Dike , linux-um , Borislav Petkov , Andy Lutomirski , Thomas Gleixner , linux-arm , linux-power , LKML , Andrew Morton , Linus Torvalds , Mike Rapoport Le 07/09/2020 à 20:00, Gerald Schaefer a écrit : > From: Alexander Gordeev > > Since pXd_addr_end() macros take pXd page-table entry as a > parameter it makes sense to check the entry type on compile. > Even though most archs do not make use of page-table entries > in pXd_addr_end() calls, checking the type in traversal code > paths could help to avoid subtle bugs. > > Signed-off-by: Alexander Gordeev > Signed-off-by: Gerald Schaefer > --- > include/linux/pgtable.h | 36 ++++++++++++++++++++---------------- > 1 file changed, 20 insertions(+), 16 deletions(-) > > diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h > index 67ebc22cf83d..d9e7d16c2263 100644 > --- a/include/linux/pgtable.h > +++ b/include/linux/pgtable.h > @@ -656,31 +656,35 @@ static inline int arch_unmap_one(struct mm_struct *mm, > */ > > #ifndef pgd_addr_end > -#define pgd_addr_end(pgd, addr, end) \ > -({ unsigned long __boundary = ((addr) + PGDIR_SIZE) & PGDIR_MASK; \ > - (__boundary - 1 < (end) - 1)? __boundary: (end); \ > -}) > +#define pgd_addr_end pgd_addr_end I think that #define is pointless, usually there is no such #define for the default case. > +static inline unsigned long pgd_addr_end(pgd_t pgd, unsigned long addr, unsigned long end) > +{ unsigned long __boundary = (addr + PGDIR_SIZE) & PGDIR_MASK; > + return (__boundary - 1 < end - 1) ? __boundary : end; > +} Please use the standard layout, ie entry { and exit } alone on their line, and space between local vars declaration and the rest. Also remove the leading __ in front of var names as it's not needed once it is not macros anymore. f_name() { some_local_var; do_something(); } > #endif > > #ifndef p4d_addr_end > -#define p4d_addr_end(p4d, addr, end) \ > -({ unsigned long __boundary = ((addr) + P4D_SIZE) & P4D_MASK; \ > - (__boundary - 1 < (end) - 1)? __boundary: (end); \ > -}) > +#define p4d_addr_end p4d_addr_end > +static inline unsigned long p4d_addr_end(p4d_t p4d, unsigned long addr, unsigned long end) > +{ unsigned long __boundary = (addr + P4D_SIZE) & P4D_MASK; > + return (__boundary - 1 < end - 1) ? __boundary : end; > +} > #endif > > #ifndef pud_addr_end > -#define pud_addr_end(pud, addr, end) \ > -({ unsigned long __boundary = ((addr) + PUD_SIZE) & PUD_MASK; \ > - (__boundary - 1 < (end) - 1)? __boundary: (end); \ > -}) > +#define pud_addr_end pud_addr_end > +static inline unsigned long pud_addr_end(pud_t pud, unsigned long addr, unsigned long end) > +{ unsigned long __boundary = (addr + PUD_SIZE) & PUD_MASK; > + return (__boundary - 1 < end - 1) ? __boundary : end; > +} > #endif > > #ifndef pmd_addr_end > -#define pmd_addr_end(pmd, addr, end) \ > -({ unsigned long __boundary = ((addr) + PMD_SIZE) & PMD_MASK; \ > - (__boundary - 1 < (end) - 1)? __boundary: (end); \ > -}) > +#define pmd_addr_end pmd_addr_end > +static inline unsigned long pmd_addr_end(pmd_t pmd, unsigned long addr, unsigned long end) > +{ unsigned long __boundary = (addr + PMD_SIZE) & PMD_MASK; > + return (__boundary - 1 < end - 1) ? __boundary : end; > +} > #endif > > /* > 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 X-Spam-Level: X-Spam-Status: No, score=-12.9 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A, SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 41514C43461 for ; Tue, 8 Sep 2020 05:21:54 +0000 (UTC) Received: from lists.ozlabs.org (lists.ozlabs.org [203.11.71.2]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 68A1E21897 for ; Tue, 8 Sep 2020 05:21:53 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 68A1E21897 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=csgroup.eu Authentication-Results: mail.kernel.org; spf=pass smtp.mailfrom=linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Received: from bilbo.ozlabs.org (lists.ozlabs.org [IPv6:2401:3900:2:1::3]) by lists.ozlabs.org (Postfix) with ESMTP id 4Bltmv0KljzDqL5 for ; Tue, 8 Sep 2020 15:21:51 +1000 (AEST) Authentication-Results: lists.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=csgroup.eu (client-ip=93.17.236.30; helo=pegase1.c-s.fr; envelope-from=christophe.leroy@csgroup.eu; receiver=) Authentication-Results: lists.ozlabs.org; dmarc=none (p=none dis=none) header.from=csgroup.eu Received: from pegase1.c-s.fr (pegase1.c-s.fr [93.17.236.30]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by lists.ozlabs.org (Postfix) with ESMTPS id 4Bltkb6STSzDqD5 for ; Tue, 8 Sep 2020 15:19:50 +1000 (AEST) Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4BltkT4qvvz9tyfH; Tue, 8 Sep 2020 07:19:45 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at c-s.fr Received: from pegase1.c-s.fr ([192.168.12.234]) by localhost (pegase1.c-s.fr [192.168.12.234]) (amavisd-new, port 10024) with ESMTP id mF_Z1FlHMh_F; Tue, 8 Sep 2020 07:19:45 +0200 (CEST) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase1.c-s.fr (Postfix) with ESMTP id 4BltkT3c0Rz9tyfG; Tue, 8 Sep 2020 07:19:45 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 48B608B793; Tue, 8 Sep 2020 07:19:46 +0200 (CEST) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id G7-bMta_Fa-y; Tue, 8 Sep 2020 07:19:46 +0200 (CEST) Received: from [192.168.4.90] (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 0B4918B768; Tue, 8 Sep 2020 07:19:44 +0200 (CEST) Subject: Re: [RFC PATCH v2 3/3] mm: make generic pXd_addr_end() macros inline functions To: Gerald Schaefer , Jason Gunthorpe , John Hubbard References: <20200907180058.64880-1-gerald.schaefer@linux.ibm.com> <20200907180058.64880-4-gerald.schaefer@linux.ibm.com> From: Christophe Leroy Message-ID: <4c101685-5b29-dace-9dd2-b6f0ae193a9c@csgroup.eu> Date: Tue, 8 Sep 2020 07:19:38 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 MIME-Version: 1.0 In-Reply-To: <20200907180058.64880-4-gerald.schaefer@linux.ibm.com> Content-Type: text/plain; charset=utf-8; format=flowed Content-Language: fr Content-Transfer-Encoding: 8bit X-BeenThere: linuxppc-dev@lists.ozlabs.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Linux on PowerPC Developers Mail List List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Zijlstra , Catalin Marinas , Dave Hansen , linux-mm , Paul Mackerras , linux-sparc , Alexander Gordeev , Claudio Imbrenda , Will Deacon , linux-arch , linux-s390 , Vasily Gorbik , Richard Weinberger , linux-x86 , Russell King , Christian Borntraeger , Ingo Molnar , Andrey Ryabinin , Jeff Dike , Arnd Bergmann , Heiko Carstens , linux-um , Borislav Petkov , Andy Lutomirski , Thomas Gleixner , linux-arm , Linus Torvalds , LKML , Andrew Morton , linux-power , Mike Rapoport Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" Le 07/09/2020 à 20:00, Gerald Schaefer a écrit : > From: Alexander Gordeev > > Since pXd_addr_end() macros take pXd page-table entry as a > parameter it makes sense to check the entry type on compile. > Even though most archs do not make use of page-table entries > in pXd_addr_end() calls, checking the type in traversal code > paths could help to avoid subtle bugs. > > Signed-off-by: Alexander Gordeev > Signed-off-by: Gerald Schaefer > --- > include/linux/pgtable.h | 36 ++++++++++++++++++++---------------- > 1 file changed, 20 insertions(+), 16 deletions(-) > > diff --git a/include/linux/pgtable.h b/include/linux/pgtable.h > index 67ebc22cf83d..d9e7d16c2263 100644 > --- a/include/linux/pgtable.h > +++ b/include/linux/pgtable.h > @@ -656,31 +656,35 @@ static inline int arch_unmap_one(struct mm_struct *mm, > */ > > #ifndef pgd_addr_end > -#define pgd_addr_end(pgd, addr, end) \ > -({ unsigned long __boundary = ((addr) + PGDIR_SIZE) & PGDIR_MASK; \ > - (__boundary - 1 < (end) - 1)? __boundary: (end); \ > -}) > +#define pgd_addr_end pgd_addr_end I think that #define is pointless, usually there is no such #define for the default case. > +static inline unsigned long pgd_addr_end(pgd_t pgd, unsigned long addr, unsigned long end) > +{ unsigned long __boundary = (addr + PGDIR_SIZE) & PGDIR_MASK; > + return (__boundary - 1 < end - 1) ? __boundary : end; > +} Please use the standard layout, ie entry { and exit } alone on their line, and space between local vars declaration and the rest. Also remove the leading __ in front of var names as it's not needed once it is not macros anymore. f_name() { some_local_var; do_something(); } > #endif > > #ifndef p4d_addr_end > -#define p4d_addr_end(p4d, addr, end) \ > -({ unsigned long __boundary = ((addr) + P4D_SIZE) & P4D_MASK; \ > - (__boundary - 1 < (end) - 1)? __boundary: (end); \ > -}) > +#define p4d_addr_end p4d_addr_end > +static inline unsigned long p4d_addr_end(p4d_t p4d, unsigned long addr, unsigned long end) > +{ unsigned long __boundary = (addr + P4D_SIZE) & P4D_MASK; > + return (__boundary - 1 < end - 1) ? __boundary : end; > +} > #endif > > #ifndef pud_addr_end > -#define pud_addr_end(pud, addr, end) \ > -({ unsigned long __boundary = ((addr) + PUD_SIZE) & PUD_MASK; \ > - (__boundary - 1 < (end) - 1)? __boundary: (end); \ > -}) > +#define pud_addr_end pud_addr_end > +static inline unsigned long pud_addr_end(pud_t pud, unsigned long addr, unsigned long end) > +{ unsigned long __boundary = (addr + PUD_SIZE) & PUD_MASK; > + return (__boundary - 1 < end - 1) ? __boundary : end; > +} > #endif > > #ifndef pmd_addr_end > -#define pmd_addr_end(pmd, addr, end) \ > -({ unsigned long __boundary = ((addr) + PMD_SIZE) & PMD_MASK; \ > - (__boundary - 1 < (end) - 1)? __boundary: (end); \ > -}) > +#define pmd_addr_end pmd_addr_end > +static inline unsigned long pmd_addr_end(pmd_t pmd, unsigned long addr, unsigned long end) > +{ unsigned long __boundary = (addr + PMD_SIZE) & PMD_MASK; > + return (__boundary - 1 < end - 1) ? __boundary : end; > +} > #endif > > /* > 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 X-Spam-Level: X-Spam-Status: No, score=-12.9 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS, URIBL_BLOCKED,USER_AGENT_SANE_1 autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id CD336C43461 for ; Tue, 8 Sep 2020 05:21:09 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 7F59C20639 for ; Tue, 8 Sep 2020 05:21:09 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="vQF0JfAp" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 7F59C20639 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=csgroup.eu Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Type: Content-Transfer-Encoding:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date:Message-ID:From: References:To:Subject:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=SkRd/ffjT6P50Showox5C5kkx79+162qTfplKrk4s9U=; b=vQF0JfApkjilILQeiU4vnVeji XkK30H51tUxnwcTn7hd2fvyWXafIyZhDTiTfAN1Z2sVD8DozXMVx+9Ul+mHO3m3DT9KLciwTs2zyi /t30NTrhnFYtFpqPOMdlCqZaFQOWpdHFJadD5gLwREekyRoHsi5brcP7udXiP3+78VHPTNhm8+0iC Y4jgqUZc3P0xyDS68AvIjQOgUJt5WjbTgHULHYeKNxENLBZbf5xTtUzZvQdENPeVy1fsRyTEqST+P 16Mn1osvzjOwDnWib7+Fu+m+048BbjZA3jTyfLnc8sYGTdFAvUOoNonys5GtjmGahhyoBSKAG04UN a9JCvCN6Q==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kFW2q-0005QW-5x; Tue, 08 Sep 2020 05:19:52 +0000 Received: from pegase1.c-s.fr ([93.17.236.30]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kFW2l-0005P6-SG; Tue, 08 Sep 2020 05:19:49 +0000 Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4BltkT4qvvz9tyfH; Tue, 8 Sep 2020 07:19:45 +0200 (CEST) X-Virus-Scanned: Debian amavisd-new at c-s.fr Received: from pegase1.c-s.fr ([192.168.12.234]) by localhost (pegase1.c-s.fr [192.168.12.234]) (amavisd-new, port 10024) with ESMTP id mF_Z1FlHMh_F; Tue, 8 Sep 2020 07:19:45 +0200 (CEST) Received: from messagerie.si.c-s.fr (messagerie.si.c-s.fr [192.168.25.192]) by pegase1.c-s.fr (Postfix) with ESMTP id 4BltkT3c0Rz9tyfG; Tue, 8 Sep 2020 07:19:45 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 48B608B793; Tue, 8 Sep 2020 07:19:46 +0200 (CEST) X-Virus-Scanned: amavisd-new at c-s.fr Received: from messagerie.si.c-s.fr ([127.0.0.1]) by localhost (messagerie.si.c-s.fr [127.0.0.1]) (amavisd-new, port 10023) with ESMTP id G7-bMta_Fa-y; Tue, 8 Sep 2020 07:19:46 +0200 (CEST) Received: from [192.168.4.90] (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 0B4918B768; Tue, 8 Sep 2020 07:19:44 +0200 (CEST) Subject: Re: [RFC PATCH v2 3/3] mm: make generic pXd_addr_end() macros inline functions To: Gerald Schaefer , Jason Gunthorpe , John Hubbard References: <20200907180058.64880-1-gerald.schaefer@linux.ibm.com> <20200907180058.64880-4-gerald.schaefer@linux.ibm.com> From: Christophe Leroy Message-ID: <4c101685-5b29-dace-9dd2-b6f0ae193a9c@csgroup.eu> Date: Tue, 8 Sep 2020 07:19:38 +0200 User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.12.0 MIME-Version: 1.0 In-Reply-To: <20200907180058.64880-4-gerald.schaefer@linux.ibm.com> Content-Language: fr X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20200908_011948_195292_459BBD55 X-CRM114-Status: GOOD ( 21.48 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Peter Zijlstra , Catalin Marinas , Dave Hansen , linux-mm , Paul Mackerras , linux-sparc , Alexander Gordeev , Claudio Imbrenda , Will Deacon , linux-arch , linux-s390 , Vasily Gorbik , Richard Weinberger , linux-x86 , Russell King , Christian Borntraeger , Ingo Molnar , Andrey Ryabinin , Jeff Dike , Arnd Bergmann , Heiko Carstens , linux-um , Borislav Petkov , Andy Lutomirski , Thomas Gleixner , linux-arm , Linus Torvalds , LKML , Andrew Morton , linux-power , Mike Rapoport Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org CgpMZSAwNy8wOS8yMDIwIMOgIDIwOjAwLCBHZXJhbGQgU2NoYWVmZXIgYSDDqWNyaXTCoDoKPiBG cm9tOiBBbGV4YW5kZXIgR29yZGVldiA8YWdvcmRlZXZAbGludXguaWJtLmNvbT4KPiAKPiBTaW5j ZSBwWGRfYWRkcl9lbmQoKSBtYWNyb3MgdGFrZSBwWGQgcGFnZS10YWJsZSBlbnRyeSBhcyBhCj4g cGFyYW1ldGVyIGl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIHRoZSBlbnRyeSB0eXBlIG9uIGNvbXBp bGUuCj4gRXZlbiB0aG91Z2ggbW9zdCBhcmNocyBkbyBub3QgbWFrZSB1c2Ugb2YgcGFnZS10YWJs ZSBlbnRyaWVzCj4gaW4gcFhkX2FkZHJfZW5kKCkgY2FsbHMsIGNoZWNraW5nIHRoZSB0eXBlIGlu IHRyYXZlcnNhbCBjb2RlCj4gcGF0aHMgY291bGQgaGVscCB0byBhdm9pZCBzdWJ0bGUgYnVncy4K PiAKPiBTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgR29yZGVldiA8YWdvcmRlZXZAbGludXguaWJt LmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBHZXJhbGQgU2NoYWVmZXIgPGdlcmFsZC5zY2hhZWZlckBs aW51eC5pYm0uY29tPgo+IC0tLQo+ICAgaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggfCAzNiArKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KPiAgIDEgZmlsZSBjaGFuZ2VkLCAyMCBp bnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9s aW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAo+IGluZGV4IDY3ZWJjMjJj ZjgzZC4uZDllN2QxNmMyMjYzIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5o Cj4gKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKPiBAQCAtNjU2LDMxICs2NTYsMzUgQEAg c3RhdGljIGlubGluZSBpbnQgYXJjaF91bm1hcF9vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4g ICAgKi8KPiAgIAo+ICAgI2lmbmRlZiBwZ2RfYWRkcl9lbmQKPiAtI2RlZmluZSBwZ2RfYWRkcl9l bmQocGdkLCBhZGRyLCBlbmQpCQkJCQlcCj4gLSh7CXVuc2lnbmVkIGxvbmcgX19ib3VuZGFyeSA9 ICgoYWRkcikgKyBQR0RJUl9TSVpFKSAmIFBHRElSX01BU0s7CVwKPiAtCShfX2JvdW5kYXJ5IC0g MSA8IChlbmQpIC0gMSk/IF9fYm91bmRhcnk6IChlbmQpOwkJXAo+IC19KQo+ICsjZGVmaW5lIHBn ZF9hZGRyX2VuZCBwZ2RfYWRkcl9lbmQKCkkgdGhpbmsgdGhhdCAjZGVmaW5lIGlzIHBvaW50bGVz cywgdXN1YWxseSB0aGVyZSBpcyBubyBzdWNoICNkZWZpbmUgZm9yIAp0aGUgZGVmYXVsdCBjYXNl LgoKPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBnZF9hZGRyX2VuZChwZ2RfdCBwZ2Qs IHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCj4gK3sJdW5zaWduZWQgbG9u ZyBfX2JvdW5kYXJ5ID0gKGFkZHIgKyBQR0RJUl9TSVpFKSAmIFBHRElSX01BU0s7Cj4gKwlyZXR1 cm4gKF9fYm91bmRhcnkgLSAxIDwgZW5kIC0gMSkgPyBfX2JvdW5kYXJ5IDogZW5kOwo+ICt9CgpQ bGVhc2UgdXNlIHRoZSBzdGFuZGFyZCBsYXlvdXQsIGllIGVudHJ5IHsgYW5kIGV4aXQgfSBhbG9u ZSBvbiB0aGVpciAKbGluZSwgYW5kIHNwYWNlIGJldHdlZW4gbG9jYWwgdmFycyBkZWNsYXJhdGlv biBhbmQgdGhlIHJlc3QuCgpBbHNvIHJlbW92ZSB0aGUgbGVhZGluZyBfXyBpbiBmcm9udCBvZiB2 YXIgbmFtZXMgYXMgaXQncyBub3QgbmVlZGVkIG9uY2UgCml0IGlzIG5vdCBtYWNyb3MgYW55bW9y ZS4KCmZfbmFtZSgpCnsKCXNvbWVfbG9jYWxfdmFyOwoKCWRvX3NvbWV0aGluZygpOwp9Cgo+ICAg I2VuZGlmCj4gICAKPiAgICNpZm5kZWYgcDRkX2FkZHJfZW5kCj4gLSNkZWZpbmUgcDRkX2FkZHJf ZW5kKHA0ZCwgYWRkciwgZW5kKQkJCQkJXAo+IC0oewl1bnNpZ25lZCBsb25nIF9fYm91bmRhcnkg PSAoKGFkZHIpICsgUDREX1NJWkUpICYgUDREX01BU0s7CVwKPiAtCShfX2JvdW5kYXJ5IC0gMSA8 IChlbmQpIC0gMSk/IF9fYm91bmRhcnk6IChlbmQpOwkJXAo+IC19KQo+ICsjZGVmaW5lIHA0ZF9h ZGRyX2VuZCBwNGRfYWRkcl9lbmQKPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHA0ZF9h ZGRyX2VuZChwNGRfdCBwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQp Cj4gK3sJdW5zaWduZWQgbG9uZyBfX2JvdW5kYXJ5ID0gKGFkZHIgKyBQNERfU0laRSkgJiBQNERf TUFTSzsKPiArCXJldHVybiAoX19ib3VuZGFyeSAtIDEgPCBlbmQgLSAxKSA/IF9fYm91bmRhcnkg OiBlbmQ7Cj4gK30KPiAgICNlbmRpZgo+ICAgCj4gICAjaWZuZGVmIHB1ZF9hZGRyX2VuZAo+IC0j ZGVmaW5lIHB1ZF9hZGRyX2VuZChwdWQsIGFkZHIsIGVuZCkJCQkJCVwKPiAtKHsJdW5zaWduZWQg bG9uZyBfX2JvdW5kYXJ5ID0gKChhZGRyKSArIFBVRF9TSVpFKSAmIFBVRF9NQVNLOwlcCj4gLQko X19ib3VuZGFyeSAtIDEgPCAoZW5kKSAtIDEpPyBfX2JvdW5kYXJ5OiAoZW5kKTsJCVwKPiAtfSkK PiArI2RlZmluZSBwdWRfYWRkcl9lbmQgcHVkX2FkZHJfZW5kCj4gK3N0YXRpYyBpbmxpbmUgdW5z aWduZWQgbG9uZyBwdWRfYWRkcl9lbmQocHVkX3QgcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVu c2lnbmVkIGxvbmcgZW5kKQo+ICt7CXVuc2lnbmVkIGxvbmcgX19ib3VuZGFyeSA9IChhZGRyICsg UFVEX1NJWkUpICYgUFVEX01BU0s7Cj4gKwlyZXR1cm4gKF9fYm91bmRhcnkgLSAxIDwgZW5kIC0g MSkgPyBfX2JvdW5kYXJ5IDogZW5kOwo+ICt9Cj4gICAjZW5kaWYKPiAgIAo+ICAgI2lmbmRlZiBw bWRfYWRkcl9lbmQKPiAtI2RlZmluZSBwbWRfYWRkcl9lbmQocG1kLCBhZGRyLCBlbmQpCQkJCQlc Cj4gLSh7CXVuc2lnbmVkIGxvbmcgX19ib3VuZGFyeSA9ICgoYWRkcikgKyBQTURfU0laRSkgJiBQ TURfTUFTSzsJXAo+IC0JKF9fYm91bmRhcnkgLSAxIDwgKGVuZCkgLSAxKT8gX19ib3VuZGFyeTog KGVuZCk7CQlcCj4gLX0pCj4gKyNkZWZpbmUgcG1kX2FkZHJfZW5kIHBtZF9hZGRyX2VuZAo+ICtz dGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX2FkZHJfZW5kKHBtZF90IHBtZCwgdW5zaWdu ZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKPiArewl1bnNpZ25lZCBsb25nIF9fYm91 bmRhcnkgPSAoYWRkciArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOwo+ICsJcmV0dXJuIChfX2JvdW5k YXJ5IC0gMSA8IGVuZCAtIDEpID8gX19ib3VuZGFyeSA6IGVuZDsKPiArfQo+ICAgI2VuZGlmCj4g ICAKPiAgIC8qCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC1hcm0ta2VybmVsIG1haWxpbmcgbGlzdApsaW51eC1hcm0ta2VybmVsQGxpc3Rz LmluZnJhZGVhZC5vcmcKaHR0cDovL2xpc3RzLmluZnJhZGVhZC5vcmcvbWFpbG1hbi9saXN0aW5m by9saW51eC1hcm0ta2VybmVsCg== From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Subject: Re: [RFC PATCH v2 3/3] mm: make generic pXd_addr_end() macros inline functions References: <20200907180058.64880-1-gerald.schaefer@linux.ibm.com> <20200907180058.64880-4-gerald.schaefer@linux.ibm.com> From: Christophe Leroy Message-ID: <4c101685-5b29-dace-9dd2-b6f0ae193a9c@csgroup.eu> Date: Tue, 8 Sep 2020 07:19:38 +0200 MIME-Version: 1.0 In-Reply-To: <20200907180058.64880-4-gerald.schaefer@linux.ibm.com> Content-Language: fr List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Content-Transfer-Encoding: base64 Content-Type: text/plain; charset="utf-8"; Format="flowed" Sender: "linux-um" Errors-To: linux-um-bounces+geert=linux-m68k.org@lists.infradead.org To: Gerald Schaefer , Jason Gunthorpe , John Hubbard Cc: Peter Zijlstra , Catalin Marinas , Dave Hansen , linux-mm , Paul Mackerras , linux-sparc , Alexander Gordeev , Claudio Imbrenda , Will Deacon , linux-arch , linux-s390 , Vasily Gorbik , Richard Weinberger , linux-x86 , Russell King , Christian Borntraeger , Ingo Molnar , Andrey Ryabinin , Jeff Dike , Arnd Bergmann , Heiko Carstens , linux-um , Borislav Petkov , Andy Lutomirski , Thomas Gleixner , linux-arm , Linus Torvalds , LKML , Andrew Morton , linux-power , Mike Rapoport CgpMZSAwNy8wOS8yMDIwIMOgIDIwOjAwLCBHZXJhbGQgU2NoYWVmZXIgYSDDqWNyaXTCoDoKPiBG cm9tOiBBbGV4YW5kZXIgR29yZGVldiA8YWdvcmRlZXZAbGludXguaWJtLmNvbT4KPiAKPiBTaW5j ZSBwWGRfYWRkcl9lbmQoKSBtYWNyb3MgdGFrZSBwWGQgcGFnZS10YWJsZSBlbnRyeSBhcyBhCj4g cGFyYW1ldGVyIGl0IG1ha2VzIHNlbnNlIHRvIGNoZWNrIHRoZSBlbnRyeSB0eXBlIG9uIGNvbXBp bGUuCj4gRXZlbiB0aG91Z2ggbW9zdCBhcmNocyBkbyBub3QgbWFrZSB1c2Ugb2YgcGFnZS10YWJs ZSBlbnRyaWVzCj4gaW4gcFhkX2FkZHJfZW5kKCkgY2FsbHMsIGNoZWNraW5nIHRoZSB0eXBlIGlu IHRyYXZlcnNhbCBjb2RlCj4gcGF0aHMgY291bGQgaGVscCB0byBhdm9pZCBzdWJ0bGUgYnVncy4K PiAKPiBTaWduZWQtb2ZmLWJ5OiBBbGV4YW5kZXIgR29yZGVldiA8YWdvcmRlZXZAbGludXguaWJt LmNvbT4KPiBTaWduZWQtb2ZmLWJ5OiBHZXJhbGQgU2NoYWVmZXIgPGdlcmFsZC5zY2hhZWZlckBs aW51eC5pYm0uY29tPgo+IC0tLQo+ICAgaW5jbHVkZS9saW51eC9wZ3RhYmxlLmggfCAzNiArKysr KysrKysrKysrKysrKysrKy0tLS0tLS0tLS0tLS0tLS0KPiAgIDEgZmlsZSBjaGFuZ2VkLCAyMCBp bnNlcnRpb25zKCspLCAxNiBkZWxldGlvbnMoLSkKPiAKPiBkaWZmIC0tZ2l0IGEvaW5jbHVkZS9s aW51eC9wZ3RhYmxlLmggYi9pbmNsdWRlL2xpbnV4L3BndGFibGUuaAo+IGluZGV4IDY3ZWJjMjJj ZjgzZC4uZDllN2QxNmMyMjYzIDEwMDY0NAo+IC0tLSBhL2luY2x1ZGUvbGludXgvcGd0YWJsZS5o Cj4gKysrIGIvaW5jbHVkZS9saW51eC9wZ3RhYmxlLmgKPiBAQCAtNjU2LDMxICs2NTYsMzUgQEAg c3RhdGljIGlubGluZSBpbnQgYXJjaF91bm1hcF9vbmUoc3RydWN0IG1tX3N0cnVjdCAqbW0sCj4g ICAgKi8KPiAgIAo+ICAgI2lmbmRlZiBwZ2RfYWRkcl9lbmQKPiAtI2RlZmluZSBwZ2RfYWRkcl9l bmQocGdkLCBhZGRyLCBlbmQpCQkJCQlcCj4gLSh7CXVuc2lnbmVkIGxvbmcgX19ib3VuZGFyeSA9 ICgoYWRkcikgKyBQR0RJUl9TSVpFKSAmIFBHRElSX01BU0s7CVwKPiAtCShfX2JvdW5kYXJ5IC0g MSA8IChlbmQpIC0gMSk/IF9fYm91bmRhcnk6IChlbmQpOwkJXAo+IC19KQo+ICsjZGVmaW5lIHBn ZF9hZGRyX2VuZCBwZ2RfYWRkcl9lbmQKCkkgdGhpbmsgdGhhdCAjZGVmaW5lIGlzIHBvaW50bGVz cywgdXN1YWxseSB0aGVyZSBpcyBubyBzdWNoICNkZWZpbmUgZm9yIAp0aGUgZGVmYXVsdCBjYXNl LgoKPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHBnZF9hZGRyX2VuZChwZ2RfdCBwZ2Qs IHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQpCj4gK3sJdW5zaWduZWQgbG9u ZyBfX2JvdW5kYXJ5ID0gKGFkZHIgKyBQR0RJUl9TSVpFKSAmIFBHRElSX01BU0s7Cj4gKwlyZXR1 cm4gKF9fYm91bmRhcnkgLSAxIDwgZW5kIC0gMSkgPyBfX2JvdW5kYXJ5IDogZW5kOwo+ICt9CgpQ bGVhc2UgdXNlIHRoZSBzdGFuZGFyZCBsYXlvdXQsIGllIGVudHJ5IHsgYW5kIGV4aXQgfSBhbG9u ZSBvbiB0aGVpciAKbGluZSwgYW5kIHNwYWNlIGJldHdlZW4gbG9jYWwgdmFycyBkZWNsYXJhdGlv biBhbmQgdGhlIHJlc3QuCgpBbHNvIHJlbW92ZSB0aGUgbGVhZGluZyBfXyBpbiBmcm9udCBvZiB2 YXIgbmFtZXMgYXMgaXQncyBub3QgbmVlZGVkIG9uY2UgCml0IGlzIG5vdCBtYWNyb3MgYW55bW9y ZS4KCmZfbmFtZSgpCnsKCXNvbWVfbG9jYWxfdmFyOwoKCWRvX3NvbWV0aGluZygpOwp9Cgo+ICAg I2VuZGlmCj4gICAKPiAgICNpZm5kZWYgcDRkX2FkZHJfZW5kCj4gLSNkZWZpbmUgcDRkX2FkZHJf ZW5kKHA0ZCwgYWRkciwgZW5kKQkJCQkJXAo+IC0oewl1bnNpZ25lZCBsb25nIF9fYm91bmRhcnkg PSAoKGFkZHIpICsgUDREX1NJWkUpICYgUDREX01BU0s7CVwKPiAtCShfX2JvdW5kYXJ5IC0gMSA8 IChlbmQpIC0gMSk/IF9fYm91bmRhcnk6IChlbmQpOwkJXAo+IC19KQo+ICsjZGVmaW5lIHA0ZF9h ZGRyX2VuZCBwNGRfYWRkcl9lbmQKPiArc3RhdGljIGlubGluZSB1bnNpZ25lZCBsb25nIHA0ZF9h ZGRyX2VuZChwNGRfdCBwNGQsIHVuc2lnbmVkIGxvbmcgYWRkciwgdW5zaWduZWQgbG9uZyBlbmQp Cj4gK3sJdW5zaWduZWQgbG9uZyBfX2JvdW5kYXJ5ID0gKGFkZHIgKyBQNERfU0laRSkgJiBQNERf TUFTSzsKPiArCXJldHVybiAoX19ib3VuZGFyeSAtIDEgPCBlbmQgLSAxKSA/IF9fYm91bmRhcnkg OiBlbmQ7Cj4gK30KPiAgICNlbmRpZgo+ICAgCj4gICAjaWZuZGVmIHB1ZF9hZGRyX2VuZAo+IC0j ZGVmaW5lIHB1ZF9hZGRyX2VuZChwdWQsIGFkZHIsIGVuZCkJCQkJCVwKPiAtKHsJdW5zaWduZWQg bG9uZyBfX2JvdW5kYXJ5ID0gKChhZGRyKSArIFBVRF9TSVpFKSAmIFBVRF9NQVNLOwlcCj4gLQko X19ib3VuZGFyeSAtIDEgPCAoZW5kKSAtIDEpPyBfX2JvdW5kYXJ5OiAoZW5kKTsJCVwKPiAtfSkK PiArI2RlZmluZSBwdWRfYWRkcl9lbmQgcHVkX2FkZHJfZW5kCj4gK3N0YXRpYyBpbmxpbmUgdW5z aWduZWQgbG9uZyBwdWRfYWRkcl9lbmQocHVkX3QgcHVkLCB1bnNpZ25lZCBsb25nIGFkZHIsIHVu c2lnbmVkIGxvbmcgZW5kKQo+ICt7CXVuc2lnbmVkIGxvbmcgX19ib3VuZGFyeSA9IChhZGRyICsg UFVEX1NJWkUpICYgUFVEX01BU0s7Cj4gKwlyZXR1cm4gKF9fYm91bmRhcnkgLSAxIDwgZW5kIC0g MSkgPyBfX2JvdW5kYXJ5IDogZW5kOwo+ICt9Cj4gICAjZW5kaWYKPiAgIAo+ICAgI2lmbmRlZiBw bWRfYWRkcl9lbmQKPiAtI2RlZmluZSBwbWRfYWRkcl9lbmQocG1kLCBhZGRyLCBlbmQpCQkJCQlc Cj4gLSh7CXVuc2lnbmVkIGxvbmcgX19ib3VuZGFyeSA9ICgoYWRkcikgKyBQTURfU0laRSkgJiBQ TURfTUFTSzsJXAo+IC0JKF9fYm91bmRhcnkgLSAxIDwgKGVuZCkgLSAxKT8gX19ib3VuZGFyeTog KGVuZCk7CQlcCj4gLX0pCj4gKyNkZWZpbmUgcG1kX2FkZHJfZW5kIHBtZF9hZGRyX2VuZAo+ICtz dGF0aWMgaW5saW5lIHVuc2lnbmVkIGxvbmcgcG1kX2FkZHJfZW5kKHBtZF90IHBtZCwgdW5zaWdu ZWQgbG9uZyBhZGRyLCB1bnNpZ25lZCBsb25nIGVuZCkKPiArewl1bnNpZ25lZCBsb25nIF9fYm91 bmRhcnkgPSAoYWRkciArIFBNRF9TSVpFKSAmIFBNRF9NQVNLOwo+ICsJcmV0dXJuIChfX2JvdW5k YXJ5IC0gMSA8IGVuZCAtIDEpID8gX19ib3VuZGFyeSA6IGVuZDsKPiArfQo+ICAgI2VuZGlmCj4g ICAKPiAgIC8qCj4gCgpfX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19fX19f X19fXwpsaW51eC11bSBtYWlsaW5nIGxpc3QKbGludXgtdW1AbGlzdHMuaW5mcmFkZWFkLm9yZwpo dHRwOi8vbGlzdHMuaW5mcmFkZWFkLm9yZy9tYWlsbWFuL2xpc3RpbmZvL2xpbnV4LXVtCg==