linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v2] clocksource/arm_arch_timer: fix a lockdep warning
@ 2018-12-03 22:45 Qian Cai
  2018-12-10 13:52 ` [RESEND PATCH " Qian Cai
  0 siblings, 1 reply; 9+ messages in thread
From: Qian Cai @ 2018-12-03 22:45 UTC (permalink / raw)
  To: mark.rutland, marc.zyngier
  Cc: daniel.lezcano, tglx, peterz, mingo, longman, linux-arm-kernel,
	linux-kernel, Qian Cai

Booting this Huawei TaiShan 2280 arm64 server generated this lockdep
warning.

[    0.000000]  lockdep_assert_cpus_held+0x50/0x60
[    0.000000]  static_key_enable_cpuslocked+0x30/0xe8
[    0.000000]  arch_timer_check_ool_workaround+0x128/0x2d0
[    0.000000]  arch_timer_acpi_init+0x274/0x6ac
[    0.000000]  acpi_table_parse+0x1ac/0x218
[    0.000000]  __acpi_probe_device_table+0x164/0x1ec
[    0.000000]  timer_probe+0x1bc/0x254
[    0.000000]  time_init+0x44/0x98
[    0.000000]  start_kernel+0x4ec/0x7d4

This is due to the commit cb538267ea1e ("jump_label/lockdep: Assert we hold
the hotplug lock for _cpuslocked() operations").

Since it is applying a global workaround to all CPUs here, it did not hold
any CPU locks in this path.

arch_timer_acpi_init
  arch_timer_check_ool_workaround(ate_match_acpi_oem_info, table)
    arch_timer_enable_workaround(wa, local = false)
      for_each_possible_cpu()
	per_cpu()

When hot-add a CPU, it will go with a slightly different route.

arch_timer_starting_cpu
  __arch_timer_setup
    arch_timer_check_ool_workaround(ate_match_local_cap_id, NULL)
      arch_timer_enable_workaround(wa, local = true)
        __this_cpu_write()

Hence, deal with them differently.

Fixes: 450f9689f294 (clocksource/arm_arch_timer: Use
	static_branch_enable_cpuslocked())
Signed-off-by: Qian Cai <cai@gmx.us>
---

Changes since v1:
* Fixed the root cause instead of a workaround.

 drivers/clocksource/arm_arch_timer.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
index 9a7d4dc00b6e..81dca7d31d13 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -492,18 +492,21 @@ void arch_timer_enable_workaround(const struct arch_timer_erratum_workaround *wa
 
 	if (local) {
 		__this_cpu_write(timer_unstable_counter_workaround, 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);
 	} else {
 		for_each_possible_cpu(i)
 			per_cpu(timer_unstable_counter_workaround, i) = wa;
+		/* A global workaround is not on the CPU hotplug path. */
+		static_branch_enable(&arch_timer_read_ool_enabled);
 	}
 
 	/*
-	 * 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
 	 * late in the game (with a per-CPU erratum, for example), so
-- 
1.8.3.1


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* [RESEND PATCH v2] clocksource/arm_arch_timer: fix a lockdep warning
  2018-12-03 22:45 [PATCH v2] clocksource/arm_arch_timer: fix a lockdep warning Qian Cai
@ 2018-12-10 13:52 ` Qian Cai
  2018-12-10 14:07   ` Peter Zijlstra
  2018-12-10 14:48   ` Marc Zyngier
  0 siblings, 2 replies; 9+ messages in thread
From: Qian Cai @ 2018-12-10 13:52 UTC (permalink / raw)
  To: akpm
  Cc: mark.rutland, marc.zyngier, daniel.lezcano, tglx, peterz, mingo,
	longman, linux-arm-kernel, linux-kernel, Qian Cai

Booting this Huawei TaiShan 2280 arm64 server generated this lockdep
warning.

