Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp3476518pxj; Tue, 15 Jun 2021 01:35:06 -0700 (PDT) X-Google-Smtp-Source: ABdhPJxnLzT5T9cb6D1GcBqd1cCOoU3/9rfMYGNNLdbWwKqEydzh7vAoc+b8zysQ4blF4uo1EFxB X-Received: by 2002:aa7:d590:: with SMTP id r16mr22154480edq.355.1623746106314; Tue, 15 Jun 2021 01:35:06 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1623746106; cv=none; d=google.com; s=arc-20160816; b=QpUoC/CDrzhccfQFLckBPZ3pwRu2VEm8BVHUQmr2agto+ItCYErBB6hxq+4+uPhoEU FdVx3nX6koq+rYO1Bdl3v4omMsaBi5bvp3NZyDMlJOpJjQ/h9+/dL4jpLxbKcUUWJ939 70afmhdAkDYN477I8S0kNHhdURlEe8buwMLzY5sd6Ui7fh8R9usdw7lp1ghnNB61tQYz qgP9nLpnsCdlOrmyn/bfRE3tD5EpudliD/LCUm+m5o+tlwd1Ob4L1M+dcCXGYbvvPnzH 6UG8a/wVeCucUSurDKMj0FN/fK3dC6f0zW1AIvCFZzMn4SDeDUUm4MuTfEGWl0f7mKFm DG5Q== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:date:cc:to:subject:from:references:in-reply-to :message-id; bh=brSXSupKuMz2XTPfRX3IEBBOJ4tdhWH5JgrUvfy2iKs=; b=zj7Ag6WFIdRWn7JU3ZbxumEbdkmdAnisJB4ow84a4gyg5lBc5okeciNVqakGD8XsUt 9qd0TOMj+DtfvtcfWvDopmtw1nx1zZ+H/Z8b3iGr7qmp5OWE7nb3B3lTqYHA8DP7bbuC VE2OuSTF5lCp0z85QZbRdrssGU/v6niyiEMbmten/kctArIMmz8rcvkJVfzf4TfEA6l5 4+GYLoFQ9JA015VePuSHfMiC3bSvqQJrcmVRTHqhfhn9icIFE9Lmw5mftyQzvLxMJq4J F/TeCHgzZ5eXbOoi4QLr/ZRadVoHzvHw8o8aOZ0z4o8wsZWmzDKVruQbeubFOO9rNr1P 43zQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id o11si14508108eji.68.2021.06.15.01.34.44; Tue, 15 Jun 2021 01:35:06 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231191AbhFOIfh (ORCPT + 99 others); Tue, 15 Jun 2021 04:35:37 -0400 Received: from pegase1.c-s.fr ([93.17.236.30]:23497 "EHLO pegase1.c-s.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231178AbhFOIfd (ORCPT ); Tue, 15 Jun 2021 04:35:33 -0400 Received: from localhost (mailhub3.si.c-s.fr [192.168.12.233]) by localhost (Postfix) with ESMTP id 4G41mg4zvLzB8mB; Tue, 15 Jun 2021 10:33:23 +0200 (CEST) X-Virus-Scanned: amavisd-new at c-s.fr Received: from pegase1.c-s.fr ([192.168.12.234]) by localhost (pegase1.c-s.fr [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id wfQQf5NaQRu9; Tue, 15 Jun 2021 10:33:23 +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 4G41mg41v4zB8hP; Tue, 15 Jun 2021 10:33:23 +0200 (CEST) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 10E918B7B8; Tue, 15 Jun 2021 10:33:23 +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 GaSWeabT_J_J; Tue, 15 Jun 2021 10:33:23 +0200 (CEST) Received: from po9473vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 6E3C98B7AE; Tue, 15 Jun 2021 10:33:22 +0200 (CEST) Received: by po9473vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 4CF9766264; Tue, 15 Jun 2021 08:33:22 +0000 (UTC) Message-Id: In-Reply-To: <8071cd2e2f2bdc0711e6ac435dff4a09ff21fee2.1623745949.git.christophe.leroy@csgroup.eu> References: <8071cd2e2f2bdc0711e6ac435dff4a09ff21fee2.1623745949.git.christophe.leroy@csgroup.eu> From: Christophe Leroy Subject: [PATCH v3 2/5] powerpc/interrupt: Refactor interrupt_exit_user_prepare() To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , npiggin@gmail.com Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Date: Tue, 15 Jun 2021 08:33:22 +0000 (UTC) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org interrupt_exit_user_prepare() is a superset of interrupt_exit_user_prepare_main(). Refactor to avoid code duplication. Signed-off-by: Christophe Leroy --- arch/powerpc/kernel/interrupt.c | 57 ++------------------------------- 1 file changed, 3 insertions(+), 54 deletions(-) diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c index ba2d602d2da6..b9558372adc0 100644 --- a/arch/powerpc/kernel/interrupt.c +++ b/arch/powerpc/kernel/interrupt.c @@ -400,9 +400,7 @@ notrace unsigned long syscall_exit_restart(unsigned long r3, struct pt_regs *reg notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs) { - unsigned long ti_flags; - unsigned long flags; - unsigned long ret = 0; + unsigned long ret; if (!IS_ENABLED(CONFIG_BOOKE) && !IS_ENABLED(CONFIG_40x)) BUG_ON(!(regs->msr & MSR_RI)); @@ -416,63 +414,14 @@ notrace unsigned long interrupt_exit_user_prepare(struct pt_regs *regs) */ kuap_assert_locked(); - local_irq_save(flags); - -again: - ti_flags = READ_ONCE(current_thread_info()->flags); - while (unlikely(ti_flags & (_TIF_USER_WORK_MASK & ~_TIF_RESTORE_TM))) { - local_irq_enable(); /* returning to user: may enable */ - if (ti_flags & _TIF_NEED_RESCHED) { - schedule(); - } else { - if (ti_flags & _TIF_SIGPENDING) - ret |= _TIF_RESTOREALL; - do_notify_resume(regs, ti_flags); - } - local_irq_disable(); - ti_flags = READ_ONCE(current_thread_info()->flags); - } - - if (IS_ENABLED(CONFIG_PPC_BOOK3S_64) && IS_ENABLED(CONFIG_PPC_FPU)) { - if (IS_ENABLED(CONFIG_PPC_TRANSACTIONAL_MEM) && - unlikely((ti_flags & _TIF_RESTORE_TM))) { - restore_tm_state(regs); - } else { - unsigned long mathflags = MSR_FP; - - if (cpu_has_feature(CPU_FTR_VSX)) - mathflags |= MSR_VEC | MSR_VSX; - else if (cpu_has_feature(CPU_FTR_ALTIVEC)) - mathflags |= MSR_VEC; - - /* See above restore_math comment */ - if ((regs->msr & mathflags) != mathflags) - restore_math(regs); - } - } - - if (!prep_irq_for_user_exit()) { - local_irq_enable(); - local_irq_disable(); - goto again; - } - - booke_load_dbcr0(); - -#ifdef CONFIG_PPC_TRANSACTIONAL_MEM - local_paca->tm_scratch = regs->msr; -#endif + local_irq_disable(); - account_cpu_user_exit(); + ret = interrupt_exit_user_prepare_main(regs, 0); #ifdef CONFIG_PPC64 regs->exit_result = ret; #endif - /* Restore user access locks last */ - kuap_user_restore(regs); - kuep_unlock(); - return ret; } -- 2.25.0