public inbox for linux-arm-kernel@lists.infradead.org
 help / color / mirror / Atom feed
From: Dave.Martin@arm.com (Dave Martin)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 2/3] ARM: mcpm: Implement cpu_kill() to synchronise on powerdown
Date: Tue, 1 Oct 2013 10:29:50 +0100	[thread overview]
Message-ID: <20131001092949.GB2640@localhost.localdomain> (raw)
In-Reply-To: <alpine.LFD.2.03.1309301507360.6331@syhkavp.arg>

On Mon, Sep 30, 2013 at 03:18:08PM -0400, Nicolas Pitre wrote:
> On Mon, 30 Sep 2013, Dave Martin wrote:
> 
> > CPU hotplug and kexec rely on smp_ops.cpu_kill(), which is supposed
> > to wait for the CPU to park or power down, and perform the last
> > rites (such as disabling clocks etc., where the platform doesn't do
> > this automatically).
> > 
> > kexec in particular is unsafe without performing this
> > synchronisation to park secondaries.  Without it, the secondaries
> > might not be parked when kexec trashes the kernel.
> > 
> > There is no generic way to do this synchronisation, so a new mcpm
> > platform_ops method power_down_finish() is added by this patch.
> > 
> > The new method is mandatory.  A platform which provides no way to
> > detect when CPUs are parked is likely broken.
> > 
> > Signed-off-by: Dave Martin <Dave.Martin@arm.com>
> 
> There is still a problem with this patch.
> 
> > +int mcpm_cpu_power_down_finish(unsigned int cpu, unsigned int cluster)
> > +{
> > +	int ret;
> > +
> > +	if (WARN_ON_ONCE(!platform_ops || !platform_ops->power_down_finish))
> > +		return 0;
> > +
> > +	ret = platform_ops->power_down_finish(cpu, cluster);
> > +	if (!ret)
> > +		pr_warn("%s: cpu %u, cluster %u failed to power down\n",
> > +			__func__, cpu, cluster);
> > +
> > +	return ret;
> > +}
> 
> So 0 is the error case.
> 
> [...]
> > + * mcpm_cpu_power_down_finish - wait for a specified CPU to halt, and
> > + *	make sure it is powered off
> [...]
> > + * @return:
> > + *	- zero if the CPU is in a safely parked state
> > + *	- nonzero otherwise (e.g., timeout)
> 
> But you document it as being the opposite.
> 
> I'd suggest that the return value is either an int where 0 means success 
> and negative error codes are returned otherwise, or it is a bool and 
> true/false means success/failure.
> 
> I see that platform_cpu_kill() is a bit inconsistent in that regard, but 
> we don't have to propagate this down.

The intention was to be consistent with platform_cpu_kill(), though that
is indeed counterintuitive (hence the snafu in the comments).

I'll go with your suggestion and switch to a zero-on-success convention
internally.

Cheers
---Dave

  reply	other threads:[~2013-10-01  9:29 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-09-30 19:00 [PATCH 0/3] MCPM/TC2 support for CPU powerdown synchronisation Dave Martin
2013-09-30 19:00 ` [PATCH 1/3] ARM: mcpm: Factor out logical-to-physical CPU translation Dave Martin
2013-09-30 19:00 ` [PATCH 2/3] ARM: mcpm: Implement cpu_kill() to synchronise on powerdown Dave Martin
2013-09-30 19:18   ` Nicolas Pitre
2013-10-01  9:29     ` Dave Martin [this message]
2013-09-30 19:00 ` [PATCH 3/3] ARM: vexpress/TC2: Implement MCPM power_down_finish() Dave Martin

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=20131001092949.GB2640@localhost.localdomain \
    --to=dave.martin@arm.com \
    --cc=linux-arm-kernel@lists.infradead.org \
    /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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox