From: Cyril Bur <cyrilbur@gmail.com>
To: mikey@neuling.org, benh@kernel.crashing.org,
linuxppc-dev@lists.ozlabs.org
Subject: [RFC PATCH 07/12] [WIP] powerpc/tm: Add TM_KERNEL_ENTRY in more delicate exception pathes
Date: Tue, 20 Feb 2018 11:22:36 +1100 [thread overview]
Message-ID: <20180220002241.29648-8-cyrilbur@gmail.com> (raw)
In-Reply-To: <20180220002241.29648-1-cyrilbur@gmail.com>
---
arch/powerpc/kernel/entry_64.S | 15 ++++++++++++++-
arch/powerpc/kernel/exceptions-64s.S | 31 ++++++++++++++++++++++++++++---
2 files changed, 42 insertions(+), 4 deletions(-)
diff --git a/arch/powerpc/kernel/entry_64.S b/arch/powerpc/kernel/entry_64.S
index 107c15c6f48b..32e8d8f7e091 100644
--- a/arch/powerpc/kernel/entry_64.S
+++ b/arch/powerpc/kernel/entry_64.S
@@ -967,7 +967,20 @@ END_FTR_SECTION_IFSET(CPU_FTR_HAS_PPR)
bl __check_irq_replay
cmpwi cr0,r3,0
beq .Lrestore_no_replay
-
+
+ /*
+ * We decide VERY late if we need to replay interrupts, theres
+ * not much which can be done about that so this will have to
+ * do
+ */
+ TM_KERNEL_ENTRY
+ /*
+ * This will restore r3 that TM_KERNEL_ENTRY clobbered.
+ * Clearly not ideal! I wonder if we could change the trap
+ * value beforehand...
+ */
+ bl __check_irq_replay
+
/*
* We need to re-emit an interrupt. We do so by re-using our
* existing exception frame. We first change the trap value,
diff --git a/arch/powerpc/kernel/exceptions-64s.S b/arch/powerpc/kernel/exceptions-64s.S
index 3ac87e53b3da..c8899bf77fb0 100644
--- a/arch/powerpc/kernel/exceptions-64s.S
+++ b/arch/powerpc/kernel/exceptions-64s.S
@@ -504,6 +504,11 @@ EXC_COMMON_BEGIN(data_access_common)
li r5,0x300
std r3,_DAR(r1)
std r4,_DSISR(r1)
+ /*
+ * Can't do TM_KERNEL_ENTRY here as do_hash_page might jump to
+ * very late in the expection exit code, well after any
+ * possiblity of doing a recheckpoint
+ */
BEGIN_MMU_FTR_SECTION
b do_hash_page /* Try to handle as hpte fault */
MMU_FTR_SECTION_ELSE
@@ -548,6 +553,11 @@ EXC_COMMON_BEGIN(instruction_access_common)
li r5,0x400
std r3,_DAR(r1)
std r4,_DSISR(r1)
+ /*
+ * Can't do TM_KERNEL_ENTRY here as do_hash_page might jump to
+ * very late in the expection exit code, well after any
+ * possiblity of doing a recheckpoint
+ */
BEGIN_MMU_FTR_SECTION
b do_hash_page /* Try to handle as hpte fault */
MMU_FTR_SECTION_ELSE
@@ -761,6 +771,7 @@ EXC_COMMON_BEGIN(alignment_common)
std r4,_DSISR(r1)
bl save_nvgprs
RECONCILE_IRQ_STATE(r10, r11)
+ TM_KERNEL_ENTRY
addi r3,r1,STACK_FRAME_OVERHEAD
bl alignment_exception
b ret_from_except
@@ -1668,7 +1679,9 @@ do_hash_page:
/* Here we have a page fault that hash_page can't handle. */
handle_page_fault:
-11: andis. r0,r4,DSISR_DABRMATCH@h
+11: TM_KERNEL_ENTRY
+ ld r4,_DSISR(r1)
+ andis. r0,r4,DSISR_DABRMATCH@h
bne- handle_dabr_fault
ld r4,_DAR(r1)
ld r5,_DSISR(r1)
@@ -1685,6 +1698,10 @@ handle_page_fault:
/* We have a data breakpoint exception - handle it */
handle_dabr_fault:
+ /*
+ * Don't need to do TM_KERNEL_ENTRY here as we'll
+ * come from handle_page_fault: which has done it already
+ */
bl save_nvgprs
ld r4,_DAR(r1)
ld r5,_DSISR(r1)
@@ -1698,7 +1715,14 @@ handle_dabr_fault:
* the PTE insertion
*/
13: bl save_nvgprs
- mr r5,r3
+ /*
+ * Use a non-volatile as the TM code will call, r3 is the
+ * return value from __hash_page() so not exactly easy to get
+ * again.
+ */
+ mr r31,r3
+ TM_KERNEL_ENTRY
+ mr r5, r31
addi r3,r1,STACK_FRAME_OVERHEAD
ld r4,_DAR(r1)
bl low_hash_fault
@@ -1713,7 +1737,8 @@ handle_dabr_fault:
* the access, or panic if there isn't a handler.
*/
77: bl save_nvgprs
- mr r4,r3
+ TM_KERNEL_ENTRY
+ ld r4,_DAR(r1)
addi r3,r1,STACK_FRAME_OVERHEAD
li r5,SIGSEGV
bl bad_page_fault
--
2.16.2
next prev parent reply other threads:[~2018-02-20 0:23 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2018-02-20 0:22 [RFC PATCH 00/12] Deal with TM on kernel entry and exit Cyril Bur
2018-02-20 0:22 ` [RFC PATCH 01/12] powerpc/tm: Remove struct thread_info param from tm_reclaim_thread() Cyril Bur
2018-02-20 0:22 ` [RFC PATCH 02/12] selftests/powerpc: Fix tm.h helpers Cyril Bur
2018-02-20 0:22 ` [RFC PATCH 03/12] selftests/powerpc: Add tm-signal-drop-transaction TM test Cyril Bur
2018-02-20 0:22 ` [RFC PATCH 04/12] selftests/powerpc: Use less common thread names Cyril Bur
2018-02-20 0:22 ` [RFC PATCH 05/12] [WIP] powerpc/tm: Reclaim/recheckpoint on entry/exit Cyril Bur
2018-02-20 2:50 ` Michael Neuling
2018-02-20 3:54 ` Cyril Bur
2018-02-20 5:25 ` Michael Neuling
2018-02-20 6:32 ` Cyril Bur
2018-02-20 0:22 ` [RFC PATCH 06/12] [WIP] powerpc/tm: Remove dead code from __switch_to_tm() Cyril Bur
2018-02-20 2:52 ` Michael Neuling
2018-02-20 3:43 ` Cyril Bur
2018-02-20 0:22 ` Cyril Bur [this message]
2018-02-20 0:22 ` [RFC PATCH 08/12] [WIP] powerpc/tm: Fix *unavailable_tm exceptions Cyril Bur
2018-02-20 0:22 ` [RFC PATCH 09/12] [WIP] powerpc/tm: Tweak signal code to handle new reclaim/recheckpoint times Cyril Bur
2018-02-20 0:22 ` [RFC PATCH 10/12] [WIP] powerpc/tm: Correctly save/restore checkpointed sprs Cyril Bur
2018-02-20 3:00 ` Michael Neuling
2018-02-20 3:59 ` Cyril Bur
2018-02-20 5:27 ` Michael Neuling
2018-02-20 0:22 ` [RFC PATCH 11/12] [WIP] powerpc/tm: Afterthoughts Cyril Bur
2018-02-20 0:22 ` [RFC PATCH 12/12] [WIP] selftests/powerpc: Remove incorrect tm-syscall selftest Cyril Bur
2018-02-20 3:04 ` Michael Neuling
2018-02-20 3:42 ` Cyril Bur
2018-06-13 22:38 ` [RFC,00/12] Deal with TM on kernel entry and exit Breno Leitao
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=20180220002241.29648-8-cyrilbur@gmail.com \
--to=cyrilbur@gmail.com \
--cc=benh@kernel.crashing.org \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=mikey@neuling.org \
/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: link
Be 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.