Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1450660 > unrolled thread
| Started by | rcochran@linutronix.de |
|---|---|
| First post | 2016-07-26 17:50 +0200 |
| Last post | 2016-07-26 20:20 +0200 |
| Articles | 2 — 2 participants |
Back to article view | Back to linux.kernel
This discussion starts older than the indexed window; earlier articles aren't shown. The article labeled Started by
below is the oldest one visible, not the original post.
Re: [patch 61/66] timers: Convert to hotplug state machine rcochran@linutronix.de - 2016-07-26 17:50 +0200
Re: [patch 61/66] timers: Convert to hotplug state machine Jon Hunter <jonathanh@nvidia.com> - 2016-07-26 20:20 +0200
| From | rcochran@linutronix.de |
|---|---|
| Date | 2016-07-26 17:50 +0200 |
| Subject | Re: [patch 61/66] timers: Convert to hotplug state machine |
| Message-ID | <rZcMi-3It-17@gated-at.bofh.it> |
Jon,
On Mon, Jul 25, 2016 at 03:56:48PM +0100, Jon Hunter wrote:
> > When tearing down, call timers_dead_cpu before notify_dead.
> > There is a hidden dependency between:
> >
> > - timers
> > - Block multiqueue
> > - rcutree
> >
> > If timers_dead_cpu() comes later than blk_mq_queue_reinit_notify()
> > that latter function causes a RCU stall.
>
> After this change is applied I am seeing RCU stalls during suspend
> on Tegra. I guess I am hitting the case mentioned above? How should
> this be avoided?
Contrary to the commit message, this callback ended up in the wrong
place within the sequence. (It was correct in an earlier version, but
the series has been through many changes.)
Can you try this patch to see if it avoids the stall, please?
Thanks,
Richard
---
diff --git a/include/linux/cpuhotplug.h b/include/linux/cpuhotplug.h
index 6d405db..242bf53 100644
--- a/include/linux/cpuhotplug.h
+++ b/include/linux/cpuhotplug.h
@@ -20,9 +20,9 @@ enum cpuhp_state {
CPUHP_PROFILE_PREPARE,
CPUHP_X2APIC_PREPARE,
CPUHP_SMPCFD_PREPARE,
- CPUHP_TIMERS_DEAD,
CPUHP_RCUTREE_PREP,
CPUHP_NOTIFY_PREPARE,
+ CPUHP_TIMERS_DEAD,
CPUHP_BRINGUP_CPU,
CPUHP_AP_IDLE_DEAD,
CPUHP_AP_OFFLINE,
diff --git a/kernel/cpu.c b/kernel/cpu.c
index 67f4943..8d65510 100644
--- a/kernel/cpu.c
+++ b/kernel/cpu.c
@@ -1208,11 +1208,6 @@ static struct cpuhp_step cpuhp_bp_states[] = {
.startup = smpcfd_prepare_cpu,
.teardown = smpcfd_dead_cpu,
},
- [CPUHP_TIMERS_DEAD] = {
- .name = "timers dead",
- .startup = NULL,
- .teardown = timers_dead_cpu,
- },
[CPUHP_RCUTREE_PREP] = {
.name = "RCU-tree prepare",
.startup = rcutree_prepare_cpu,
@@ -1229,6 +1224,11 @@ static struct cpuhp_step cpuhp_bp_states[] = {
.skip_onerr = true,
.cant_stop = true,
},
+ [CPUHP_TIMERS_DEAD] = {
+ .name = "timers dead",
+ .startup = NULL,
+ .teardown = timers_dead_cpu,
+ },
/* Kicks the plugged cpu into life */
[CPUHP_BRINGUP_CPU] = {
.name = "cpu:bringup",
[toc] | [next] | [standalone]
| From | Jon Hunter <jonathanh@nvidia.com> |
|---|---|
| Date | 2016-07-26 20:20 +0200 |
| Message-ID | <rZf7r-5rm-7@gated-at.bofh.it> |
| In reply to | #1450660 |
Hi Richard, On 26/07/16 16:42, rcochran@linutronix.de wrote: > Jon, > > On Mon, Jul 25, 2016 at 03:56:48PM +0100, Jon Hunter wrote: >>> When tearing down, call timers_dead_cpu before notify_dead. >>> There is a hidden dependency between: >>> >>> - timers >>> - Block multiqueue >>> - rcutree >>> >>> If timers_dead_cpu() comes later than blk_mq_queue_reinit_notify() >>> that latter function causes a RCU stall. >> >> After this change is applied I am seeing RCU stalls during suspend >> on Tegra. I guess I am hitting the case mentioned above? How should >> this be avoided? > > Contrary to the commit message, this callback ended up in the wrong > place within the sequence. (It was correct in an earlier version, but > the series has been through many changes.) > > Can you try this patch to see if it avoids the stall, please? I have included the patch and I am no longer seeing any RCU stalls and so this does look like it fixed it. Thanks! Jon -- nvpublic
[toc] | [prev] | [standalone]
Back to top | Article view | linux.kernel
csiph-web