All of lore.kernel.org
 help / color / mirror / Atom feed
From: Will Deacon <will.deacon@arm.com>
To: Julien Grall <julien.grall@arm.com>
Cc: linux-kernel@vger.kernel.org, linux-rt-users@vger.kernel.org,
	linux-arm-kernel@lists.infradead.org, tglx@linutronix.de,
	rostedt@goodmis.org, bigeasy@linutronix.de,
	suzuki.poulose@arm.com, catalin.marinas@arm.com,
	dave.martin@arm.com
Subject: Re: [PATCH] arm64/cpufeature: Convert hook_lock to raw_spin_lock_t in cpu_enable_ssbs()
Date: Thu, 30 May 2019 13:01:29 +0100	[thread overview]
Message-ID: <20190530120129.GD13751@fuggles.cambridge.arm.com> (raw)
In-Reply-To: <20190530113058.1988-1-julien.grall@arm.com>

On Thu, May 30, 2019 at 12:30:58PM +0100, Julien Grall wrote:
> cpu_enable_ssbs() is called via stop_machine() as part of the cpu_enable
> callback. A spin lock is used to ensure the hook is registered before
> the rest of the callback is executed.
> 
> On -RT spin_lock() may sleep. However, all the callees in stop_machine()
> are expected to not sleep. Therefore a raw_spin_lock() is required here.
> 
> Given this is already done under stop_machine() and the work done under
> the lock is quite small, the latency should not increase too much.
> 
> Signed-off-by: Julien Grall <julien.grall@arm.com>
> 
> ---
> 
> It was noticed when looking at the current use of spin_lock in
> arch/arm64. I don't have a platform calling that callback, so I have
> hacked the code to reproduce the error and check it is now fixed.
> ---
>  arch/arm64/kernel/cpufeature.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
> index ca27e08e3d8a..2a7159fda3ce 100644
> --- a/arch/arm64/kernel/cpufeature.c
> +++ b/arch/arm64/kernel/cpufeature.c
> @@ -1194,14 +1194,14 @@ static struct undef_hook ssbs_emulation_hook = {
>  static void cpu_enable_ssbs(const struct arm64_cpu_capabilities *__unused)
>  {
>  	static bool undef_hook_registered = false;
> -	static DEFINE_SPINLOCK(hook_lock);
> +	static DEFINE_RAW_SPINLOCK(hook_lock);
>  
> -	spin_lock(&hook_lock);
> +	raw_spin_lock(&hook_lock);
>  	if (!undef_hook_registered) {
>  		register_undef_hook(&ssbs_emulation_hook);
>  		undef_hook_registered = true;
>  	}
> -	spin_unlock(&hook_lock);
> +	raw_spin_unlock(&hook_lock);

Makes sense to me. We could probably avoid the lock entirely if we wanted
to (via atomic_dec_if_positive), but I'm not sure it's really worth it.

Will

WARNING: multiple messages have this Message-ID (diff)
From: Will Deacon <will.deacon@arm.com>
To: Julien Grall <julien.grall@arm.com>
Cc: linux-rt-users@vger.kernel.org, suzuki.poulose@arm.com,
	catalin.marinas@arm.com, bigeasy@linutronix.de,
	linux-kernel@vger.kernel.org, rostedt@goodmis.org,
	tglx@linutronix.de, dave.martin@arm.com,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH] arm64/cpufeature: Convert hook_lock to raw_spin_lock_t in cpu_enable_ssbs()
Date: Thu, 30 May 2019 13:01:29 +0100	[thread overview]
Message-ID: <20190530120129.GD13751@fuggles.cambridge.arm.com> (raw)
In-Reply-To: <20190530113058.1988-1-julien.grall@arm.com>

On Thu, May 30, 2019 at 12:30:58PM +0100, Julien Grall wrote:
> cpu_enable_ssbs() is called via stop_machine() as part of the cpu_enable
> callback. A spin lock is used to ensure the hook is registered before
> the rest of the callback is executed.
> 
> On -RT spin_lock() may sleep. However, all the callees in stop_machine()
> are expected to not sleep. Therefore a raw_spin_lock() is required here.
> 
> Given this is already done under stop_machine() and the work done under
> the lock is quite small, the latency should not increase too much.
> 
> Signed-off-by: Julien Grall <julien.grall@arm.com>
> 
> ---
> 
> It was noticed when looking at the current use of spin_lock in
> arch/arm64. I don't have a platform calling that callback, so I have
> hacked the code to reproduce the error and check it is now fixed.
> ---
>  arch/arm64/kernel/cpufeature.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/arm64/kernel/cpufeature.c b/arch/arm64/kernel/cpufeature.c
> index ca27e08e3d8a..2a7159fda3ce 100644
> --- a/arch/arm64/kernel/cpufeature.c
> +++ b/arch/arm64/kernel/cpufeature.c
> @@ -1194,14 +1194,14 @@ static struct undef_hook ssbs_emulation_hook = {
>  static void cpu_enable_ssbs(const struct arm64_cpu_capabilities *__unused)
>  {
>  	static bool undef_hook_registered = false;
> -	static DEFINE_SPINLOCK(hook_lock);
> +	static DEFINE_RAW_SPINLOCK(hook_lock);
>  
> -	spin_lock(&hook_lock);
> +	raw_spin_lock(&hook_lock);
>  	if (!undef_hook_registered) {
>  		register_undef_hook(&ssbs_emulation_hook);
>  		undef_hook_registered = true;
>  	}
> -	spin_unlock(&hook_lock);
> +	raw_spin_unlock(&hook_lock);

Makes sense to me. We could probably avoid the lock entirely if we wanted
to (via atomic_dec_if_positive), but I'm not sure it's really worth it.

Will

_______________________________________________
linux-arm-kernel mailing list
linux-arm-kernel@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-arm-kernel

  reply	other threads:[~2019-05-30 12:01 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-05-30 11:30 [PATCH] arm64/cpufeature: Convert hook_lock to raw_spin_lock_t in cpu_enable_ssbs() Julien Grall
2019-05-30 11:30 ` Julien Grall
2019-05-30 12:01 ` Will Deacon [this message]
2019-05-30 12:01   ` Will Deacon
2019-05-30 13:55   ` Julien Grall
2019-05-30 13:55     ` Julien Grall
2019-06-04 13:49 ` Catalin Marinas
2019-06-04 13:49   ` Catalin Marinas

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=20190530120129.GD13751@fuggles.cambridge.arm.com \
    --to=will.deacon@arm.com \
    --cc=bigeasy@linutronix.de \
    --cc=catalin.marinas@arm.com \
    --cc=dave.martin@arm.com \
    --cc=julien.grall@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-rt-users@vger.kernel.org \
    --cc=rostedt@goodmis.org \
    --cc=suzuki.poulose@arm.com \
    --cc=tglx@linutronix.de \
    /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.