From: Rohan McLure <rmclure@linux.ibm.com>
To: linuxppc-dev@lists.ozlabs.org
Cc: Rohan McLure <rmclure@linux.ibm.com>, npiggin@gmail.com, arnd@arndb.de
Subject: [PATCH 05/12] powerpc: Mark [h]ssr_valid accesses in check_return_regs_valid
Date: Mon, 8 May 2023 12:01:13 +1000 [thread overview]
Message-ID: <20230508020120.218494-6-rmclure@linux.ibm.com> (raw)
In-Reply-To: <20230508020120.218494-1-rmclure@linux.ibm.com>
Checks to see if the [H]SRR registers have been clobbered by (soft)
NMI interrupts imply the possibility for a data race on the
[h]srr_valid entries in the PACA. Annotate accesses to these fields with
READ_ONCE, removing the need for the barrier.
The diagnostic can use plain-access reads and writes, but annotate with
data_race.
Signed-off-by: Rohan McLure <rmclure@linux.ibm.com>
Reported-by: Michael Ellerman <mpe@ellerman.id.au>
---
arch/powerpc/include/asm/ptrace.h | 4 ++--
arch/powerpc/kernel/interrupt.c | 14 ++++++--------
2 files changed, 8 insertions(+), 10 deletions(-)
diff --git a/arch/powerpc/include/asm/ptrace.h b/arch/powerpc/include/asm/ptrace.h
index 0eb90a013346..9db8b16567e2 100644
--- a/arch/powerpc/include/asm/ptrace.h
+++ b/arch/powerpc/include/asm/ptrace.h
@@ -180,8 +180,8 @@ void do_syscall_trace_leave(struct pt_regs *regs);
static inline void set_return_regs_changed(void)
{
#ifdef CONFIG_PPC_BOOK3S_64
- local_paca->hsrr_valid = 0;
- local_paca->srr_valid = 0;
+ WRITE_ONCE(local_paca->hsrr_valid, 0);
+ WRITE_ONCE(local_paca->srr_valid, 0);
#endif
}
diff --git a/arch/powerpc/kernel/interrupt.c b/arch/powerpc/kernel/interrupt.c
index e34c72285b4e..1f033f11b871 100644
--- a/arch/powerpc/kernel/interrupt.c
+++ b/arch/powerpc/kernel/interrupt.c
@@ -125,7 +125,7 @@ static notrace void check_return_regs_valid(struct pt_regs *regs)
case 0x1600:
case 0x1800:
validp = &local_paca->hsrr_valid;
- if (!*validp)
+ if (!READ_ONCE(*validp))
return;
srr0 = mfspr(SPRN_HSRR0);
@@ -135,7 +135,7 @@ static notrace void check_return_regs_valid(struct pt_regs *regs)
break;
default:
validp = &local_paca->srr_valid;
- if (!*validp)
+ if (!READ_ONCE(*validp))
return;
srr0 = mfspr(SPRN_SRR0);
@@ -161,19 +161,17 @@ static notrace void check_return_regs_valid(struct pt_regs *regs)
* such things will get caught most of the time, statistically
* enough to be able to get a warning out.
*/
- barrier();
-
- if (!*validp)
+ if (!READ_ONCE(*validp))
return;
- if (!warned) {
- warned = true;
+ if (!data_race(warned)) {
+ data_race(warned = true);
printk("%sSRR0 was: %lx should be: %lx\n", h, srr0, regs->nip);
printk("%sSRR1 was: %lx should be: %lx\n", h, srr1, regs->msr);
show_regs(regs);
}
- *validp = 0; /* fixup */
+ WRITE_ONCE(*validp, 0); /* fixup */
#endif
}
--
2.37.2
next prev parent reply other threads:[~2023-05-08 2:09 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-05-08 2:01 [PATCH 00/12] powerpc: KCSAN fix warnings and mark accesses Rohan McLure
2023-05-08 2:01 ` [PATCH 01/12] powerpc: qspinlock: Fix qnode->locked value interpretation Rohan McLure
2023-05-09 2:01 ` Nicholas Piggin
2023-05-09 4:26 ` Rohan McLure
2023-05-08 2:01 ` [PATCH 02/12] powerpc: qspinlock: Mark accesses to qnode lock checks Rohan McLure
2023-05-09 2:02 ` Nicholas Piggin
2023-05-08 2:01 ` [PATCH 03/12] powerpc: qspinlock: Enforce qnode writes prior to publishing to queue Rohan McLure
2023-05-09 2:04 ` Nicholas Piggin
2023-05-09 5:26 ` Rohan McLure
2023-05-09 6:45 ` Nicholas Piggin
2023-05-08 2:01 ` [PATCH 04/12] asm-generic/mmiowb: Mark accesses to fix KCSAN warnings Rohan McLure
2023-05-08 6:30 ` Arnd Bergmann
2023-05-08 15:44 ` [PATCH 4/12] " Gautam Menghani
2023-05-09 2:16 ` [PATCH 04/12] " Nicholas Piggin
2023-05-08 2:01 ` Rohan McLure [this message]
2023-05-09 2:17 ` [PATCH 05/12] powerpc: Mark [h]ssr_valid accesses in check_return_regs_valid Nicholas Piggin
2023-05-08 2:01 ` [PATCH 06/12] powerpc: Mark accesses to power_save callback in arch_cpu_idle Rohan McLure
2023-05-09 2:21 ` Nicholas Piggin
2023-05-08 2:01 ` [PATCH 07/12] powerpc: powernv: Fix KCSAN datarace warnings on idle_state contention Rohan McLure
2023-05-09 2:26 ` Nicholas Piggin
2023-05-10 2:00 ` Rohan McLure
2023-05-08 2:01 ` [PATCH 08/12] powerpc: Annotate accesses to ipi message flags Rohan McLure
2023-05-09 2:28 ` Nicholas Piggin
2023-05-08 2:01 ` [PATCH 09/12] powerpc: Mark writes registering ipi to host cpu through kvm Rohan McLure
2023-05-09 2:30 ` Nicholas Piggin
2023-05-08 2:01 ` [PATCH 10/12] powerpc: powernv: Annotate data races in opal events Rohan McLure
2023-05-09 2:31 ` Nicholas Piggin
2023-05-08 2:01 ` [PATCH 11/12] powerpc: powernv: Annotate asynchronous access to opal tokens Rohan McLure
2023-05-08 2:01 ` [PATCH 12/12] powerpc: Mark asynchronous accesses to irq_data Rohan McLure
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=20230508020120.218494-6-rmclure@linux.ibm.com \
--to=rmclure@linux.ibm.com \
--cc=arnd@arndb.de \
--cc=linuxppc-dev@lists.ozlabs.org \
--cc=npiggin@gmail.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: 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.