From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: [PATCH 00/14] Re-jig cpu_suspend for a saner calling convention
Date: Mon, 13 Jun 2011 18:14:46 +0100 [thread overview]
Message-ID: <20110613171446.GF13643@n2100.arm.linux.org.uk> (raw)
Currently cpu_suspend is not like a normal C function - when it's called
it returns normally to a bunch of code which is not expected to return.
The return path is via code pointed to by 'r3'.
It also corrupts a bunch of registers in ways which make it non-compliant
with a C API.
If we do make this complaint as a normal C-like function, it eliminates
this register saving. We also swap 'lr' and 'r3', so cpu_suspend
effectively only returns to following code on resume - and r3 points
to the suspend code.
So, this becomes:
ENTRY(acmeSoC_cpu_suspend)
stmfd sp!, {lr}
adr r3, soc_finish_suspend
bl cpu_suspend
ldmfd sp!, {pc}
ENDPROC(acmeSoC_cpu_suspend)
soc_finish_suspend:
blah
blah
put soc to sleep
never return
or even:
static void soc_suspend(void)
{
[soc specific preparation]
cpu_suspend(0, PLAT_PHYS_OFFSET - PAGE_OFFSET,
soc_suspend_arg, soc_suspend_fn);
[soc specific cleanup ]
}
where soc_suspend_fn can be either assembly or C code - but must never
return.
Tested on Assabet (SA1100) only.
arch/arm/kernel/sleep.S | 70 +++++++++++++++-------------------------
arch/arm/mach-exynos4/sleep.S | 10 ++----
arch/arm/mach-pxa/sleep.S | 48 ++++++++++++++--------------
arch/arm/mach-s3c64xx/sleep.S | 11 ++-----
arch/arm/mach-s5pv210/sleep.S | 10 ++----
arch/arm/mach-sa1100/sleep.S | 17 +++-------
arch/arm/plat-s3c24xx/sleep.S | 12 ++-----
7 files changed, 67 insertions(+), 111 deletions(-)
next reply other threads:[~2011-06-13 17:14 UTC|newest]
Thread overview: 20+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-06-13 17:14 Russell King - ARM Linux [this message]
2011-06-13 17:15 ` [PATCH 01/14] ARM: suspend: make MULTI_CPU and !MULTI_CPU resume paths the same Russell King - ARM Linux
2011-06-13 17:15 ` [PATCH 02/14] ARM: suspend: move return address (for cpu_resume) to top of stack Russell King - ARM Linux
2011-06-13 17:15 ` [PATCH 03/14] ARM: suspend: extract common code from MULTI_CPU/!MULTI_CPU paths Russell King - ARM Linux
2011-06-13 19:29 ` Nicolas Pitre
2011-06-13 20:01 ` Russell King - ARM Linux
2011-06-13 17:16 ` [PATCH 04/14] ARM: suspend: preserve r4 - r11 across a suspend Russell King - ARM Linux
2011-06-13 17:16 ` [PATCH 05/14] ARM: suspend: reallocate registers to avoid r2, r3 Russell King - ARM Linux
2011-06-13 17:16 ` [PATCH 06/14] ARM: suspend: rejig suspend follow-on function calling convention Russell King - ARM Linux
2011-06-17 2:54 ` Rob Herring
2011-06-17 7:21 ` Russell King - ARM Linux
2011-06-13 17:17 ` [PATCH 07/14] ARM: suspend: move sa1100 to use proper suspend func arg0 Russell King - ARM Linux
2011-06-13 17:17 ` [PATCH 08/14] ARM: suspend: convert cpu_suspend() to a normal function Russell King - ARM Linux
2011-06-13 17:17 ` [PATCH 09/14] ARM: suspend: plat-s3c24xx: cleanup s3c_cpu_save Russell King - ARM Linux
2011-06-13 17:18 ` [PATCH 10/14] ARM: suspend: sa1100: cleanup sa1100_cpu_suspend Russell King - ARM Linux
2011-06-13 17:18 ` [PATCH 11/14] ARM: suspend: mach-s5pv210: cleanup s3c_cpu_save Russell King - ARM Linux
2011-06-13 17:18 ` [PATCH 12/14] ARM: suspend: mach-exynos4: " Russell King - ARM Linux
2011-06-13 17:19 ` [PATCH 13/14] ARM: suspend: mach-s3c64xx: " Russell King - ARM Linux
2011-06-13 17:19 ` [PATCH 14/14] ARM: suspend: pxa: cleanup PXA suspend code Russell King - ARM Linux
2011-06-13 19:16 ` [PATCH 00/14] Re-jig cpu_suspend for a saner calling convention Nicolas Pitre
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=20110613171446.GF13643@n2100.arm.linux.org.uk \
--to=linux@arm.linux.org.uk \
--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;
as well as URLs for NNTP newsgroup(s).