diff mbox series

[v1] cpuidle: tegra: Annotate tegra_pm_set_cpu_in_lp2() with RCU_NONIDLE

Message ID 20201104132126.15943-1-digetx@gmail.com
State Accepted
Commit c39de538a06e76d89b7e598a71e16688009cd56c
Headers show
Series [v1] cpuidle: tegra: Annotate tegra_pm_set_cpu_in_lp2() with RCU_NONIDLE | expand

Commit Message

Dmitry Osipenko Nov. 4, 2020, 1:21 p.m. UTC
Annotate tegra_pm_set[clear]_cpu_in_lp2() with RCU_NONIDLE in order to
fix lockdep warning about suspicious RCU usage of a spinlock during late
idling phase.

 WARNING: suspicious RCU usage
 ...
 include/trace/events/lock.h:13 suspicious rcu_dereference_check() usage!
 ...
  (dump_stack) from (lock_acquire)
  (lock_acquire) from (_raw_spin_lock)
  (_raw_spin_lock) from (tegra_pm_set_cpu_in_lp2)
  (tegra_pm_set_cpu_in_lp2) from (tegra_cpuidle_enter)
  (tegra_cpuidle_enter) from (cpuidle_enter_state)
  (cpuidle_enter_state) from (cpuidle_enter_state_coupled)
  (cpuidle_enter_state_coupled) from (cpuidle_enter)
  (cpuidle_enter) from (do_idle)
 ...

Tested-by: Peter Geis <pgwipeout@gmail.com>
Reported-by: Peter Geis <pgwipeout@gmail.com>
Signed-off-by: Dmitry Osipenko <digetx@gmail.com>
---
 drivers/cpuidle/cpuidle-tegra.c | 4 ++--
 1 file changed, 2 insertions(+), 2 deletions(-)

Comments

Rafael J. Wysocki Nov. 12, 2020, 4:03 p.m. UTC | #1
On Wed, Nov 4, 2020 at 2:21 PM Dmitry Osipenko <digetx@gmail.com> wrote:
>

> Annotate tegra_pm_set[clear]_cpu_in_lp2() with RCU_NONIDLE in order to

> fix lockdep warning about suspicious RCU usage of a spinlock during late

> idling phase.

>

>  WARNING: suspicious RCU usage

>  ...

>  include/trace/events/lock.h:13 suspicious rcu_dereference_check() usage!

>  ...

>   (dump_stack) from (lock_acquire)

>   (lock_acquire) from (_raw_spin_lock)

>   (_raw_spin_lock) from (tegra_pm_set_cpu_in_lp2)

>   (tegra_pm_set_cpu_in_lp2) from (tegra_cpuidle_enter)

>   (tegra_cpuidle_enter) from (cpuidle_enter_state)

>   (cpuidle_enter_state) from (cpuidle_enter_state_coupled)

>   (cpuidle_enter_state_coupled) from (cpuidle_enter)

>   (cpuidle_enter) from (do_idle)

>  ...

>

> Tested-by: Peter Geis <pgwipeout@gmail.com>

> Reported-by: Peter Geis <pgwipeout@gmail.com>

> Signed-off-by: Dmitry Osipenko <digetx@gmail.com>

> ---

>  drivers/cpuidle/cpuidle-tegra.c | 4 ++--

>  1 file changed, 2 insertions(+), 2 deletions(-)

>

> diff --git a/drivers/cpuidle/cpuidle-tegra.c b/drivers/cpuidle/cpuidle-tegra.c

> index e8956706a291..191966dc8d02 100644

> --- a/drivers/cpuidle/cpuidle-tegra.c

> +++ b/drivers/cpuidle/cpuidle-tegra.c

> @@ -189,7 +189,7 @@ static int tegra_cpuidle_state_enter(struct cpuidle_device *dev,

>         }

>

>         local_fiq_disable();

> -       tegra_pm_set_cpu_in_lp2();

> +       RCU_NONIDLE(tegra_pm_set_cpu_in_lp2());

>         cpu_pm_enter();

>

>         switch (index) {

> @@ -207,7 +207,7 @@ static int tegra_cpuidle_state_enter(struct cpuidle_device *dev,

>         }

>

>         cpu_pm_exit();

> -       tegra_pm_clear_cpu_in_lp2();

> +       RCU_NONIDLE(tegra_pm_clear_cpu_in_lp2());

>         local_fiq_enable();

>

>         return err ?: index;

> --


Applied as a fix for 5.10-rc, thanks!
diff mbox series

Patch

diff --git a/drivers/cpuidle/cpuidle-tegra.c b/drivers/cpuidle/cpuidle-tegra.c
index e8956706a291..191966dc8d02 100644
--- a/drivers/cpuidle/cpuidle-tegra.c
+++ b/drivers/cpuidle/cpuidle-tegra.c
@@ -189,7 +189,7 @@  static int tegra_cpuidle_state_enter(struct cpuidle_device *dev,
 	}
 
 	local_fiq_disable();
-	tegra_pm_set_cpu_in_lp2();
+	RCU_NONIDLE(tegra_pm_set_cpu_in_lp2());
 	cpu_pm_enter();
 
 	switch (index) {
@@ -207,7 +207,7 @@  static int tegra_cpuidle_state_enter(struct cpuidle_device *dev,
 	}
 
 	cpu_pm_exit();
-	tegra_pm_clear_cpu_in_lp2();
+	RCU_NONIDLE(tegra_pm_clear_cpu_in_lp2());
 	local_fiq_enable();
 
 	return err ?: index;