[PATCH v3 2/5] ARM: pm: add generic CPU suspend/resume support

Lorenzo Pieralisi lorenzo.pieralisi at arm.com
Tue Feb 8 09:25:15 EST 2011


On Tue, 2011-02-08 at 12:33 +0000, Russell King - ARM Linux wrote:

<snip>

> > Yes, but this is what is currently done, so at the present time I'm
> > just sorting out what's already in the kernel.  If we need further
> > changes, then that needs to be built on top of this.
> 
> Like this:
> 
>  arch/arm/kernel/sleep.S |   26 +++++++++++++++++++++++++-
>  1 files changed, 25 insertions(+), 1 deletions(-)
> 
> diff --git a/arch/arm/kernel/sleep.S b/arch/arm/kernel/sleep.S
> index 9f106fa..e10618f 100644
> --- a/arch/arm/kernel/sleep.S
> +++ b/arch/arm/kernel/sleep.S
> @@ -25,7 +25,14 @@ ENTRY(cpu_suspend)
>  	stmfd	sp!, {r1, r2, r3, ip}	@ save v:p, virt SP, retfn, phys resume fn
>  	ldr	r3, =sleep_save_sp
>  	add	r2, sp, r1		@ convert SP to phys
> +#ifdef CONFIG_SMP
> +	ALT_SMP(mrc p15, 0, lr, c0, c0, 5)
> +	ALT_UP(mov lr, #0)
> +	and	lr, lr, #15
> +	str	r2, [r3, lr, lsl #2]	@ save phys SP
> +#else
>  	str	r2, [r3]		@ save phys SP
> +#endif

<snip>
	
>  sleep_save_sp:
> -	.word	0				@ preserve stack phys ptr here
> +	.rept	CONFIG_NR_CPUS
> +	.long	0				@ preserve stack phys ptr here
> +	.endr
> 

Yes Russell, thanks that's what we are currently doing for MP, it looks 
ok. As for the page tables, I know you already replied and I took your
point. It is on the cpuidle path so page tables should be created in C,
beforehand as you pointed out (with the 1:1 map required), once for all.
I just wanted to say, maybe we can save the pgd pointer (with the
required 1:1 for MMU on) in a pc-relative addressable location that you
can retrieve on resume, eliminating the code changing the original page
table and replacing it with pgd switching.
But again it is just a suggestion, I understand your point, no need to
comment further.

Many thanks,
Lorenzo





More information about the linux-arm-kernel mailing list