From: Gautham R Shenoy <ego@linux.vnet.ibm.com>
To: Lan Tianyu <tianyu.lan@intel.com>
Cc: peterz@infradead.org, mingo@kernel.org,
rafael.j.wysocki@intel.com, srivatsa@mit.edu,
akpm@linux-foundation.org, laijs@cn.fujitsu.com,
toshi.kani@hp.com, todd.e.brandt@linux.intel.com,
wangyun@linux.vnet.ibm.com, ego@linux.vnet.ibm.com,
fabf@skynet.be, linux@arm.linux.org.uk, oleg@redhat.com,
srivatsa.bhat@linux.vnet.ibm.com, linux-kernel@vger.kernel.org
Subject: Re: [RFC PATCH V2] PM/CPU: Parallel enalbing nonboot cpus with resume devices
Date: Wed, 17 Sep 2014 14:33:08 +0530 [thread overview]
Message-ID: <20140917090308.GD31806@in.ibm.com> (raw)
In-Reply-To: <1408696420-2654-1-git-send-email-tianyu.lan@intel.com>
Hi Lan,
Sorry missed this repost! Couple of comments.
On Fri, Aug 22, 2014 at 04:33:40PM +0800, Lan Tianyu wrote:
[.. snip ..]
>
> +static int _cpu_up_with_trace(int cpu)
> +{
> + int error;
> +
> + trace_suspend_resume(TPS("CPU_ON"), cpu, true);
> + error = _cpu_up(cpu, 1);
> + trace_suspend_resume(TPS("CPU_ON"), cpu, false);
> + if (error) {
> + pr_warn("Error taking CPU%d up: %d\n", cpu, error);
> + return error;
> + }
> +
> + pr_info("CPU%d is up\n", cpu);
> + return 0;
> +}
> +
> +static int async_enable_nonboot_cpus(void *data)
> +{
> + int cpu;
> +
> + cpu_maps_update_begin();
> + arch_enable_nonboot_cpus_begin();
> +
> + for_each_cpu(cpu, frozen_cpus) {
> + _cpu_up_with_trace(cpu);
> + }
> +
> + arch_enable_nonboot_cpus_end();
> + cpumask_clear(frozen_cpus);
> + cpu_maps_update_done();
> + return 0;
> +}
> +
> void __ref enable_nonboot_cpus(void)
> {
> + struct task_struct *tsk;
> int cpu, error;
>
> /* Allow everyone to use the CPU hotplug again */
> @@ -563,22 +597,34 @@ void __ref enable_nonboot_cpus(void)
>
> pr_info("Enabling non-boot CPUs ...\n");
>
> - arch_enable_nonboot_cpus_begin();
> + cpu = cpumask_first(frozen_cpus);
> + cpumask_clear_cpu(cpu, frozen_cpus);
>
> - for_each_cpu(cpu, frozen_cpus) {
> - trace_suspend_resume(TPS("CPU_ON"), cpu, true);
> - error = _cpu_up(cpu, 1);
> - trace_suspend_resume(TPS("CPU_ON"), cpu, false);
> - if (!error) {
> - pr_info("CPU%d is up\n", cpu);
> - continue;
> + error = _cpu_up_with_trace(cpu);
If cpu fails to come up, you need to add a pr_warn() citing the
reason why it failed to come up.
> + if (cpumask_empty(frozen_cpus))
> + goto out;
> +
> + if (error) {
> + /*
> + * If fail to bring up the first frozen cpus,
> + * enable the rest frozen cpus on the boot cpu.
> + */
> + arch_enable_nonboot_cpus_begin();
> + for_each_cpu(cpu, frozen_cpus) {
> + _cpu_up_with_trace(cpu);
> }
> - pr_warn("Error taking CPU%d up: %d\n", cpu, error);
> - }
> + arch_enable_nonboot_cpus_end();
>
> - arch_enable_nonboot_cpus_end();
> + } else {
> + tsk = kthread_create_on_cpu(async_enable_nonboot_cpus,
> + NULL, cpu, "async-enable-nonboot-cpus");
> + if (IS_ERR(tsk)) {
> + pr_err("Failed to create async enable nonboot cpus thread.\n");
> + goto out;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^ This is not good. If you fail to
create a kthread on the first non-boot cpu, that means none of the
other non-boot cpus will be brought up.
Hence you might want to consider reordering the code in such a manner
that if the first non-boot cpu fails to come up or if you fail to
create the kthread task, then the boot cpu will boot the remaining non
boot cpus.
--
Thanks and Regards
gautham.
next prev parent reply other threads:[~2014-09-17 9:03 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2014-08-22 8:33 [RFC PATCH V2] PM/CPU: Parallel enalbing nonboot cpus with resume devices Lan Tianyu
2014-08-29 3:40 ` Lan Tianyu
2014-08-30 0:22 ` Rafael J. Wysocki
2014-09-03 8:51 ` Lan Tianyu
2014-09-17 9:03 ` Gautham R Shenoy [this message]
2014-09-18 8:36 ` Lan Tianyu
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20140917090308.GD31806@in.ibm.com \
--to=ego@linux.vnet.ibm.com \
--cc=akpm@linux-foundation.org \
--cc=fabf@skynet.be \
--cc=laijs@cn.fujitsu.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux@arm.linux.org.uk \
--cc=mingo@kernel.org \
--cc=oleg@redhat.com \
--cc=peterz@infradead.org \
--cc=rafael.j.wysocki@intel.com \
--cc=srivatsa.bhat@linux.vnet.ibm.com \
--cc=srivatsa@mit.edu \
--cc=tianyu.lan@intel.com \
--cc=todd.e.brandt@linux.intel.com \
--cc=toshi.kani@hp.com \
--cc=wangyun@linux.vnet.ibm.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.