All of lore.kernel.org
 help / color / mirror / Atom feed
From: Mark Rutland <mark.rutland@arm.com>
To: Marc Zyngier <marc.zyngier@arm.com>
Cc: linux-arm-kernel@lists.infradead.org,
	linux-kernel@vger.kernel.org,
	Russell King <linux@arm.linux.org.uk>,
	Will Deacon <will.deacon@arm.com>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	Wim Van Sebroeck <wim@linux-watchdog.org>,
	Guenter Roeck <linux@roeck-us.net>,
	Valentin Schneider <valentin.schneider@arm.com>
Subject: Re: [PATCH 6/7] clocksource/arm_arch_timer: Remove use of workaround static key
Date: Mon, 8 Apr 2019 17:05:24 +0100	[thread overview]
Message-ID: <20190408160524.GR6139@lakrids.cambridge.arm.com> (raw)
In-Reply-To: <20190408154907.223536-7-marc.zyngier@arm.com>

On Mon, Apr 08, 2019 at 04:49:06PM +0100, Marc Zyngier wrote:
> The use of a static key in a hotplug path has proved to be a real
> nightmare, and makes it impossible to have scream-free lockdep
> kernel.
> 
> Let's remove the static key altogether, and focus on something saner.
> 
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>

Acked-by: Mark Rutland <mark.rutland@arm.com>

Mark.

