[RFC PATCH 2/3] ARM: mcpm: Implement cpu_kill() to synchronise on powerdown

Nicolas Pitre nicolas.pitre at linaro.org
Mon Sep 30 13:32:30 EDT 2013


On Mon, 30 Sep 2013, Dave Martin wrote:

> On Mon, Sep 30, 2013 at 01:00:00PM -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 at arm.com>
> > > ---
> > >  arch/arm/common/mcpm_entry.c   |    5 +++++
> > >  arch/arm/common/mcpm_platsmp.c |   10 ++++++++++
> > >  arch/arm/include/asm/mcpm.h    |   31 +++++++++++++++++++++++++++++++
> > >  3 files changed, 46 insertions(+)
> > > 
> > > diff --git a/arch/arm/common/mcpm_entry.c b/arch/arm/common/mcpm_entry.c
> > > index 370236d..b722027 100644
> > > --- a/arch/arm/common/mcpm_entry.c
> > > +++ b/arch/arm/common/mcpm_entry.c
> > > @@ -89,6 +89,11 @@ void mcpm_cpu_power_down(void)
> > >  	BUG();
> > >  }
> > >  
> > > +int mcpm_cpu_power_down_finish(unsigned int cpu, unsigned int cluster)
> > > +{
> > > +	return platform_ops->power_down_finish(cpu, cluster);
> > > +}
> > 
> > Please make it return an error (non-zero return value) if platform_ops 
> > or platform_ops->power_down_finish is NULL.  Otherwise this would oops 
> > the kernel.
> > 
> > There is a patch already handling the other cases in RMK's patch system.
> 
> OK -- I didn't pay enough attention as that went past.
> 
> I'll grab that patch and rebase onto it.
> 
> 
> Do you have concerns about the mandatoriness of the new call?  The
> alternative would be to check for it at registration time and set
> smp_ops.cpu_kill to NULL if the backend method isn't there.
> But I really wouldn't want to encourage that until someone comes
> up with a good reason.

Agreed.  If for some reasons this method is unneeded on some platform 
then the backend just needs to return success unconditionally, ideally 
with a comment explaining why it is so.


Nicolas



More information about the linux-arm-kernel mailing list