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 |
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 --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;