Received: by 2002:a05:6a10:9848:0:0:0:0 with SMTP id x8csp1214258pxf; Fri, 12 Mar 2021 04:54:25 -0800 (PST) X-Google-Smtp-Source: ABdhPJw4e9vGXvs5r6qvEZ2k3ePS3/R1LQiORiQ5iiROS8l6/E4ZzKEIvcDTJlZPfL30XIYibfbJ X-Received: by 2002:a17:907:2642:: with SMTP id ar2mr8388072ejc.145.1615553664739; Fri, 12 Mar 2021 04:54:24 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1615553664; cv=none; d=google.com; s=arc-20160816; b=IyqFlFDAiFqyVqVfdXtmuZcfASKkpCC9lo4w/NTBFlDQGpeAftV1cE4mQADDIVulIu uZGvuli5ZE4ukwK1X3V/FvHrTO4SwmRIrbO4cXybuowgHm6+RtfLpIAjJVlN0xFflFtA FSBeuswBIyDmHf3EcnuABLgFqUwswsYRj1KYQeO0W1ssCIOyEhS62NR5ki4yhqO5o3ch wTpdWs9T55Y4AgfHDhlhnGyeeJUPmUarRp1gYAiTHZ035wZkX+UJV2uiwsoAo3RuMa5r zyb9ZANuAONzTHVgmkEOm66SB403t0OuXkh0q6zjTQ1BHbT2Rvy8xCqL2ofvXCf/ERRx 0BBg== 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:message-id; bh=XrVSlEqAjsQ3f1/9YrHOXRIbu9tA74bI6utA//Dog4s=; b=AwcBqnNoZXejoX6pjADns73d1Fn3rF7dpkQtXDxT9pkKgo7W1DjJTGmCly9JR8Tsxc aYK/JBreTlW52JKyjZvkHlMrTuCmszk+eIxCWgoWatWrmdmPfQnG3EjHeW5ywz55v/J3 2VaAtOBcVmBMvEeavl9V4rUoILFTmki/ChCwc5spw3L2TyeYneRYDY0vLxjgzrsERdrI 9uLGVRBSmQPGQtJpK8zNiTQgTXtMPQ1nOCxJl0h82jx+z/d/2SnfCgzSU7M4X8kkUouE nYFhk++u1NAFiwyC3jtbWmqISKzHao2mkZKSi184c2THZrnjqA4m/ZJUHZHqY8xRQsxS dGUw== 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 ce10si3661651ejb.123.2021.03.12.04.54.00; Fri, 12 Mar 2021 04:54:24 -0800 (PST) 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 S231857AbhCLMup (ORCPT + 99 others); Fri, 12 Mar 2021 07:50:45 -0500 Received: from pegase1.c-s.fr ([93.17.236.30]:5742 "EHLO pegase1.c-s.fr" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231233AbhCLMuO (ORCPT ); Fri, 12 Mar 2021 07:50:14 -0500 Received: from localhost (mailhub1-int [192.168.12.234]) by localhost (Postfix) with ESMTP id 4Dxlyn2G9gz9ttBT; Fri, 12 Mar 2021 13:50:09 +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 7_3cVO9A2b4k; Fri, 12 Mar 2021 13:50:09 +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 4Dxlyn0nTwz9ttBS; Fri, 12 Mar 2021 13:50:09 +0100 (CET) Received: from localhost (localhost [127.0.0.1]) by messagerie.si.c-s.fr (Postfix) with ESMTP id 12BDC8B812; Fri, 12 Mar 2021 13:50:10 +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 xV5S4nz9J9b7; Fri, 12 Mar 2021 13:50:09 +0100 (CET) Received: from po16121vm.idsi0.si.c-s.fr (unknown [192.168.4.90]) by messagerie.si.c-s.fr (Postfix) with ESMTP id B56408B764; Fri, 12 Mar 2021 13:50:09 +0100 (CET) Received: by po16121vm.idsi0.si.c-s.fr (Postfix, from userid 0) id 5C146675C9; Fri, 12 Mar 2021 12:50:09 +0000 (UTC) Message-Id: From: Christophe Leroy Subject: [PATCH v3 00/41] powerpc/32: Switch to interrupt entry/exit in C To: Benjamin Herrenschmidt , Paul Mackerras , Michael Ellerman , npiggin@gmail.com Cc: linux-kernel@vger.kernel.org, linuxppc-dev@lists.ozlabs.org Date: Fri, 12 Mar 2021 12:50:09 +0000 (UTC) Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org This series aims at porting interrupt entry/exit in C on PPC32, using the work already merged for PPC64. First patch is an optimisation around unrecoverable_exception() function. Six following patches do minimal changes in 40x in order to be able to enable MMU earlier in exception entry. Second part of the series prepares and switches interrupt exit in C. Third part moves more and more things in C, ending with KUAP management. v3 is tested on 8xx and 83xx and qemu mac99 and qemu bamboo. Changes in v3: - Remove the WARN in first patch - Fix oopses due fast_interrupt_return clobering registers after FPunavailable expection. - Only call restore_math if PPC64 - Rename C version of kuap_{get_and_}check() into kuap_{get_and_}assert_locked(). - Drop the patch to call bad_page_fault() from do_page_fault() on book3e/64 - Remove the unneeded setting of current->thread.regs on every interrupt entry from user. Changes in v2: - Two first patches are new. - Mainly build fixes, nothing much new. Christophe Leroy (41): powerpc/traps: Declare unrecoverable_exception() as __noreturn powerpc/40x: Don't use SPRN_SPRG_SCRATCH0/1 in TLB miss handlers powerpc/40x: Change CRITICAL_EXCEPTION_PROLOG macro to a gas macro powerpc/40x: Save SRR0/SRR1 and r10/r11 earlier in critical exception powerpc/40x: Reorder a few instructions in critical exception prolog powerpc/40x: Prepare for enabling MMU in critical exception prolog powerpc/40x: Prepare normal exception handler for enabling MMU early powerpc/32: Reconcile interrupts in C powerpc/32: Entry cpu time accounting in C powerpc/32: Handle bookE debugging in C in exception entry powerpc/32: Use fast instruction to set MSR RI in exception prolog on 8xx powerpc/32: Remove ksp_limit powerpc/32: Always enable data translation in exception prolog powerpc/32: Tag DAR in EXCEPTION_PROLOG_2 for the 8xx powerpc/32: Enable instruction translation at the same time as data translation powerpc/32: Statically initialise first emergency context powerpc/32: Add vmap_stack_overflow label inside the macro powerpc/32: Use START_EXCEPTION() as much as possible powerpc/32: Move exception prolog code into .text once MMU is back on powerpc/32: Provide a name to exception prolog continuation in virtual mode powerpc/32: Refactor booke critical registers saving powerpc/32: Perform normal function call in exception entry powerpc/32: Always save non volatile registers on exception entry powerpc/32: Replace ASM exception exit by C exception exit from ppc64 powerpc/32: Don't save thread.regs on interrupt entry powerpc/32: Set regs parameter in r3 in transfer_to_handler powerpc/32: Call bad_page_fault() from do_page_fault() powerpc/32: Save trap number on stack in exception prolog powerpc/32: Add a prepare_transfer_to_handler macro for exception prologs powerpc/32: Only restore non volatile registers when required powerpc/32: Dismantle EXC_XFER_STD/LITE/TEMPLATE powerpc/32: Remove the xfer parameter in EXCEPTION() macro powerpc/32: Refactor saving of volatile registers in exception prologs powerpc/32: Save remaining registers in exception prolog powerpc/32: Return directly from power_save_ppc32_restore() powerpc/32: Only use prepare_transfer_to_handler function on book3s/32 and e500 powerpc/32s: Move KUEP locking/unlocking in C powerpc/64s: Make kuap_check_amr() and kuap_get_and_check_amr() generic powerpc/32s: Create C version of kuap save/restore/check helpers powerpc/8xx: Create C version of kuap save/restore/check helpers powerpc/32: Manage KUAP in C arch/powerpc/include/asm/book3s/32/kup.h | 126 ++- arch/powerpc/include/asm/book3s/64/kup.h | 24 +- arch/powerpc/include/asm/interrupt.h | 17 +- arch/powerpc/include/asm/kup.h | 27 +- arch/powerpc/include/asm/nohash/32/kup-8xx.h | 56 +- arch/powerpc/include/asm/ppc_asm.h | 10 - arch/powerpc/include/asm/processor.h | 6 +- arch/powerpc/include/asm/ptrace.h | 6 +- arch/powerpc/kernel/asm-offsets.c | 4 - arch/powerpc/kernel/entry_32.S | 796 ++++--------------- arch/powerpc/kernel/fpu.S | 2 - arch/powerpc/kernel/head_32.h | 198 ++--- arch/powerpc/kernel/head_40x.S | 271 ++++--- arch/powerpc/kernel/head_44x.S | 10 +- arch/powerpc/kernel/head_8xx.S | 151 ++-- arch/powerpc/kernel/head_book3s_32.S | 233 +++--- arch/powerpc/kernel/head_booke.h | 203 +++-- arch/powerpc/kernel/head_fsl_booke.S | 64 +- arch/powerpc/kernel/idle_6xx.S | 14 +- arch/powerpc/kernel/idle_e500.S | 14 +- arch/powerpc/kernel/interrupt.c | 41 +- arch/powerpc/kernel/irq.c | 2 +- arch/powerpc/kernel/misc_32.S | 14 - arch/powerpc/kernel/process.c | 6 +- arch/powerpc/kernel/setup_32.c | 2 +- arch/powerpc/kernel/traps.c | 14 +- arch/powerpc/kernel/vector.S | 2 - arch/powerpc/lib/sstep.c | 9 - arch/powerpc/mm/book3s32/Makefile | 1 + arch/powerpc/mm/book3s32/hash_low.S | 14 - arch/powerpc/mm/book3s32/kuep.c | 38 + arch/powerpc/mm/fault.c | 2 +- 32 files changed, 887 insertions(+), 1490 deletions(-) create mode 100644 arch/powerpc/mm/book3s32/kuep.c -- 2.25.0