> ---
>  arch/arm64/include/asm/arch_timer.h  |  4 ----
>  drivers/clocksource/arm_arch_timer.c | 25 +++++++------------------
>  2 files changed, 7 insertions(+), 22 deletions(-)
> 
> diff --git a/arch/arm64/include/asm/arch_timer.h b/arch/arm64/include/asm/arch_timer.h
> index 4a06d46def7e..5502ea049b63 100644
> --- a/arch/arm64/include/asm/arch_timer.h
> +++ b/arch/arm64/include/asm/arch_timer.h
> @@ -45,13 +45,9 @@
>  		(__wa && __wa->h) ? __wa->h : arch_timer_##h;		\
>  	})
>  
> -extern struct static_key_false arch_timer_read_ool_enabled;
> -#define needs_unstable_timer_counter_workaround() \
> -	static_branch_unlikely(&arch_timer_read_ool_enabled)
>  #else
>  #define has_erratum_handler(h)			   false
>  #define erratum_handler(h)			   (arch_timer_##h)
> -#define needs_unstable_timer_counter_workaround()  false
>  #endif
>  
>  enum arch_timer_erratum_match_type {
> diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
> index c7f5b66d893c..da487fbfada3 100644
> --- a/drivers/clocksource/arm_arch_timer.c
> +++ b/drivers/clocksource/arm_arch_timer.c
> @@ -372,8 +372,6 @@ static u32 notrace sun50i_a64_read_cntv_tval_el0(void)
>  DEFINE_PER_CPU(const struct arch_timer_erratum_workaround *, timer_unstable_counter_workaround);
>  EXPORT_SYMBOL_GPL(timer_unstable_counter_workaround);
>  
> -DEFINE_STATIC_KEY_FALSE(arch_timer_read_ool_enabled);
> -EXPORT_SYMBOL_GPL(arch_timer_read_ool_enabled);
>  
>  static void erratum_set_next_event_tval_generic(const int access, unsigned long evt,
>  						struct clock_event_device *clk)
> @@ -552,12 +550,6 @@ void arch_timer_enable_workaround(const struct arch_timer_erratum_workaround *wa
>  			per_cpu(timer_unstable_counter_workaround, i) = wa;
>  	}
>  
> -	/*
> -	 * Use the locked version, as we're called from the CPU
> -	 * hotplug framework. Otherwise, we end-up in deadlock-land.
> -	 */
> -	static_branch_enable_cpuslocked(&arch_timer_read_ool_enabled);
> -
>  	/*
>  	 * Don't use the vdso fastpath if errata require using the
>  	 * out-of-line counter accessor. We may change our mind pretty
> @@ -573,7 +565,7 @@ void arch_timer_enable_workaround(const struct arch_timer_erratum_workaround *wa
>  static void arch_timer_check_ool_workaround(enum arch_timer_erratum_match_type type,
>  					    void *arg)
>  {
> -	const struct arch_timer_erratum_workaround *wa;
> +	const struct arch_timer_erratum_workaround *wa, *__wa;
>  	ate_match_fn_t match_fn = NULL;
>  	bool local = false;
>  
> @@ -597,16 +589,13 @@ static void arch_timer_check_ool_workaround(enum arch_timer_erratum_match_type t
>  	if (!wa)
>  		return;
>  
> -	if (needs_unstable_timer_counter_workaround()) {
> -		const struct arch_timer_erratum_workaround *__wa;
> -		__wa = __this_cpu_read(timer_unstable_counter_workaround);
> -		if (__wa && wa != __wa)
> -			pr_warn("Can't enable workaround for %s (clashes with %s\n)",
> -				wa->desc, __wa->desc);
> +	__wa = __this_cpu_read(timer_unstable_counter_workaround);
> +	if (__wa && wa != __wa)
> +		pr_warn("Can't enable workaround for %s (clashes with %s\n)",
> +			wa->desc, __wa->desc);
>  
> -		if (__wa)
> -			return;
> -	}
> +	if (__wa)
> +		return;
>  
>  	arch_timer_enable_workaround(wa, local);
>  	pr_info("Enabling %s workaround for %s\n",
> -- 
> 2.20.1
> 

WARNING: multiple messages have this Message-ID (diff)
From: Mark Rutland <mark.rutland@arm.com>
To: Marc Zyngier <marc.zyngier@arm.com>
Cc: Russell King <linux@arm.linux.org.uk>,
	Catalin Marinas <catalin.marinas@arm.com>,
	Daniel Lezcano <daniel.lezcano@linaro.org>,
	Will Deacon <will.deacon@arm.com>,
	linux-kernel@vger.kernel.org, Guenter Roeck <linux@roeck-us.net>,
	Wim Van Sebroeck <wim@linux-watchdog.org>,
	Valentin Schneider <valentin.schneider@arm.com>,
	linux-arm-kernel@lists.infradead.org
Subject: Re: [PATCH 6/7] clocksource/arm_arch_timer: Remove use of workaround static key
Date: Mon, 8 Apr 2019 17:05:24 +0100	[thread overview]
Message-ID: <20190408160524.GR6139@lakrids.cambridge.arm.com> (raw)
In-Reply-To: <20190408154907.223536-7-marc.zyngier@arm.com>

On Mon, Apr 08, 2019 at 04:49:06PM +0100, Marc Zyngier wrote:
> The use of a static key in a hotplug path has proved to be a real
> nightmare, and makes it impossible to have scream-free lockdep
> kernel.
> 
> Let's remove the static key altogether, and focus on something saner.
> 
> Signed-off-by: Marc Zyngier <marc.zyngier@arm.com>

Acked-by: Mark Rutland <mark.rutland@arm.com>

Mark.

> ---
>  arch/arm64/include/asm/arch_timer.h  |  4 ----
>  drivers/clocksource/arm_arch_timer.c | 25 +++++++------------------
>  2 files changed, 7 insertions(+), 22 deletions(-)
> 
> diff --git a/arch/arm64/include/asm/arch_timer.h b/arch/arm64/include/asm/arch_timer.h
> index 4a06d46def7e..5502ea049b63 100644
> --- a/arch/arm64/include/asm/arch_timer.h
> +++ b/arch/arm64/include/asm/arch_timer.h
> @@ -45,13 +45,9 @@
>  		(__wa && __wa->h) ? __wa->h : arch_timer_##h;		\
>  	})
>  
> -extern struct static_key_false arch_timer_read_ool_enabled;
> -#define needs_unstable_timer_counter_workaround() \
> -	static_branch_unlikely(&arch_timer_read_ool_enabled)
>  #else
>  #define has_erratum_handler(h)			   false
>  #define erratum_handler(h)			   (arch_timer_##h)
> -#define needs_unstable_timer_counter_workaround()  false
>  #endif
>  
>  enum arch_timer_erratum_match_type {
> diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
> index c7f5b66d893c..da487fbfada3 100644
> --- a/drivers/clocksource/arm_arch_timer.c
> +++ b/drivers/clocksource/arm_arch_timer.c
> @@ -372,8 +372,6 @@ static u32 notrace sun50i_a64_read_cntv_tval_el0(void)
>  DEFINE_PER_CPU(const struct arch_timer_erratum_workaround *, timer_unstable_counter_workaround);
>  EXPORT_SYMBOL_GPL(timer_unstable_counter_workaround);
>  
> -DEFINE_STATIC_KEY_FALSE(arch_timer_read_ool_enabled);
> -EXPORT_SYMBOL_GPL(arch_timer_read_ool_enabled);
>  
>  static void erratum_set_next_event_tval_generic(const int access, unsigned long evt,
>  						struct clock_event_device *clk)
> @@ -552,12 +550,6 @@ void arch_timer_enable_workaround(const struct arch_timer_erratum_workaround *wa
>  			per_cpu(timer_unstable_counter_workaround, i) = wa;
>  	}
>  
> -	/*
> -	 * Use the locked version, as we're called from the CPU
> -	 * hotplug framework. Otherwise, we end-up in deadlock-land.
> -	 */
> -	static_branch_enable_cpuslocked(&arch_timer_read_ool_enabled);
> -
>  	/*
>  	 * Don't use the vdso fastpath if errata require using the
>  	 * out-of-line counter accessor. We may change our mind pretty
> @@ -573,7 +565,7 @@ void arch_timer_enable_workaround(const struct arch_timer_erratum_workaround *wa
>  static void arch_timer_check_ool_workaround(enum arch_timer_erratum_match_type type,
>  					    void *arg)
>  {
> -	const struct arch_timer_erratum_workaround *wa;
> +	const struct arch_timer_erratum_workaround *wa, *__wa;
>  	ate_match_fn_t match_fn = NULL;
>  	bool local = false;
>  
> @@ -597,16 +589,13 @@ static void arch_timer_check_ool_workaround(enum arch_timer_erratum_match_type t
>  	if (!wa)
>  		return;
>  
> -	if (needs_unstable_timer_counter_workaround()) {
> -		const struct arch_timer_erratum_workaround *__wa;
> -		__wa = __this_cpu_read(timer_unstable_counter_workaround);
> -		if (__wa && wa != __wa)
> -			pr_warn("Can't enable workaround for %s (clashes with %s\n)",
> -				wa->desc, __wa->desc);
> +	__wa = __this_cpu_read(timer_unstable_counter_workaround);
> +	if (__wa && wa != __wa)
> +		pr_warn("Can't enable workaround for %s (clashes with %s\n)",
> +			wa->desc, __wa->desc);
>  
> -		if (__wa)
> -			return;
> -	}
> +	if (__wa)
> +		return;
>  
>  	arch_timer_enable_workaround(wa, local);
>  	pr_info("Enabling %s workaround for %s\n",
> -- 
> 2.20.1
> 

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

  reply	other threads:[~2019-04-08 16:05 UTC|newest]

Thread overview: 56+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-04-08 15:49 [PATCH 0/7] clocksource/arm_arch_timer: Removing the static branch on errata handling Marc Zyngier
2019-04-08 15:49 ` Marc Zyngier
2019-04-08 15:49 ` [PATCH 1/7] ARM: vdso: Remove dependency with the arch_timer driver internals Marc Zyngier
2019-04-08 15:49   ` Marc Zyngier
2019-04-08 15:58   ` Mark Rutland
2019-04-08 15:58     ` Mark Rutland
2019-04-15 10:46   ` Marc Zyngier
2019-04-15 10:46     ` Marc Zyngier
2019-04-30 14:23   ` Will Deacon
2019-04-30 14:23     ` Will Deacon
2019-04-08 15:49 ` [PATCH 2/7] watchdog/sbsa: Use arch_timer_read_counter instead of arch_counter_get_cntvct Marc Zyngier
2019-04-08 15:49   ` Marc Zyngier
2019-04-08 15:59   ` Mark Rutland
2019-04-08 15:59     ` Mark Rutland
2019-04-08 18:07   ` Guenter Roeck
2019-04-08 18:07     ` Guenter Roeck
2019-04-09  7:43     ` Marc Zyngier
2019-04-09  7:43       ` Marc Zyngier
2019-04-08 15:49 ` [PATCH 3/7] arm64: " Marc Zyngier
2019-04-08 15:49   ` Marc Zyngier
2019-04-08 15:59   ` Mark Rutland
2019-04-08 15:59     ` Mark Rutland
2019-04-08 15:49 ` [PATCH 4/7] clocksource/arm_arch_timer: Direcly assign set_next_event workaround Marc Zyngier
2019-04-08 15:49   ` Marc Zyngier
2019-04-08 16:02   ` Mark Rutland
2019-04-08 16:02     ` Mark Rutland
2019-04-11 17:17   ` Daniel Lezcano
2019-04-11 17:17     ` Daniel Lezcano
2019-04-15 10:18     ` Marc Zyngier
2019-04-15 10:18       ` Marc Zyngier
2019-04-08 15:49 ` [PATCH 5/7] clocksource/arm_arch_timer: Drop use of static key in arch_timer_reg_read_stable Marc Zyngier
2019-04-08 15:49   ` Marc Zyngier
2019-04-08 16:04   ` Mark Rutland
2019-04-08 16:04     ` Mark Rutland
2019-04-15 11:04   ` Daniel Lezcano
2019-04-15 11:04     ` Daniel Lezcano
2019-04-08 15:49 ` [PATCH 6/7] clocksource/arm_arch_timer: Remove use of workaround static key Marc Zyngier
2019-04-08 15:49   ` Marc Zyngier
2019-04-08 16:05   ` Mark Rutland [this message]
2019-04-08 16:05     ` Mark Rutland
2019-04-15 11:07   ` Daniel Lezcano
2019-04-15 11:07     ` Daniel Lezcano
2019-04-08 15:49 ` [PATCH 7/7] clocksource/arm_arch_timer: Use arch_timer_read_counter to access stable counters Marc Zyngier
2019-04-08 15:49   ` Marc Zyngier
2019-04-08 16:08   ` Mark Rutland
2019-04-08 16:08     ` Mark Rutland
2019-04-15 12:16   ` Daniel Lezcano
2019-04-15 12:16     ` Daniel Lezcano
2019-04-30 15:27     ` Marc Zyngier
2019-04-30 15:27       ` Marc Zyngier
2019-04-30 15:39       ` Valentin Schneider
2019-04-30 15:39         ` Valentin Schneider
2019-05-03 20:32         ` Daniel Lezcano
2019-05-03 20:32           ` Daniel Lezcano
2019-05-03 20:31       ` Daniel Lezcano
2019-05-03 20:31         ` Daniel Lezcano

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=20190408160524.GR6139@lakrids.cambridge.arm.com \
    --to=mark.rutland@arm.com \
    --cc=catalin.marinas@arm.com \
    --cc=daniel.lezcano@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux@arm.linux.org.uk \
    --cc=linux@roeck-us.net \
    --cc=marc.zyngier@arm.com \
    --cc=valentin.schneider@arm.com \
    --cc=will.deacon@arm.com \
    --cc=wim@linux-watchdog.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.