On 3/1/16 2:52 PM, tip-bot for Thomas Gleixner wrote: > Commit-ID: ba997462435f48ad1501320e9da8770fd40c59b1 > Gitweb: http://git.kernel.org/tip/ba997462435f48ad1501320e9da8770fd40c59b1 > Author: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > AuthorDate: Fri, 26 Feb 2016 18:43:24 +0000 > Committer: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > CommitDate: Tue, 1 Mar 2016 20:36:53 +0100 > > cpu/hotplug: Restructure cpu_up code > > Split out into separate functions, so we can convert it to a state machine. > > Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > Cc: linux-arch@xxxxxxxxxxxxxxx > Cc: Rik van Riel <riel@xxxxxxxxxx> > Cc: Rafael Wysocki <rafael.j.wysocki@xxxxxxxxx> > Cc: "Srivatsa S. Bhat" <srivatsa@xxxxxxx> > Cc: Peter Zijlstra <peterz@xxxxxxxxxxxxx> > Cc: Arjan van de Ven <arjan@xxxxxxxxxxxxxxx> > Cc: Sebastian Siewior <bigeasy@xxxxxxxxxxxxx> > Cc: Rusty Russell <rusty@xxxxxxxxxxxxxxx> > Cc: Steven Rostedt <rostedt@xxxxxxxxxxx> > Cc: Oleg Nesterov <oleg@xxxxxxxxxx> > Cc: Tejun Heo <tj@xxxxxxxxxx> > Cc: Andrew Morton <akpm@xxxxxxxxxxxxxxxxxxxx> > Cc: Paul McKenney <paulmck@xxxxxxxxxxxxxxxxxx> > Cc: Linus Torvalds <torvalds@xxxxxxxxxxxxxxxxxxxx> > Cc: Paul Turner <pjt@xxxxxxxxxx> > Link: http://lkml.kernel.org/r/20160226182340.429389195@xxxxxxxxxxxxx > Signed-off-by: Thomas Gleixner <tglx@xxxxxxxxxxxxx> > --- Reviewed-by: Srivatsa S. Bhat <srivatsa@xxxxxxxxxxxxx> Regards, Srivatsa S. Bhat > kernel/cpu.c | 69 +++++++++++++++++++++++++++++++++++++++++------------------- > 1 file changed, 47 insertions(+), 22 deletions(-) > > diff --git a/kernel/cpu.c b/kernel/cpu.c > index 41a6cb8..15a4136 100644 > --- a/kernel/cpu.c > +++ b/kernel/cpu.c > @@ -228,6 +228,43 @@ static int cpu_notify(unsigned long val, unsigned int cpu) > return __cpu_notify(val, cpu, -1, NULL); > } > > +/* Notifier wrappers for transitioning to state machine */ > +static int notify_prepare(unsigned int cpu) > +{ > + int nr_calls = 0; > + int ret; > + > + ret = __cpu_notify(CPU_UP_PREPARE, cpu, -1, &nr_calls); > + if (ret) { > + nr_calls--; > + printk(KERN_WARNING "%s: attempt to bring up CPU %u failed\n", > + __func__, cpu); > + __cpu_notify(CPU_UP_CANCELED, cpu, nr_calls, NULL); > + } > + return ret; > +} > + > +static int notify_online(unsigned int cpu) > +{ > + cpu_notify(CPU_ONLINE, cpu); > + return 0; > +} > + > +static int bringup_cpu(unsigned int cpu) > +{ > + struct task_struct *idle = idle_thread_get(cpu); > + int ret; > + > + /* Arch-specific enabling code. */ > + ret = __cpu_up(cpu, idle); > + if (ret) { > + cpu_notify(CPU_UP_CANCELED, cpu); > + return ret; > + } > + BUG_ON(!cpu_online(cpu)); > + return 0; > +} > + > #ifdef CONFIG_HOTPLUG_CPU > > static void cpu_notify_nofail(unsigned long val, unsigned int cpu) > @@ -481,7 +518,7 @@ void smpboot_thread_init(void) > static int _cpu_up(unsigned int cpu, int tasks_frozen) > { > struct task_struct *idle; > - int ret, nr_calls = 0; > + int ret; > > cpu_hotplug_begin(); > > @@ -496,33 +533,21 @@ static int _cpu_up(unsigned int cpu, int tasks_frozen) > goto out; > } > > + cpuhp_tasks_frozen = tasks_frozen; > + > ret = smpboot_create_threads(cpu); > if (ret) > goto out; > > - cpuhp_tasks_frozen = tasks_frozen; > - > - ret = __cpu_notify(CPU_UP_PREPARE, cpu, -1, &nr_calls); > - if (ret) { > - nr_calls--; > - pr_warn("%s: attempt to bring up CPU %u failed\n", > - __func__, cpu); > - goto out_notify; > - } > - > - /* Arch-specific enabling code. */ > - ret = __cpu_up(cpu, idle); > - > - if (ret != 0) > - goto out_notify; > - BUG_ON(!cpu_online(cpu)); > + ret = notify_prepare(cpu); > + if (ret) > + goto out; > > - /* Now call notifier in preparation. */ > - cpu_notify(CPU_ONLINE, cpu); > + ret = bringup_cpu(cpu); > + if (ret) > + goto out; > > -out_notify: > - if (ret != 0) > - __cpu_notify(CPU_UP_CANCELED, cpu, nr_calls, NULL); > + notify_online(cpu); > out: > cpu_hotplug_done(); > > -- To unsubscribe from this list: send the line "unsubscribe linux-tip-commits" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html
![]() |