From: linux@arm.linux.org.uk (Russell King - ARM Linux)
To: linux-arm-kernel@lists.infradead.org
Subject: [RFC PATCH 05/17] ARM: kernel: save/restore kernel IF
Date: Mon, 11 Jul 2011 20:19:52 +0100 [thread overview]
Message-ID: <20110711191952.GC8486@n2100.arm.linux.org.uk> (raw)
In-Reply-To: <CAMbhsRRm4-8gzjxqqu8MAkyMg8Xx02wDhmjET0b9njVF5z=UVw@mail.gmail.com>
On Mon, Jul 11, 2011 at 11:51:00AM -0700, Colin Cross wrote:
> On Mon, Jul 11, 2011 at 11:40 AM, Russell King - ARM Linux
> <linux@arm.linux.org.uk> wrote:
> > On Mon, Jul 11, 2011 at 03:00:47PM +0100, Lorenzo Pieralisi wrote:
> >> Well, short answer is no. On SMP we do need to save CPU registers
> >> but if just one single cpu is shutdown L2 is still on.
> >> cpu_suspend saves regs on the stack that has to be cleaned from
> >> L2 before shutting a CPU down which make things more complicated than
> >> they should.
> >
> > Hang on. ?Please explain something to me here. ?You've mentioned a few
> > times that cpu_suspend() can't be used because of the L2 cache. ?Why
> > is this the case?
> >
> > OMAP appears to have code in its sleep path - which has been converted
> > to cpu_suspend() support - to deal with the L2 issues.
>
> OMAP is very different, because it doesn't use cpu_suspend. It saves
> it's state to SAR ram, which is mapped uncached, which avoids L2
> problems.
I'm afraid your information is out of date. See:
http://ftp.arm.linux.org.uk/git/?p=linux-2.6-arm.git;a=commitdiff;h=076f2cc449188b7d3d4866730afa3ac7be3e6640;hp=2637ce30e145557bf89ebcf35b2d78e729e16e5a
arch/arm/mach-omap2/pm34xx.c | 47 +++----------
arch/arm/mach-omap2/sleep34xx.S | 143 +--------------------------------------
2 files changed, 13 insertions(+), 177 deletions(-)
for the trivial conversion, and:
http://ftp.arm.linux.org.uk/git/?p=linux-2.6-arm.git;a=commit;h=46e130d298a384b677426e19faec311749ff2677
arch/arm/mach-omap2/pm.h | 20 ++-
arch/arm/mach-omap2/pm34xx.c | 20 ++--
arch/arm/mach-omap2/sleep34xx.S | 303 ++++++++++++++++++++++----------------
arch/arm/plat-omap/sram.c | 15 +--
4 files changed, 206 insertions(+), 152 deletions(-)
for the cleanup of the SRAM code, most of which was found not to need
being in SRAM. That's all tested as working (see the tested-by's) on
a range of OMAP3 platforms.
The whole series is at:
http://ftp.arm.linux.org.uk/git/?p=linux-2.6-arm.git;a=shortlog;h=refs/heads/suspend
There is only one currently merged SoC which hasn't been converted:
shmobile. That's in progress, and there may already be patches for it.
There's no blockers on that as far as I know other than availability of
time.
> The sleep_save_sp location also needs to be cleaned.
Right.
> > In the resume initial code:
> >
> > - If L2 state was lost, the L2 configuration needs to be restored.
> > ?This generally needs to happen before cpu_resume is called:
> > ?- there are CPUs which need L2 setup before the MMU is enabled.
> > ?- OMAP3 currently does this in its assembly, which is convenient to
> > ? ?allow it to make the SMI calls to the secure world. ?The same will
> > ? ?be true of any CPU running in non-secure mode.
> >
> > - If L2 state was not lost, and the platform choses not to clean and
> > ?invalidate the ABI registers from the stack, and the platform restores
> > ?the L2 configuration before calling cpu_resume, then the ABI registers
> > ?will be read out of L2 on return if that's where they are - at that
> > ?point everything will be setup correctly.
> >
> > ?This will give the greatest performance, which is important for CPU
> > ?idle use of these code paths.
> >
> > Now, considering SMP, there's an issue here: do we know at the point
> > where one CPU goes down whether L2 state will be lost?
>
> CPU idle will need a voting mechanism between the two CPUs, and the
> second CPU to go down needs to determine the minimum state supported
> by both CPUs. Any time a CPU goes down, we should know for sure that
> either the L2 will not be lost, or the L2 might be lost if the other
> CPU goes idle.
No it doesn't. As I've said: L2 is shared between the two CPUs.
If L2 state is preserved, then the only thing that needs cleaning from
L2 is the state which must be accessible to bring the system back up,
which is the CPU specific state, the cpu_suspend state and the
sleep_save_sp store.
If L2 state is lost, the _first_ CPU to go down in a two-CPU system
must do as above. If nothing else happens L2 state will be preserved.
So there's absolutely no point what so ever the first CPU cleaning the
entire L2 state - the second CPU will still be scribbling into L2 at
that point.
However, when the second CPU goes down, that's when the L2 state would
need to be preserved if the L2.
So, let's recap. In a two CPU system, when precisely one CPU goes into
sleep mode, only the minimum L2 state needs cleaning. Nothing else.
Only when the second CPU goes down does it matter whether L2 state needs
to be preserved by cleaning or not because that is when L2 data loss
may occur.
> In practice, I don't think many SoCs will support low power modes that
> lose the L2 during idle, only during suspend. Tegra and OMAP4 both
> don't support the modes where the L2 is powered down in idle.
That's good, that means less to worry about. For idle, all we need to
care about is the CPU specific state, the cpu_suspend state and the
sleep_save_sp store. Great, that means things can be even simpler -
cpu_suspend() just needs to know whether we're calling it because of
idle, or whether we're calling it because of system suspend.
next prev parent reply other threads:[~2011-07-11 19:19 UTC|newest]
Thread overview: 90+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-07-07 15:50 [RFC PATCH 00/17] ARM: common idle infrastructure Lorenzo Pieralisi
2011-07-07 15:50 ` [PATCH 01/17] ARM: proc: add definition of cpu_reset for ARMv6 and ARMv7 cores Lorenzo Pieralisi
2011-07-08 1:12 ` Santosh Shilimkar
2011-07-08 8:22 ` Will Deacon
2011-07-09 10:14 ` Russell King - ARM Linux
2011-07-10 11:00 ` Will Deacon
2011-07-10 11:52 ` Russell King - ARM Linux
2011-07-10 13:21 ` Will Deacon
2011-07-07 15:50 ` [PATCH 02/17] ARM: Add cpu power management notifiers Lorenzo Pieralisi
2011-07-08 1:14 ` Santosh Shilimkar
2011-07-09 10:15 ` Russell King - ARM Linux
2011-07-09 21:32 ` Colin Cross
2011-07-07 15:50 ` [PATCH 03/17] ARM: gic: Use cpu pm notifiers to save gic state Lorenzo Pieralisi
2011-07-08 1:35 ` Santosh Shilimkar
2011-07-08 1:41 ` Colin Cross
2011-07-08 2:07 ` Santosh Shilimkar
2011-07-08 7:08 ` Kukjin Kim
2011-07-09 10:21 ` Russell King - ARM Linux
2011-07-09 22:10 ` Colin Cross
2011-07-09 22:33 ` Russell King - ARM Linux
2011-07-09 23:01 ` Colin Cross
2011-07-09 23:05 ` Russell King - ARM Linux
2011-07-09 23:24 ` Colin Cross
2011-07-10 0:10 ` Santosh Shilimkar
2011-07-21 8:32 ` Santosh Shilimkar
2011-07-21 10:27 ` Lorenzo Pieralisi
2011-07-21 10:46 ` Santosh Shilimkar
2011-07-21 19:06 ` Colin Cross
2011-07-22 5:10 ` Santosh Shilimkar
2011-07-22 5:21 ` Colin Cross
2011-08-17 16:15 ` Santosh
2011-07-07 15:50 ` [PATCH 04/17] ARM: vfp: Use cpu pm notifiers to save vfp state Lorenzo Pieralisi
2011-07-09 10:44 ` Russell King - ARM Linux
2011-07-09 14:32 ` Russell King - ARM Linux
2011-07-07 15:50 ` [RFC PATCH 05/17] ARM: kernel: save/restore kernel IF Lorenzo Pieralisi
2011-07-08 1:45 ` Santosh Shilimkar
2011-07-08 8:39 ` Lorenzo Pieralisi
2011-07-08 16:12 ` Frank Hofmann
2011-07-11 14:00 ` Lorenzo Pieralisi
2011-07-11 14:31 ` Frank Hofmann
2011-07-11 16:02 ` Lorenzo Pieralisi
2011-07-11 16:57 ` Frank Hofmann
2011-07-11 18:05 ` Lorenzo Pieralisi
2011-07-11 18:40 ` Russell King - ARM Linux
2011-07-11 18:51 ` Colin Cross
2011-07-11 19:19 ` Russell King - ARM Linux [this message]
2011-07-11 19:38 ` Colin Cross
2011-07-11 20:09 ` Santosh Shilimkar
2011-07-11 20:05 ` Santosh Shilimkar
2011-07-11 20:14 ` Russell King - ARM Linux
2011-07-11 21:31 ` Santosh Shilimkar
2011-07-12 10:12 ` Lorenzo Pieralisi
2011-07-12 10:19 ` Russell King - ARM Linux
2011-07-09 8:38 ` Russell King - ARM Linux
2011-07-09 8:45 ` Russell King - ARM Linux
2011-07-11 15:36 ` Lorenzo Pieralisi
2011-07-07 15:50 ` [RFC PATCH 06/17] ARM: kernel: save/restore generic infrastructure Lorenzo Pieralisi
2011-07-08 1:58 ` Santosh Shilimkar
2011-07-08 10:33 ` Lorenzo Pieralisi
2011-07-09 10:01 ` Russell King - ARM Linux
2011-07-11 11:33 ` Lorenzo Pieralisi
2011-07-28 16:22 ` Amit Kachhap
2011-07-28 18:17 ` Lorenzo Pieralisi
2011-07-07 15:50 ` [RFC PATCH 07/17] ARM: kernel: save/restore v7 assembly helpers Lorenzo Pieralisi
2011-07-07 15:50 ` [RFC PATCH 08/17] ARM: kernel: save/restore arch runtime support Lorenzo Pieralisi
2011-07-07 15:50 ` [RFC PATCH 09/17] ARM: kernel: v7 resets support Lorenzo Pieralisi
2011-07-07 15:50 ` [RFC PATCH 10/17] ARM: kernel: save/restore v7 infrastructure support Lorenzo Pieralisi
2011-07-07 15:50 ` [RFC PATCH 11/17] ARM: kernel: add support for Lamport's bakery locks Lorenzo Pieralisi
2011-07-07 15:50 ` [RFC PATCH 12/17] ARM: kernel: add SCU reset hook Lorenzo Pieralisi
2011-07-08 2:14 ` Santosh Shilimkar
2011-07-08 9:47 ` Lorenzo Pieralisi
2011-07-07 15:50 ` [RFC PATCH 13/17] ARM: mm: L2x0 save/restore support Lorenzo Pieralisi
2011-07-07 22:06 ` Colin Cross
2011-07-08 8:25 ` Lorenzo Pieralisi
2011-07-08 2:19 ` Santosh Shilimkar
2011-07-08 10:54 ` Lorenzo Pieralisi
2011-07-07 15:50 ` [RFC PATCH 14/17] ARM: kernel: save/restore 1:1 page tables Lorenzo Pieralisi
2011-07-08 2:24 ` Santosh Shilimkar
2011-07-08 10:48 ` Lorenzo Pieralisi
2011-07-07 15:50 ` [RFC PATCH 15/17] ARM: perf: use cpu pm notifiers to save pmu state Lorenzo Pieralisi
2011-07-07 15:50 ` [RFC PATCH 16/17] ARM: PM: enhance idle pm notifiers Lorenzo Pieralisi
2011-07-07 21:20 ` Colin Cross
2011-07-08 9:04 ` Lorenzo Pieralisi
2011-07-07 15:50 ` [RFC PATCH 17/17] ARM: kernel: save/restore build infrastructure Lorenzo Pieralisi
2011-07-08 2:29 ` Santosh Shilimkar
2011-07-08 15:14 ` Lorenzo Pieralisi
2011-07-26 12:14 ` Amit Kachhap
2011-07-27 8:48 ` Lorenzo Pieralisi
2011-07-07 17:15 ` [RFC PATCH 00/17] ARM: common idle infrastructure Russell King - ARM Linux
2011-07-08 7:56 ` Lorenzo Pieralisi
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=20110711191952.GC8486@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).