[    0.000000]  lockdep_assert_cpus_held+0x50/0x60
[    0.000000]  static_key_enable_cpuslocked+0x30/0xe8
[    0.000000]  arch_timer_check_ool_workaround+0x128/0x2d0
[    0.000000]  arch_timer_acpi_init+0x274/0x6ac
[    0.000000]  acpi_table_parse+0x1ac/0x218
[    0.000000]  __acpi_probe_device_table+0x164/0x1ec
[    0.000000]  timer_probe+0x1bc/0x254
[    0.000000]  time_init+0x44/0x98
[    0.000000]  start_kernel+0x4ec/0x7d4

This is due to the commit cb538267ea1e ("jump_label/lockdep: Assert we hold
the hotplug lock for _cpuslocked() operations").

Since it is applying a global workaround to all CPUs here, it did not hold
any CPU locks in this path.

arch_timer_acpi_init
  arch_timer_check_ool_workaround(ate_match_acpi_oem_info, table)
    arch_timer_enable_workaround(wa, local = false)
      for_each_possible_cpu()
	per_cpu()

There is also another path did not have any CPU lock.

time_init
  clocksource_probe
    arch_timer_of_init
      arch_timer_check_ool_workaround(ate_match_dt, np)
        arch_timer_enable_workaround(wa, local = false)

When hot-adding a CPU, it will go with a slightly different route.

arch_timer_starting_cpu
  __arch_timer_setup
    arch_timer_check_ool_workaround(ate_match_local_cap_id, NULL)
      arch_timer_enable_workaround(wa, local = true)
        __this_cpu_write()

Hence, deal with them differently.

Fixes: 450f9689f294 (clocksource/arm_arch_timer: Use
static_branch_enable_cpuslocked())
Signed-off-by: Qian Cai <cai@lca.pw>
---

v2: fix the root cause instead of a workaround.

 drivers/clocksource/arm_arch_timer.c | 15 +++++++++------
 1 file changed, 9 insertions(+), 6 deletions(-)

diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
index 9a7d4dc00b6e..81dca7d31d13 100644
--- a/drivers/clocksource/arm_arch_timer.c
+++ b/drivers/clocksource/arm_arch_timer.c
@@ -492,17 +492,20 @@ void arch_timer_enable_workaround(const struct arch_timer_erratum_workaround *wa
 
 	if (local) {
 		__this_cpu_write(timer_unstable_counter_workaround, 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);
 	} else {
 		for_each_possible_cpu(i)
 			per_cpu(timer_unstable_counter_workaround, i) = wa;
+		/* A global workaround is not on the CPU hotplug path. */
+		static_branch_enable(&arch_timer_read_ool_enabled);
 	}
 
-	/*
-	 * 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
-- 
2.17.2 (Apple Git-113)


^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [RESEND PATCH v2] clocksource/arm_arch_timer: fix a lockdep warning
  2018-12-10 13:52 ` [RESEND PATCH " Qian Cai
@ 2018-12-10 14:07   ` Peter Zijlstra
  2018-12-10 14:19     ` Valentin Schneider
                       ` (2 more replies)
  2018-12-10 14:48   ` Marc Zyngier
  1 sibling, 3 replies; 9+ messages in thread
From: Peter Zijlstra @ 2018-12-10 14:07 UTC (permalink / raw)
  To: Qian Cai
  Cc: akpm, mark.rutland, marc.zyngier, daniel.lezcano, tglx, mingo,
	longman, linux-arm-kernel, linux-kernel

On Mon, Dec 10, 2018 at 08:52:28AM -0500, Qian Cai wrote:
> Booting this Huawei TaiShan 2280 arm64 server generated this lockdep
> warning.
> 
> [    0.000000]  lockdep_assert_cpus_held+0x50/0x60
> [    0.000000]  static_key_enable_cpuslocked+0x30/0xe8
> [    0.000000]  arch_timer_check_ool_workaround+0x128/0x2d0
> [    0.000000]  arch_timer_acpi_init+0x274/0x6ac
> [    0.000000]  acpi_table_parse+0x1ac/0x218
> [    0.000000]  __acpi_probe_device_table+0x164/0x1ec
> [    0.000000]  timer_probe+0x1bc/0x254
> [    0.000000]  time_init+0x44/0x98
> [    0.000000]  start_kernel+0x4ec/0x7d4

It seems to me we want something like:

---
 kernel/cpu.c | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/kernel/cpu.c b/kernel/cpu.c
index 91d5c38eb7e5..e1ee8caf28b5 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -313,6 +313,8 @@ void cpus_write_unlock(void)
 
 void lockdep_assert_cpus_held(void)
 {
+	if (system_state < SYSTEM_RUNNING)
+		return;
 	percpu_rwsem_assert_held(&cpu_hotplug_lock);
 }
 

^ permalink raw reply related	[flat|nested] 9+ messages in thread

* Re: [RESEND PATCH v2] clocksource/arm_arch_timer: fix a lockdep warning
  2018-12-10 14:07   ` Peter Zijlstra
@ 2018-12-10 14:19     ` Valentin Schneider
  2018-12-10 14:47       ` Peter Zijlstra
  2018-12-10 15:47     ` Qian Cai
  2018-12-10 21:31     ` Thomas Gleixner
  2 siblings, 1 reply; 9+ messages in thread
From: Valentin Schneider @ 2018-12-10 14:19 UTC (permalink / raw)
  To: Peter Zijlstra, Qian Cai
  Cc: akpm, mark.rutland, marc.zyngier, daniel.lezcano, tglx, mingo,
	longman, linux-arm-kernel, linux-kernel

Hi,

On 10/12/2018 14:07, Peter Zijlstra wrote:
[...]
> ---
>  kernel/cpu.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/kernel/cpu.c b/kernel/cpu.c
> index 91d5c38eb7e5..e1ee8caf28b5 100644
> --- a/kernel/cpu.c
> +++ b/kernel/cpu.c
> @@ -313,6 +313,8 @@ void cpus_write_unlock(void)
>  
>  void lockdep_assert_cpus_held(void)
>  {
> +	if (system_state < SYSTEM_RUNNING)
> +		return;
>  	percpu_rwsem_assert_held(&cpu_hotplug_lock);
>  }
>  

Kinda hijacking the thread here - is that something we'd want to replace 

    40fa3780bac2 ("sched/core: Take the hotplug lock in sched_init_smp()")

with?
 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RESEND PATCH v2] clocksource/arm_arch_timer: fix a lockdep warning
  2018-12-10 14:19     ` Valentin Schneider
@ 2018-12-10 14:47       ` Peter Zijlstra
  0 siblings, 0 replies; 9+ messages in thread
From: Peter Zijlstra @ 2018-12-10 14:47 UTC (permalink / raw)
  To: Valentin Schneider
  Cc: Qian Cai, akpm, mark.rutland, marc.zyngier, daniel.lezcano, tglx,
	mingo, longman, linux-arm-kernel, linux-kernel

On Mon, Dec 10, 2018 at 02:19:53PM +0000, Valentin Schneider wrote:
> Hi,
> 
> On 10/12/2018 14:07, Peter Zijlstra wrote:
> [...]
> > ---
> >  kernel/cpu.c | 2 ++
> >  1 file changed, 2 insertions(+)
> > 
> > diff --git a/kernel/cpu.c b/kernel/cpu.c
> > index 91d5c38eb7e5..e1ee8caf28b5 100644
> > --- a/kernel/cpu.c
> > +++ b/kernel/cpu.c
> > @@ -313,6 +313,8 @@ void cpus_write_unlock(void)
> >  
> >  void lockdep_assert_cpus_held(void)
> >  {
> > +	if (system_state < SYSTEM_RUNNING)
> > +		return;
> >  	percpu_rwsem_assert_held(&cpu_hotplug_lock);
> >  }
> >  
> 
> Kinda hijacking the thread here - is that something we'd want to replace 
> 
>     40fa3780bac2 ("sched/core: Take the hotplug lock in sched_init_smp()")
> 
> with?
>  

Possibly; and I have vague memories of other people running into this
same thing too.

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RESEND PATCH v2] clocksource/arm_arch_timer: fix a lockdep warning
  2018-12-10 13:52 ` [RESEND PATCH " Qian Cai
  2018-12-10 14:07   ` Peter Zijlstra
@ 2018-12-10 14:48   ` Marc Zyngier
  1 sibling, 0 replies; 9+ messages in thread
From: Marc Zyngier @ 2018-12-10 14:48 UTC (permalink / raw)
  To: Qian Cai, akpm
  Cc: mark.rutland, daniel.lezcano, tglx, peterz, mingo, longman,
	linux-arm-kernel, linux-kernel

On 10/12/2018 13:52, Qian Cai wrote:
> Booting this Huawei TaiShan 2280 arm64 server generated this lockdep
> warning.
> 
> [    0.000000]  lockdep_assert_cpus_held+0x50/0x60
> [    0.000000]  static_key_enable_cpuslocked+0x30/0xe8
> [    0.000000]  arch_timer_check_ool_workaround+0x128/0x2d0
> [    0.000000]  arch_timer_acpi_init+0x274/0x6ac
> [    0.000000]  acpi_table_parse+0x1ac/0x218
> [    0.000000]  __acpi_probe_device_table+0x164/0x1ec
> [    0.000000]  timer_probe+0x1bc/0x254
> [    0.000000]  time_init+0x44/0x98
> [    0.000000]  start_kernel+0x4ec/0x7d4
> 
> This is due to the commit cb538267ea1e ("jump_label/lockdep: Assert we hold
> the hotplug lock for _cpuslocked() operations").
> 
> Since it is applying a global workaround to all CPUs here, it did not hold
> any CPU locks in this path.
> 
> arch_timer_acpi_init
>   arch_timer_check_ool_workaround(ate_match_acpi_oem_info, table)
>     arch_timer_enable_workaround(wa, local = false)
>       for_each_possible_cpu()
> 	per_cpu()
> 
> There is also another path did not have any CPU lock.
> 
> time_init
>   clocksource_probe
>     arch_timer_of_init
>       arch_timer_check_ool_workaround(ate_match_dt, np)
>         arch_timer_enable_workaround(wa, local = false)
> 
> When hot-adding a CPU, it will go with a slightly different route.
> 
> arch_timer_starting_cpu
>   __arch_timer_setup
>     arch_timer_check_ool_workaround(ate_match_local_cap_id, NULL)
>       arch_timer_enable_workaround(wa, local = true)
>         __this_cpu_write()
> 
> Hence, deal with them differently.
> 
> Fixes: 450f9689f294 (clocksource/arm_arch_timer: Use
> static_branch_enable_cpuslocked())
> Signed-off-by: Qian Cai <cai@lca.pw>
> ---
> 
> v2: fix the root cause instead of a workaround.
> 
>  drivers/clocksource/arm_arch_timer.c | 15 +++++++++------
>  1 file changed, 9 insertions(+), 6 deletions(-)
> 
> diff --git a/drivers/clocksource/arm_arch_timer.c b/drivers/clocksource/arm_arch_timer.c
> index 9a7d4dc00b6e..81dca7d31d13 100644
> --- a/drivers/clocksource/arm_arch_timer.c
> +++ b/drivers/clocksource/arm_arch_timer.c
> @@ -492,17 +492,20 @@ void arch_timer_enable_workaround(const struct arch_timer_erratum_workaround *wa
>  
>  	if (local) {
>  		__this_cpu_write(timer_unstable_counter_workaround, 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);

I have the ugly feeling that it breaks the (equally ugly) big-little
stuff where the boot CPU is affected. In this context, you'd end-up
without the lock being taken and you'll get the same splat.

We could start testing the CPU number, but Peter's approach seem much
more palatable to me.

Thanks,

	M.
-- 
Jazz is not dead. It just smells funny...

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RESEND PATCH v2] clocksource/arm_arch_timer: fix a lockdep warning
  2018-12-10 14:07   ` Peter Zijlstra
  2018-12-10 14:19     ` Valentin Schneider
@ 2018-12-10 15:47     ` Qian Cai
  2018-12-10 21:31     ` Thomas Gleixner
  2 siblings, 0 replies; 9+ messages in thread
From: Qian Cai @ 2018-12-10 15:47 UTC (permalink / raw)
  To: Peter Zijlstra
  Cc: akpm, mark.rutland, marc.zyngier, daniel.lezcano, tglx, mingo,
	longman, linux-arm-kernel, linux-kernel


On 12/10/18 9:07 AM, Peter Zijlstra wrote:
> On Mon, Dec 10, 2018 at 08:52:28AM -0500, Qian Cai wrote:
>> Booting this Huawei TaiShan 2280 arm64 server generated this lockdep
>> warning.
>>
>> [    0.000000]  lockdep_assert_cpus_held+0x50/0x60
>> [    0.000000]  static_key_enable_cpuslocked+0x30/0xe8
>> [    0.000000]  arch_timer_check_ool_workaround+0x128/0x2d0
>> [    0.000000]  arch_timer_acpi_init+0x274/0x6ac
>> [    0.000000]  acpi_table_parse+0x1ac/0x218
>> [    0.000000]  __acpi_probe_device_table+0x164/0x1ec
>> [    0.000000]  timer_probe+0x1bc/0x254
>> [    0.000000]  time_init+0x44/0x98
>> [    0.000000]  start_kernel+0x4ec/0x7d4
> 
> It seems to me we want something like:

Tested-by: Qian Cai <cai@lca.pw>

> 
> ---
>  kernel/cpu.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/kernel/cpu.c b/kernel/cpu.c
> index 91d5c38eb7e5..e1ee8caf28b5 100644
> --- a/kernel/cpu.c
> +++ b/kernel/cpu.c
> @@ -313,6 +313,8 @@ void cpus_write_unlock(void)
>  
>  void lockdep_assert_cpus_held(void)
>  {
> +	if (system_state < SYSTEM_RUNNING)
> +		return;
>  	percpu_rwsem_assert_held(&cpu_hotplug_lock);
>  }
>  
> 

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RESEND PATCH v2] clocksource/arm_arch_timer: fix a lockdep warning
  2018-12-10 14:07   ` Peter Zijlstra
  2018-12-10 14:19     ` Valentin Schneider
  2018-12-10 15:47     ` Qian Cai
@ 2018-12-10 21:31     ` Thomas Gleixner
  2018-12-14 15:05       ` Qian Cai
  2 siblings, 1 reply; 9+ messages in thread
From: Thomas Gleixner @ 2018-12-10 21:31 UTC (permalink / raw)
  To: Peter Zijlstra
  Cc: Qian Cai, akpm, mark.rutland, marc.zyngier, daniel.lezcano,
	mingo, longman, linux-arm-kernel, linux-kernel

On Mon, 10 Dec 2018, Peter Zijlstra wrote:
> On Mon, Dec 10, 2018 at 08:52:28AM -0500, Qian Cai wrote:
> > Booting this Huawei TaiShan 2280 arm64 server generated this lockdep
> > warning.
> > 
> > [    0.000000]  lockdep_assert_cpus_held+0x50/0x60
> > [    0.000000]  static_key_enable_cpuslocked+0x30/0xe8
> > [    0.000000]  arch_timer_check_ool_workaround+0x128/0x2d0
> > [    0.000000]  arch_timer_acpi_init+0x274/0x6ac
> > [    0.000000]  acpi_table_parse+0x1ac/0x218
> > [    0.000000]  __acpi_probe_device_table+0x164/0x1ec
> > [    0.000000]  timer_probe+0x1bc/0x254
> > [    0.000000]  time_init+0x44/0x98
> > [    0.000000]  start_kernel+0x4ec/0x7d4
> 
> It seems to me we want something like:
> 
> ---
>  kernel/cpu.c | 2 ++
>  1 file changed, 2 insertions(+)
> 
> diff --git a/kernel/cpu.c b/kernel/cpu.c
> index 91d5c38eb7e5..e1ee8caf28b5 100644
> --- a/kernel/cpu.c
> +++ b/kernel/cpu.c
> @@ -313,6 +313,8 @@ void cpus_write_unlock(void)
>  
>  void lockdep_assert_cpus_held(void)
>  {
> +	if (system_state < SYSTEM_RUNNING)
> +		return;
>  	percpu_rwsem_assert_held(&cpu_hotplug_lock);
>  }
 
Hmm, no. SYSTEM_SCHEDULING is what you want because RUNNING is set way too
late.

Thanks,

	tglx

^ permalink raw reply	[flat|nested] 9+ messages in thread

* Re: [RESEND PATCH v2] clocksource/arm_arch_timer: fix a lockdep warning
  2018-12-10 21:31     ` Thomas Gleixner
@ 2018-12-14 15:05       ` Qian Cai
  0 siblings, 0 replies; 9+ messages in thread
From: Qian Cai @ 2018-12-14 15:05 UTC (permalink / raw)
  To: Thomas Gleixner, Peter Zijlstra
  Cc: akpm, mark.rutland, marc.zyngier, daniel.lezcano, mingo, longman,
	linux-arm-kernel, linux-kernel



On 12/10/18 4:31 PM, Thomas Gleixner wrote:
> On Mon, 10 Dec 2018, Peter Zijlstra wrote:
>> On Mon, Dec 10, 2018 at 08:52:28AM -0500, Qian Cai wrote:
>>> Booting this Huawei TaiShan 2280 arm64 server generated this lockdep
>>> warning.
>>>
>>> [    0.000000]  lockdep_assert_cpus_held+0x50/0x60
>>> [    0.000000]  static_key_enable_cpuslocked+0x30/0xe8
>>> [    0.000000]  arch_timer_check_ool_workaround+0x128/0x2d0
>>> [    0.000000]  arch_timer_acpi_init+0x274/0x6ac
>>> [    0.000000]  acpi_table_parse+0x1ac/0x218
>>> [    0.000000]  __acpi_probe_device_table+0x164/0x1ec
>>> [    0.000000]  timer_probe+0x1bc/0x254
>>> [    0.000000]  time_init+0x44/0x98
>>> [    0.000000]  start_kernel+0x4ec/0x7d4
>>
>> It seems to me we want something like:
>>
>> ---
>>  kernel/cpu.c | 2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/kernel/cpu.c b/kernel/cpu.c
>> index 91d5c38eb7e5..e1ee8caf28b5 100644
>> --- a/kernel/cpu.c
>> +++ b/kernel/cpu.c
>> @@ -313,6 +313,8 @@ void cpus_write_unlock(void)
>>  
>>  void lockdep_assert_cpus_held(void)
>>  {
>> +	if (system_state < SYSTEM_RUNNING)
>> +		return;
>>  	percpu_rwsem_assert_held(&cpu_hotplug_lock);
>>  }
>  
> Hmm, no. SYSTEM_SCHEDULING is what you want because RUNNING is set way too
> late.

SYSTEM_SCHEDULING works well here too.

^ permalink raw reply	[flat|nested] 9+ messages in thread

end of thread, other threads:[~2018-12-14 15:05 UTC | newest]

Thread overview: 9+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2018-12-03 22:45 [PATCH v2] clocksource/arm_arch_timer: fix a lockdep warning Qian Cai
2018-12-10 13:52 ` [RESEND PATCH " Qian Cai
2018-12-10 14:07   ` Peter Zijlstra
2018-12-10 14:19     ` Valentin Schneider
2018-12-10 14:47       ` Peter Zijlstra
2018-12-10 15:47     ` Qian Cai
2018-12-10 21:31     ` Thomas Gleixner
2018-12-14 15:05       ` Qian Cai
2018-12-10 14:48   ` Marc Zyngier

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).