Message ID | 20200115013751.249588-1-swboyd@chromium.org (mailing list archive) |
---|---|
State | Accepted |
Commit | efde2659b0fe835732047357b2902cca14f054d9 |
Headers | show |
Series | drivers: qcom: rpmh-rsc: Use rcuidle tracepoints for rpmh | expand |
On 2020-01-15 07:07, Stephen Boyd wrote: > This tracepoint is hit now that we call into the rpmh code from the cpu > idle path. Let's move this to be an rcuidle tracepoint so that we avoid > the RCU idle splat below > > ============================= > WARNING: suspicious RCU usage > 5.4.10 #68 Tainted: G S > ----------------------------- > drivers/soc/qcom/trace-rpmh.h:72 suspicious rcu_dereference_check() > usage! > > other info that might help us debug this: > > RCU used illegally from idle CPU! > rcu_scheduler_active = 2, debug_locks = 1 > RCU used illegally from extended quiescent state! > 5 locks held by swapper/2/0: > #0: ffffff81745d6ee8 (&(&genpd->slock)->rlock){+.+.}, at: > genpd_lock_spin+0x1c/0x2c > #1: ffffff81745da6e8 (&(&genpd->slock)->rlock/1){....}, at: > genpd_lock_nested_spin+0x24/0x34 > #2: ffffff8174f2ca20 (&(&genpd->slock)->rlock/2){....}, at: > genpd_lock_nested_spin+0x24/0x34 > #3: ffffff8174f2c300 (&(&drv->client.cache_lock)->rlock){....}, at: > rpmh_flush+0x48/0x24c > #4: ffffff8174f2c150 (&(&tcs->lock)->rlock){+.+.}, at: > rpmh_rsc_write_ctrl_data+0x74/0x270 > > stack backtrace: > CPU: 2 PID: 0 Comm: swapper/2 Tainted: G S 5.4.10 #68 > Call trace: > dump_backtrace+0x0/0x174 > show_stack+0x20/0x2c > dump_stack+0xc8/0x124 > lockdep_rcu_suspicious+0xe4/0x104 > __tcs_buffer_write+0x230/0x2d0 > rpmh_rsc_write_ctrl_data+0x210/0x270 > rpmh_flush+0x84/0x24c > rpmh_domain_power_off+0x78/0x98 > _genpd_power_off+0x40/0xc0 > genpd_power_off+0x168/0x208 > genpd_power_off+0x1e0/0x208 > genpd_power_off+0x1e0/0x208 > genpd_runtime_suspend+0x1ac/0x220 > __rpm_callback+0x70/0xfc > rpm_callback+0x34/0x8c > rpm_suspend+0x218/0x4a4 > __pm_runtime_suspend+0x88/0xac > psci_enter_domain_idle_state+0x3c/0xb4 > cpuidle_enter_state+0xb8/0x284 > cpuidle_enter+0x38/0x4c > call_cpuidle+0x3c/0x68 > do_idle+0x194/0x260 > cpu_startup_entry+0x24/0x28 > secondary_start_kernel+0x150/0x15c > > Fixes: a65a397f2451 ("cpuidle: psci: Add support for PM domains by > using genpd") > Reported-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> > Cc: Ulf Hansson <ulf.hansson@linaro.org> > Signed-off-by: Stephen Boyd <swboyd@chromium.org> > --- > > I think the commit that this is "Fixes"ing is a stable commit, but I'm > not positive. > > drivers/soc/qcom/rpmh-rsc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/soc/qcom/rpmh-rsc.c b/drivers/soc/qcom/rpmh-rsc.c > index e278fc11fe5c..b71822131f59 100644 > --- a/drivers/soc/qcom/rpmh-rsc.c > +++ b/drivers/soc/qcom/rpmh-rsc.c > @@ -277,7 +277,7 @@ static void __tcs_buffer_write(struct rsc_drv > *drv, int tcs_id, int cmd_id, > write_tcs_cmd(drv, RSC_DRV_CMD_MSGID, tcs_id, j, msgid); > write_tcs_cmd(drv, RSC_DRV_CMD_ADDR, tcs_id, j, cmd->addr); > write_tcs_cmd(drv, RSC_DRV_CMD_DATA, tcs_id, j, cmd->data); > - trace_rpmh_send_msg(drv, tcs_id, j, msgid, cmd); > + trace_rpmh_send_msg_rcuidle(drv, tcs_id, j, msgid, cmd); > } > > write_tcs_reg(drv, RSC_DRV_CMD_WAIT_FOR_CMPL, tcs_id, cmd_complete); Thanks Stephen, Tested-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
Hi, On Tue, Jan 14, 2020 at 5:37 PM Stephen Boyd <swboyd@chromium.org> wrote: > > This tracepoint is hit now that we call into the rpmh code from the cpu > idle path. Let's move this to be an rcuidle tracepoint so that we avoid > the RCU idle splat below > > ============================= > WARNING: suspicious RCU usage > 5.4.10 #68 Tainted: G S > ----------------------------- > drivers/soc/qcom/trace-rpmh.h:72 suspicious rcu_dereference_check() usage! > > other info that might help us debug this: > > RCU used illegally from idle CPU! > rcu_scheduler_active = 2, debug_locks = 1 > RCU used illegally from extended quiescent state! > 5 locks held by swapper/2/0: > #0: ffffff81745d6ee8 (&(&genpd->slock)->rlock){+.+.}, at: genpd_lock_spin+0x1c/0x2c > #1: ffffff81745da6e8 (&(&genpd->slock)->rlock/1){....}, at: genpd_lock_nested_spin+0x24/0x34 > #2: ffffff8174f2ca20 (&(&genpd->slock)->rlock/2){....}, at: genpd_lock_nested_spin+0x24/0x34 > #3: ffffff8174f2c300 (&(&drv->client.cache_lock)->rlock){....}, at: rpmh_flush+0x48/0x24c > #4: ffffff8174f2c150 (&(&tcs->lock)->rlock){+.+.}, at: rpmh_rsc_write_ctrl_data+0x74/0x270 > > stack backtrace: > CPU: 2 PID: 0 Comm: swapper/2 Tainted: G S 5.4.10 #68 > Call trace: > dump_backtrace+0x0/0x174 > show_stack+0x20/0x2c > dump_stack+0xc8/0x124 > lockdep_rcu_suspicious+0xe4/0x104 > __tcs_buffer_write+0x230/0x2d0 > rpmh_rsc_write_ctrl_data+0x210/0x270 > rpmh_flush+0x84/0x24c > rpmh_domain_power_off+0x78/0x98 > _genpd_power_off+0x40/0xc0 > genpd_power_off+0x168/0x208 > genpd_power_off+0x1e0/0x208 > genpd_power_off+0x1e0/0x208 > genpd_runtime_suspend+0x1ac/0x220 > __rpm_callback+0x70/0xfc > rpm_callback+0x34/0x8c > rpm_suspend+0x218/0x4a4 > __pm_runtime_suspend+0x88/0xac > psci_enter_domain_idle_state+0x3c/0xb4 > cpuidle_enter_state+0xb8/0x284 > cpuidle_enter+0x38/0x4c > call_cpuidle+0x3c/0x68 > do_idle+0x194/0x260 > cpu_startup_entry+0x24/0x28 > secondary_start_kernel+0x150/0x15c > > Fixes: a65a397f2451 ("cpuidle: psci: Add support for PM domains by using genpd") > Reported-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> > Cc: Ulf Hansson <ulf.hansson@linaro.org> > Signed-off-by: Stephen Boyd <swboyd@chromium.org> > --- > > I think the commit that this is "Fixes"ing is a stable commit, but I'm > not positive. > > drivers/soc/qcom/rpmh-rsc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) I'm not an expert on these code path, but it looks sane to me. Reviewed-by: Douglas Anderson <dianders@chromium.org>
On Wed, 15 Jan 2020 at 02:37, Stephen Boyd <swboyd@chromium.org> wrote: > > This tracepoint is hit now that we call into the rpmh code from the cpu > idle path. Let's move this to be an rcuidle tracepoint so that we avoid > the RCU idle splat below > > ============================= > WARNING: suspicious RCU usage > 5.4.10 #68 Tainted: G S > ----------------------------- > drivers/soc/qcom/trace-rpmh.h:72 suspicious rcu_dereference_check() usage! > > other info that might help us debug this: > > RCU used illegally from idle CPU! > rcu_scheduler_active = 2, debug_locks = 1 > RCU used illegally from extended quiescent state! > 5 locks held by swapper/2/0: > #0: ffffff81745d6ee8 (&(&genpd->slock)->rlock){+.+.}, at: genpd_lock_spin+0x1c/0x2c > #1: ffffff81745da6e8 (&(&genpd->slock)->rlock/1){....}, at: genpd_lock_nested_spin+0x24/0x34 > #2: ffffff8174f2ca20 (&(&genpd->slock)->rlock/2){....}, at: genpd_lock_nested_spin+0x24/0x34 > #3: ffffff8174f2c300 (&(&drv->client.cache_lock)->rlock){....}, at: rpmh_flush+0x48/0x24c > #4: ffffff8174f2c150 (&(&tcs->lock)->rlock){+.+.}, at: rpmh_rsc_write_ctrl_data+0x74/0x270 > > stack backtrace: > CPU: 2 PID: 0 Comm: swapper/2 Tainted: G S 5.4.10 #68 > Call trace: > dump_backtrace+0x0/0x174 > show_stack+0x20/0x2c > dump_stack+0xc8/0x124 > lockdep_rcu_suspicious+0xe4/0x104 > __tcs_buffer_write+0x230/0x2d0 > rpmh_rsc_write_ctrl_data+0x210/0x270 > rpmh_flush+0x84/0x24c > rpmh_domain_power_off+0x78/0x98 > _genpd_power_off+0x40/0xc0 > genpd_power_off+0x168/0x208 > genpd_power_off+0x1e0/0x208 > genpd_power_off+0x1e0/0x208 > genpd_runtime_suspend+0x1ac/0x220 > __rpm_callback+0x70/0xfc > rpm_callback+0x34/0x8c > rpm_suspend+0x218/0x4a4 > __pm_runtime_suspend+0x88/0xac > psci_enter_domain_idle_state+0x3c/0xb4 > cpuidle_enter_state+0xb8/0x284 > cpuidle_enter+0x38/0x4c > call_cpuidle+0x3c/0x68 > do_idle+0x194/0x260 > cpu_startup_entry+0x24/0x28 > secondary_start_kernel+0x150/0x15c > > Fixes: a65a397f2451 ("cpuidle: psci: Add support for PM domains by using genpd") > Reported-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> > Cc: Ulf Hansson <ulf.hansson@linaro.org> > Signed-off-by: Stephen Boyd <swboyd@chromium.org> Sorry for the delay and many thanks for fixing this! > --- > > I think the commit that this is "Fixes"ing is a stable commit, but I'm > not positive. Correct, the commit is in Linus' tree by now. Acked-by: Ulf Hansson <ulf.hansson@linaro.org> Kind regards Uffe > > drivers/soc/qcom/rpmh-rsc.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/drivers/soc/qcom/rpmh-rsc.c b/drivers/soc/qcom/rpmh-rsc.c > index e278fc11fe5c..b71822131f59 100644 > --- a/drivers/soc/qcom/rpmh-rsc.c > +++ b/drivers/soc/qcom/rpmh-rsc.c > @@ -277,7 +277,7 @@ static void __tcs_buffer_write(struct rsc_drv *drv, int tcs_id, int cmd_id, > write_tcs_cmd(drv, RSC_DRV_CMD_MSGID, tcs_id, j, msgid); > write_tcs_cmd(drv, RSC_DRV_CMD_ADDR, tcs_id, j, cmd->addr); > write_tcs_cmd(drv, RSC_DRV_CMD_DATA, tcs_id, j, cmd->data); > - trace_rpmh_send_msg(drv, tcs_id, j, msgid, cmd); > + trace_rpmh_send_msg_rcuidle(drv, tcs_id, j, msgid, cmd); > } > > write_tcs_reg(drv, RSC_DRV_CMD_WAIT_FOR_CMPL, tcs_id, cmd_complete); > -- > Sent by a computer, using git, on the internet >
diff --git a/drivers/soc/qcom/rpmh-rsc.c b/drivers/soc/qcom/rpmh-rsc.c index e278fc11fe5c..b71822131f59 100644 --- a/drivers/soc/qcom/rpmh-rsc.c +++ b/drivers/soc/qcom/rpmh-rsc.c @@ -277,7 +277,7 @@ static void __tcs_buffer_write(struct rsc_drv *drv, int tcs_id, int cmd_id, write_tcs_cmd(drv, RSC_DRV_CMD_MSGID, tcs_id, j, msgid); write_tcs_cmd(drv, RSC_DRV_CMD_ADDR, tcs_id, j, cmd->addr); write_tcs_cmd(drv, RSC_DRV_CMD_DATA, tcs_id, j, cmd->data); - trace_rpmh_send_msg(drv, tcs_id, j, msgid, cmd); + trace_rpmh_send_msg_rcuidle(drv, tcs_id, j, msgid, cmd); } write_tcs_reg(drv, RSC_DRV_CMD_WAIT_FOR_CMPL, tcs_id, cmd_complete);
This tracepoint is hit now that we call into the rpmh code from the cpu idle path. Let's move this to be an rcuidle tracepoint so that we avoid the RCU idle splat below ============================= WARNING: suspicious RCU usage 5.4.10 #68 Tainted: G S ----------------------------- drivers/soc/qcom/trace-rpmh.h:72 suspicious rcu_dereference_check() usage! other info that might help us debug this: RCU used illegally from idle CPU! rcu_scheduler_active = 2, debug_locks = 1 RCU used illegally from extended quiescent state! 5 locks held by swapper/2/0: #0: ffffff81745d6ee8 (&(&genpd->slock)->rlock){+.+.}, at: genpd_lock_spin+0x1c/0x2c #1: ffffff81745da6e8 (&(&genpd->slock)->rlock/1){....}, at: genpd_lock_nested_spin+0x24/0x34 #2: ffffff8174f2ca20 (&(&genpd->slock)->rlock/2){....}, at: genpd_lock_nested_spin+0x24/0x34 #3: ffffff8174f2c300 (&(&drv->client.cache_lock)->rlock){....}, at: rpmh_flush+0x48/0x24c #4: ffffff8174f2c150 (&(&tcs->lock)->rlock){+.+.}, at: rpmh_rsc_write_ctrl_data+0x74/0x270 stack backtrace: CPU: 2 PID: 0 Comm: swapper/2 Tainted: G S 5.4.10 #68 Call trace: dump_backtrace+0x0/0x174 show_stack+0x20/0x2c dump_stack+0xc8/0x124 lockdep_rcu_suspicious+0xe4/0x104 __tcs_buffer_write+0x230/0x2d0 rpmh_rsc_write_ctrl_data+0x210/0x270 rpmh_flush+0x84/0x24c rpmh_domain_power_off+0x78/0x98 _genpd_power_off+0x40/0xc0 genpd_power_off+0x168/0x208 genpd_power_off+0x1e0/0x208 genpd_power_off+0x1e0/0x208 genpd_runtime_suspend+0x1ac/0x220 __rpm_callback+0x70/0xfc rpm_callback+0x34/0x8c rpm_suspend+0x218/0x4a4 __pm_runtime_suspend+0x88/0xac psci_enter_domain_idle_state+0x3c/0xb4 cpuidle_enter_state+0xb8/0x284 cpuidle_enter+0x38/0x4c call_cpuidle+0x3c/0x68 do_idle+0x194/0x260 cpu_startup_entry+0x24/0x28 secondary_start_kernel+0x150/0x15c Fixes: a65a397f2451 ("cpuidle: psci: Add support for PM domains by using genpd") Reported-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org> Cc: Ulf Hansson <ulf.hansson@linaro.org> Signed-off-by: Stephen Boyd <swboyd@chromium.org> --- I think the commit that this is "Fixes"ing is a stable commit, but I'm not positive. drivers/soc/qcom/rpmh-rsc.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)