From: Michal Suchanek <msuchanek@suse.de> To: linuxppc-dev@lists.ozlabs.org Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org>, Paul Mackerras <paulus@samba.org>, Michael Ellerman <mpe@ellerman.id.au>, Oleg Nesterov <oleg@redhat.com>, Alexander Viro <viro@zeniv.linux.org.uk>, Christian Brauner <christian@brauner.io>, Nicholas Piggin <npiggin@gmail.com>, Allison Randal <allison@lohutok.net>, "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>, Michal Suchanek <msuchanek@suse.de>, Thomas Gleixner <tglx@linutronix.de>, Breno Leitao <leitao@debian.org>, Christophe Leroy <christophe.leroy@c-s.fr>, Claudio Carvalho <cclaudio@linux.ibm.com>, Russell Currey <ruscur@russell.cc>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>, Arnd Bergmann <arnd@arndb.de>, Geert Uytterhoeven <geert@linux-m68k.org>, Firoz Khan <firoz.khan@linaro.org>, Dmitry Vyukov <dvyukov@google.com>, Masahiro Yamada <yamada.masahiro@socionext.com>, Hari Bathini <hbathini@linux.ibm.com>, Andrew Donnellan <andrew.donnellan@au1.ibm.com>, Nicolai Stange <nstange@suse.de>, Valentin Schneider <valentin.schneider@arm.com>, Diana Craciun <diana.craciun@nxp.com>, Daniel Axtens <dja@axtens.net>, Michael Neuling <mikey@neuling.org>, Gustavo Romero <gromero@linux.ibm.com>, Mathieu Malaterre <malat@debian.org>, "Steven Rostedt" <rostedt@goodmis.org>, "Eric W. Biederman" <ebiederm@xmission.com>, Heiko Carstens <heiko.carstens@de.ibm.com>, David Howells <dhowells@redhat.com>, Brajeswar Ghosh <brajeswar.linux@gmail.com>, Jagadeesh Pagadala <jagdsh.linux@gmail.com>, David Hildenbrand <david@redhat.com>, Andrew Morton <akpm@linux-foundation.org>, Madhavan Srinivasan <maddy@linux.vnet.ibm.com>, linux-kernel@vger.kernel.org Subject: [PATCH 25/33] powerpc/64s/exception: remove lite interrupt return Date: Tue, 12 Nov 2019 17:52:23 +0100 [thread overview] Message-ID: <b7166cac80cefc561e30a6c6c324384b973081b4.1573576649.git.msuchanek@suse.de> (raw) In-Reply-To: <cover.1573576649.git.msuchanek@suse.de> From: Nicholas Piggin <npiggin@gmail.com> The difference between lite and regular returns is that the lite case restores all NVGPRs, whereas lite skips that. This is quite clumsy though, most interrupts want the NVGPRs saved for debugging, not to modify in the caller, so the NVGPRs restore is not necessary most of the time. Restore NVGPRs explicitly for one case that requires it, and move everything else over to avoiding the restore unless the interrupt return demands it (e.g., handling a signal). Signed-off-by: Nicholas Piggin <npiggin@gmail.com> --- arch/powerpc/kernel/entry_64.S | 4 ---- arch/powerpc/kernel/exceptions-64s.S | 21 +++++++++++---------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index b2e68f5ca8f7..00173cc904ef 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S @@ -452,10 +452,6 @@ _GLOBAL(fast_interrupt_return) .balign IFETCH_ALIGN_BYTES _GLOBAL(interrupt_return) - REST_NVGPRS(r1) - - .balign IFETCH_ALIGN_BYTES -_GLOBAL(interrupt_return_lite) ld r4,_MSR(r1) andi. r0,r4,MSR_PR beq kernel_interrupt_return diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index 269edd1460be..1bccc869ebd3 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S @@ -1507,7 +1507,7 @@ EXC_COMMON_BEGIN(hardware_interrupt_common) RUNLATCH_ON addi r3,r1,STACK_FRAME_OVERHEAD bl do_IRQ - b interrupt_return_lite + b interrupt_return GEN_KVM hardware_interrupt @@ -1694,7 +1694,7 @@ EXC_COMMON_BEGIN(decrementer_common) RUNLATCH_ON addi r3,r1,STACK_FRAME_OVERHEAD bl timer_interrupt - b interrupt_return_lite + b interrupt_return GEN_KVM decrementer @@ -1785,7 +1785,7 @@ EXC_COMMON_BEGIN(doorbell_super_common) #else bl unknown_exception #endif - b interrupt_return_lite + b interrupt_return GEN_KVM doorbell_super @@ -2183,7 +2183,7 @@ EXC_COMMON_BEGIN(h_doorbell_common) #else bl unknown_exception #endif - b interrupt_return_lite + b interrupt_return GEN_KVM h_doorbell @@ -2213,7 +2213,7 @@ EXC_COMMON_BEGIN(h_virt_irq_common) RUNLATCH_ON addi r3,r1,STACK_FRAME_OVERHEAD bl do_IRQ - b interrupt_return_lite + b interrupt_return GEN_KVM h_virt_irq @@ -2260,7 +2260,7 @@ EXC_COMMON_BEGIN(performance_monitor_common) RUNLATCH_ON addi r3,r1,STACK_FRAME_OVERHEAD bl performance_monitor_exception - b interrupt_return_lite + b interrupt_return GEN_KVM performance_monitor @@ -3013,7 +3013,7 @@ do_hash_page: cmpdi r3,0 /* see if __hash_page succeeded */ /* Success */ - beq interrupt_return_lite /* Return from exception on success */ + beq interrupt_return /* Return from exception on success */ /* Error */ blt- 13f @@ -3027,10 +3027,11 @@ do_hash_page: handle_page_fault: 11: andis. r0,r5,DSISR_DABRMATCH@h bne- handle_dabr_fault + bl save_nvgprs addi r3,r1,STACK_FRAME_OVERHEAD bl do_page_fault cmpdi r3,0 - beq+ interrupt_return_lite + beq+ interrupt_return mr r5,r3 addi r3,r1,STACK_FRAME_OVERHEAD ld r4,_DAR(r1) @@ -3045,9 +3046,9 @@ handle_dabr_fault: bl do_break /* * do_break() may have changed the NV GPRS while handling a breakpoint. - * If so, we need to restore them with their updated values. Don't use - * interrupt_return_lite here. + * If so, we need to restore them with their updated values. */ + REST_NVGPRS(r1) b interrupt_return -- 2.23.0
WARNING: multiple messages have this Message-ID (diff)
From: Michal Suchanek <msuchanek@suse.de> To: linuxppc-dev@lists.ozlabs.org Cc: Madhavan Srinivasan <maddy@linux.vnet.ibm.com>, David Hildenbrand <david@redhat.com>, Heiko Carstens <heiko.carstens@de.ibm.com>, Claudio Carvalho <cclaudio@linux.ibm.com>, David Howells <dhowells@redhat.com>, Masahiro Yamada <yamada.masahiro@socionext.com>, Paul Mackerras <paulus@samba.org>, Christian Brauner <christian@brauner.io>, Breno Leitao <leitao@debian.org>, Michael Neuling <mikey@neuling.org>, Nicolai Stange <nstange@suse.de>, Diana Craciun <diana.craciun@nxp.com>, Firoz Khan <firoz.khan@linaro.org>, Allison Randal <allison@lohutok.net>, Mahesh Salgaonkar <mahesh@linux.vnet.ibm.com>, Geert Uytterhoeven <geert@linux-m68k.org>, "Naveen N. Rao" <naveen.n.rao@linux.vnet.ibm.com>, Michal Suchanek <msuchanek@suse.de>, Valentin Schneider <valentin.schneider@arm.com>, Jagadeesh Pagadala <jagdsh.linux@gmail.com>, Arnd Bergmann <arnd@arndb.de>, Nicholas Piggin <npiggin@gmail.com>, Alexander Viro <viro@zeniv.linux.org.uk>, Steven Rostedt <rostedt@goodmis.org>, Thomas Gleixner <tglx@linutronix.de>, Dmitry Vyukov <dvyukov@google.com>, Daniel Axtens <dja@axtens.net>, Gustavo Romero <gromero@linux.ibm.com>, Mathieu Malaterre <malat@debian.org>, Greg Kroah-Hartman <gregkh@linuxfoundation.org>, Oleg Nesterov <oleg@redhat.com>, linux-kernel@vger.kernel.org, "Eric W. Biederman" <ebiederm@xmission.com>, Andrew Donnellan <andrew.donnellan@au1.ibm.com>, Brajeswar Ghosh <brajeswar.linux@gmail.com>, Hari Bathini <hbathini@linux.ibm.com>, Andrew Morton <akpm@linux-foundation.org> Subject: [PATCH 25/33] powerpc/64s/exception: remove lite interrupt return Date: Tue, 12 Nov 2019 17:52:23 +0100 [thread overview] Message-ID: <b7166cac80cefc561e30a6c6c324384b973081b4.1573576649.git.msuchanek@suse.de> (raw) In-Reply-To: <cover.1573576649.git.msuchanek@suse.de> From: Nicholas Piggin <npiggin@gmail.com> The difference between lite and regular returns is that the lite case restores all NVGPRs, whereas lite skips that. This is quite clumsy though, most interrupts want the NVGPRs saved for debugging, not to modify in the caller, so the NVGPRs restore is not necessary most of the time. Restore NVGPRs explicitly for one case that requires it, and move everything else over to avoiding the restore unless the interrupt return demands it (e.g., handling a signal). Signed-off-by: Nicholas Piggin <npiggin@gmail.com> --- arch/powerpc/kernel/entry_64.S | 4 ---- arch/powerpc/kernel/exceptions-64s.S | 21 +++++++++++---------- 2 files changed, 11 insertions(+), 14 deletions(-) diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S index b2e68f5ca8f7..00173cc904ef 100644 --- a/arch/powerpc/kernel/entry_64.S +++ b/arch/powerpc/kernel/entry_64.S @@ -452,10 +452,6 @@ _GLOBAL(fast_interrupt_return) .balign IFETCH_ALIGN_BYTES _GLOBAL(interrupt_return) - REST_NVGPRS(r1) - - .balign IFETCH_ALIGN_BYTES -_GLOBAL(interrupt_return_lite) ld r4,_MSR(r1) andi. r0,r4,MSR_PR beq kernel_interrupt_return diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S index 269edd1460be..1bccc869ebd3 100644 --- a/arch/powerpc/kernel/exceptions-64s.S +++ b/arch/powerpc/kernel/exceptions-64s.S @@ -1507,7 +1507,7 @@ EXC_COMMON_BEGIN(hardware_interrupt_common) RUNLATCH_ON addi r3,r1,STACK_FRAME_OVERHEAD bl do_IRQ - b interrupt_return_lite + b interrupt_return GEN_KVM hardware_interrupt @@ -1694,7 +1694,7 @@ EXC_COMMON_BEGIN(decrementer_common) RUNLATCH_ON addi r3,r1,STACK_FRAME_OVERHEAD bl timer_interrupt - b interrupt_return_lite + b interrupt_return GEN_KVM decrementer @@ -1785,7 +1785,7 @@ EXC_COMMON_BEGIN(doorbell_super_common) #else bl unknown_exception #endif - b interrupt_return_lite + b interrupt_return GEN_KVM doorbell_super @@ -2183,7 +2183,7 @@ EXC_COMMON_BEGIN(h_doorbell_common) #else bl unknown_exception #endif - b interrupt_return_lite + b interrupt_return GEN_KVM h_doorbell @@ -2213,7 +2213,7 @@ EXC_COMMON_BEGIN(h_virt_irq_common) RUNLATCH_ON addi r3,r1,STACK_FRAME_OVERHEAD bl do_IRQ - b interrupt_return_lite + b interrupt_return GEN_KVM h_virt_irq @@ -2260,7 +2260,7 @@ EXC_COMMON_BEGIN(performance_monitor_common) RUNLATCH_ON addi r3,r1,STACK_FRAME_OVERHEAD bl performance_monitor_exception - b interrupt_return_lite + b interrupt_return GEN_KVM performance_monitor @@ -3013,7 +3013,7 @@ do_hash_page: cmpdi r3,0 /* see if __hash_page succeeded */ /* Success */ - beq interrupt_return_lite /* Return from exception on success */ + beq interrupt_return /* Return from exception on success */ /* Error */ blt- 13f @@ -3027,10 +3027,11 @@ do_hash_page: handle_page_fault: 11: andis. r0,r5,DSISR_DABRMATCH@h bne- handle_dabr_fault + bl save_nvgprs addi r3,r1,STACK_FRAME_OVERHEAD bl do_page_fault cmpdi r3,0 - beq+ interrupt_return_lite + beq+ interrupt_return mr r5,r3 addi r3,r1,STACK_FRAME_OVERHEAD ld r4,_DAR(r1) @@ -3045,9 +3046,9 @@ handle_dabr_fault: bl do_break /* * do_break() may have changed the NV GPRS while handling a breakpoint. - * If so, we need to restore them with their updated values. Don't use - * interrupt_return_lite here. + * If so, we need to restore them with their updated values. */ + REST_NVGPRS(r1) b interrupt_return -- 2.23.0
next prev parent reply other threads:[~2019-11-12 16:55 UTC|newest] Thread overview: 74+ messages / expand[flat|nested] mbox.gz Atom feed top 2019-11-12 16:51 [PATCH 00/33] exception cleanup, syscall in C and !COMPAT Michal Suchanek 2019-11-12 16:51 ` Michal Suchanek 2019-11-12 16:51 ` [PATCH 01/33] powerpc/64s/exception: Introduce INT_DEFINE parameter block for code generation Michal Suchanek 2019-11-12 16:51 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 02/33] powerpc/64s/exception: Add GEN_COMMON macro that uses INT_DEFINE parameters Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 03/33] powerpc/64s/exception: Add GEN_KVM " Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 04/33] powerpc/64s/exception: Expand EXC_COMMON and EXC_COMMON_ASYNC macros Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 05/33] powerpc/64s/exception: Move all interrupt handlers to new style code gen macros Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 06/33] powerpc/64s/exception: Remove old INT_ENTRY macro Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 07/33] powerpc/64s/exception: Remove old INT_COMMON macro Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 08/33] powerpc/64s/exception: Remove old INT_KVM_HANDLER Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 09/33] powerpc/64s/exception: Add ISIDE option Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 10/33] powerpc/64s/exception: move real->virt switch into the common handler Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 11/33] powerpc/64s/exception: move soft-mask test to common code Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 12/33] powerpc/64s/exception: move KVM " Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 13/33] powerpc/64s/exception: remove confusing IEARLY option Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 14/33] powerpc/64s/exception: remove the SPR saving patch code macros Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 15/33] powerpc/64s/exception: trim unused arguments from KVMTEST macro Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 16/33] powerpc/64s/exception: hdecrementer avoid touching the stack Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 17/33] powerpc/64s/exception: re-inline some handlers Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 18/33] powerpc/64s/exception: Clean up SRR specifiers Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 19/33] powerpc/64s/exception: add more comments for interrupt handlers Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 20/33] powerpc/64s/exception: only test KVM in SRR interrupts when PR KVM is supported Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 21/33] powerpc/64s/exception: soft nmi interrupt should not use ret_from_except Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 22/33] powerpc/64: system call remove non-volatile GPR save optimisation Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 23/33] powerpc/64: system call implement the bulk of the logic in C Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 24/33] powerpc/64s: interrupt return " Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek [this message] 2019-11-12 16:52 ` [PATCH 25/33] powerpc/64s/exception: remove lite interrupt return Michal Suchanek 2019-11-12 16:52 ` [PATCH 26/33] powerpc: Add back __ARCH_WANT_SYS_LLSEEK macro Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 27/33] powerpc: move common register copy functions from signal_32.c to signal.c Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 28/33] powerpc/perf: consolidate read_user_stack_32 Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 29/33] powerpc/perf: consolidate valid_user_sp Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 30/33] powerpc/perf: remove current_is_64bit() Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 31/33] powerpc/64: make buildable without CONFIG_COMPAT Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-13 3:02 ` Nicholas Piggin 2019-11-13 3:02 ` Nicholas Piggin 2019-11-13 8:41 ` Michal Suchánek 2019-11-13 8:41 ` Michal Suchánek 2019-11-13 10:04 ` Arnd Bergmann 2019-11-13 10:04 ` Arnd Bergmann 2019-11-12 16:52 ` [PATCH 32/33] powerpc/64: Make COMPAT user-selectable disabled on littleendian by default Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek 2019-11-12 16:52 ` [PATCH 33/33] powerpc/perf: split callchain.c by bitness Michal Suchanek 2019-11-12 16:52 ` Michal Suchanek
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=b7166cac80cefc561e30a6c6c324384b973081b4.1573576649.git.msuchanek@suse.de \ --to=msuchanek@suse.de \ --cc=akpm@linux-foundation.org \ --cc=allison@lohutok.net \ --cc=andrew.donnellan@au1.ibm.com \ --cc=arnd@arndb.de \ --cc=benh@kernel.crashing.org \ --cc=brajeswar.linux@gmail.com \ --cc=cclaudio@linux.ibm.com \ --cc=christian@brauner.io \ --cc=christophe.leroy@c-s.fr \ --cc=david@redhat.com \ --cc=dhowells@redhat.com \ --cc=diana.craciun@nxp.com \ --cc=dja@axtens.net \ --cc=dvyukov@google.com \ --cc=ebiederm@xmission.com \ --cc=firoz.khan@linaro.org \ --cc=geert@linux-m68k.org \ --cc=gregkh@linuxfoundation.org \ --cc=gromero@linux.ibm.com \ --cc=hbathini@linux.ibm.com \ --cc=heiko.carstens@de.ibm.com \ --cc=jagdsh.linux@gmail.com \ --cc=leitao@debian.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linuxppc-dev@lists.ozlabs.org \ --cc=maddy@linux.vnet.ibm.com \ --cc=mahesh@linux.vnet.ibm.com \ --cc=malat@debian.org \ --cc=mikey@neuling.org \ --cc=mpe@ellerman.id.au \ --cc=naveen.n.rao@linux.vnet.ibm.com \ --cc=npiggin@gmail.com \ --cc=nstange@suse.de \ --cc=oleg@redhat.com \ --cc=paulus@samba.org \ --cc=rostedt@goodmis.org \ --cc=ruscur@russell.cc \ --cc=tglx@linutronix.de \ --cc=valentin.schneider@arm.com \ --cc=viro@zeniv.linux.org.uk \ --cc=yamada.masahiro@socionext.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.