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=-15.3 required=3.0 tests=BAYES_00, HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER,INCLUDES_PATCH, MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS,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 28D09C433C1 for ; Sat, 27 Mar 2021 17:25:19 +0000 (UTC) Received: from lists.ozlabs.org (lists.ozlabs.org [112.213.38.117]) (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 5C2BE619AE for ; Sat, 27 Mar 2021 17:25:18 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5C2BE619AE 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 boromir.ozlabs.org (localhost [IPv6:::1]) by lists.ozlabs.org (Postfix) with ESMTP id 4F75MJ5WZRz3bqx for ; Sun, 28 Mar 2021 04:25:16 +1100 (AEDT) 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=) 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 4F75Lv3w2Gz301q for ; Sun, 28 Mar 2021 04:24:55 +1100 (AEDT) Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4F75Lq5JlPz9ty5J; Sat, 27 Mar 2021 18:24:51 +0100 (CET) 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 L9WsE6gnoJQe; Sat, 27 Mar 2021 18:24:51 +0100 (CET) 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 4F75Lq46k3z9ty5H; Sat, 27 Mar 2021 18:24:51 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id A58E78B777; Sat, 27 Mar 2021 18:24:51 +0100 (CET) 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 BhA0t_BILO1F; Sat, 27 Mar 2021 18:24:51 +0100 (CET) Received: from [192.168.4.90] (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 3595A8B771; Sat, 27 Mar 2021 18:24:51 +0100 (CET) Subject: Re: [PATCH v3 37/41] powerpc/32s: Move KUEP locking/unlocking in C From: Christophe Leroy To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , npiggin@gmail.com References: <4eadd873927e9a73c3d1dfe2f9497353465514cf.1615552867.git.christophe.leroy@csgroup.eu> Message-ID: <4ff132a6-7552-a46f-5690-e73c37c805f9@csgroup.eu> Date: Sat, 27 Mar 2021 18:24:23 +0100 User-Agent: Mozilla/5.0 (Windows NT 6.1; Win64; x64; rv:78.0) Gecko/20100101 Thunderbird/78.9.0 MIME-Version: 1.0 In-Reply-To: <4eadd873927e9a73c3d1dfe2f9497353465514cf.1615552867.git.christophe.leroy@csgroup.eu> 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: linuxppc-dev@lists.ozlabs.org, linux-kernel@vger.kernel.org Errors-To: linuxppc-dev-bounces+linuxppc-dev=archiver.kernel.org@lists.ozlabs.org Sender: "Linuxppc-dev" Le 12/03/2021 à 13:50, Christophe Leroy a écrit : > This can be done in C, do it. > > Unrolling the loop gains approx. 15% performance. > > From now on, prepare_transfer_to_handler() is only for > interrupts from kernel. > > Signed-off-by: Christophe Leroy > --- > arch/powerpc/include/asm/book3s/32/kup.h | 31 ------------------- > arch/powerpc/include/asm/interrupt.h | 6 +++- > arch/powerpc/include/asm/kup.h | 8 +++++ > arch/powerpc/kernel/entry_32.S | 16 ---------- > arch/powerpc/kernel/head_32.h | 3 ++ > arch/powerpc/kernel/head_booke.h | 3 ++ > arch/powerpc/kernel/interrupt.c | 4 +++ > arch/powerpc/mm/book3s32/Makefile | 1 + > arch/powerpc/mm/book3s32/kuep.c | 38 ++++++++++++++++++++++++ > 9 files changed, 62 insertions(+), 48 deletions(-) > create mode 100644 arch/powerpc/mm/book3s32/kuep.c > > diff --git a/arch/powerpc/mm/book3s32/kuep.c b/arch/powerpc/mm/book3s32/kuep.c > new file mode 100644 > index 000000000000..c70532568a28 > --- /dev/null > +++ b/arch/powerpc/mm/book3s32/kuep.c > @@ -0,0 +1,38 @@ > +// SPDX-License-Identifier: GPL-2.0-or-later > +#include > +#include > +#include Need to add to make Robot happy (missing prototypes of kuep_lock() and kuep_unlock()) > + > +#define KUEP_UPDATE_TWO_USER_SEGMENTS(n) do { \ > + if (TASK_SIZE > ((n) << 28)) \ > + mtsr(val1, (n) << 28); \ > + if (TASK_SIZE > (((n) + 1) << 28)) \ > + mtsr(val2, ((n) + 1) << 28); \ > + val1 = (val1 + 0x222) & 0xf0ffffff; \ > + val2 = (val2 + 0x222) & 0xf0ffffff; \ > +} while (0) > + > +static __always_inline void kuep_update(u32 val) > +{ > + int val1 = val; > + int val2 = (val + 0x111) & 0xf0ffffff; > + > + KUEP_UPDATE_TWO_USER_SEGMENTS(0); > + KUEP_UPDATE_TWO_USER_SEGMENTS(2); > + KUEP_UPDATE_TWO_USER_SEGMENTS(4); > + KUEP_UPDATE_TWO_USER_SEGMENTS(6); > + KUEP_UPDATE_TWO_USER_SEGMENTS(8); > + KUEP_UPDATE_TWO_USER_SEGMENTS(10); > + KUEP_UPDATE_TWO_USER_SEGMENTS(12); > + KUEP_UPDATE_TWO_USER_SEGMENTS(14); > +} > + > +void kuep_lock(void) > +{ > + kuep_update(mfsr(0) | SR_NX); > +} > + > +void kuep_unlock(void) > +{ > + kuep_update(mfsr(0) & ~SR_NX); > +} >