linuxppc-dev.lists.ozlabs.org archive mirror
 help / color / mirror / Atom feed
From: "Nicholas Piggin" <npiggin@gmail.com>
To: "Rohan McLure" <rmclure@linux.ibm.com>, <linuxppc-dev@lists.ozlabs.org>
Cc: gautam@linux.ibm.com, arnd@arndb.de
Subject: Re: [PATCH v2 05/11] powerpc: Mark accesses to power_save callback in arch_cpu_idle
Date: Mon, 15 May 2023 15:50:10 +1000	[thread overview]
Message-ID: <CSMM6YE0FGF9.SG52DCRHZ35E@wheely> (raw)
In-Reply-To: <20230510033117.1395895-6-rmclure@linux.ibm.com>

On Wed May 10, 2023 at 1:31 PM AEST, Rohan McLure wrote:
> The power_save callback can be overwritten by another core at boot time.
> Specifically, null values will be replaced exactly once with the callback
> suitable for the particular platform (PowerNV / pseries lpars), making
> this value a good candidate for __ro_after_init.
>
> Even with this the case, KCSAN sees unmarked reads to the callback
> variable, and notices that unfortunate compiler reorderings could lead
> to distinct function pointers being read. In reality this is impossible,
> so don't instrument at this read.
>
> Signed-off-by: Rohan McLure <rmclure@linux.ibm.com>
> ---
> v2: Mark instances at init where the callback is written to, and
> data_race() read as there is no capacity for the value to change
> underneath.
> ---
>  arch/powerpc/kernel/idle.c | 9 ++++++---
>  1 file changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/arch/powerpc/kernel/idle.c b/arch/powerpc/kernel/idle.c
> index b1c0418b25c8..43d96c0e3b96 100644
> --- a/arch/powerpc/kernel/idle.c
> +++ b/arch/powerpc/kernel/idle.c
> @@ -35,7 +35,7 @@ EXPORT_SYMBOL(cpuidle_disable);
>  
>  static int __init powersave_off(char *arg)
>  {
> -	ppc_md.power_save = NULL;
> +	WRITE_ONCE(ppc_md.power_save, NULL);
>  	cpuidle_disable = IDLE_POWERSAVE_OFF;
>  	return 1;
>  }

Shouldn't need the WRITE_ONCE if you don't need a READ_ONCE. Does
data_race work here too? What about the other writers? Does
KCSAN know it's single threaded in early boot so skips marking,
but perhaps this comes later? Would be good to have a little
comment if so.

Thanks,
Nick

> @@ -43,10 +43,13 @@ __setup("powersave=off", powersave_off);
>  
>  void arch_cpu_idle(void)
>  {
> +	/* power_save callback assigned only at init so no data race */
> +	void (*power_save)(void) = data_race(ppc_md.power_save);
> +
>  	ppc64_runlatch_off();
>  
> -	if (ppc_md.power_save) {
> -		ppc_md.power_save();
> +	if (power_save) {
> +		power_save();
>  		/*
>  		 * Some power_save functions return with
>  		 * interrupts enabled, some don't.
> -- 
> 2.37.2


  reply	other threads:[~2023-05-15  5:51 UTC|newest]

Thread overview: 24+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2023-05-10  3:31 [PATCH v2 00/11] powerpc: KCSAN fix warnings and mark accesses Rohan McLure
2023-05-10  3:31 ` [PATCH v2 01/11] powerpc: qspinlock: Mark accesses to qnode lock checks Rohan McLure
2023-05-10  3:31 ` [PATCH v2 02/11] powerpc: qspinlock: Enforce qnode writes prior to publishing to queue Rohan McLure
2023-05-15  5:46   ` Nicholas Piggin
2023-05-10  3:31 ` [PATCH v2 03/11] asm-generic/mmiowb: Mark accesses to fix KCSAN warnings Rohan McLure
2023-05-12  2:20   ` Michael Ellerman
2023-05-15  5:48   ` Nicholas Piggin
2023-05-23  0:28   ` Rohan McLure
2023-05-23  0:36     ` Rohan McLure
2023-05-10  3:31 ` [PATCH v2 04/11] powerpc: Mark [h]ssr_valid accesses in check_return_regs_valid Rohan McLure
2023-05-10  3:31 ` [PATCH v2 05/11] powerpc: Mark accesses to power_save callback in arch_cpu_idle Rohan McLure
2023-05-15  5:50   ` Nicholas Piggin [this message]
2023-05-16  2:27     ` Rohan McLure
2023-05-10  3:31 ` [PATCH v2 06/11] powerpc: powernv: Fix KCSAN datarace warnings on idle_state contention Rohan McLure
2023-05-15  5:50   ` Nicholas Piggin
2023-05-10  3:31 ` [PATCH v2 07/11] powerpc: Annotate accesses to ipi message flags Rohan McLure
2023-05-15  5:51   ` Nicholas Piggin
2023-05-10  3:31 ` [PATCH v2 08/11] powerpc: Mark writes registering ipi to host cpu through kvm and polling Rohan McLure
2023-05-15  5:53   ` Nicholas Piggin
2023-05-15 22:19     ` Rohan McLure
2023-05-10  3:31 ` [PATCH v2 09/11] powerpc: powernv: Annotate data races in opal events Rohan McLure
2023-05-10  3:31 ` [PATCH v2 10/11] powerpc: powernv: Annotate asynchronous access to opal tokens Rohan McLure
2023-05-10  3:31 ` [PATCH v2 11/11] powerpc: Mark asynchronous accesses to irq_data Rohan McLure
2023-07-03  5:26 ` (subset) [PATCH v2 00/11] powerpc: KCSAN fix warnings and mark accesses Michael Ellerman

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=CSMM6YE0FGF9.SG52DCRHZ35E@wheely \
    --to=npiggin@gmail.com \
    --cc=arnd@arndb.de \
    --cc=gautam@linux.ibm.com \
    --cc=linuxppc-dev@lists.ozlabs.org \
    --cc=rmclure@linux.ibm.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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).