In fact that makes a heck of a lot more sense to me from the
conceptual point of view. From the hardware perspective, the
task of preparing to enter true suspend states (STR, or suspend
for ACPI; embedded systems have more options) focusses on what
I/O signals are disabled.
Once the relevant I/O signals are first idled, then disabled,
the CPU can do whatever it likes. Whether it runs or not is
purely a workload decision...
Remember too that not all systems suffer from the constraints
that ACPI decrees. In particular, it's not uncommon that some
parts of the system be active in certain suspend states. The
whole point is to turn off as much of the system as possible,
especially the high power portions, while letting work proceed.
Turning off some clocks and peripherals doesn't need to imply
turning them all off, or disabling DMA ... and should not need
to be triggered by a user (or userspace tool) explicitly saying
"go into STR".
Exactly. "Selective suspend" of parts of the system is a far
more general model. It fits well with runtime power management,
degrades smoothly to states where memory goes into self-refresh
(maybe the system idle loop when NO_HZ is being effective) or
even hibernation (as discussed elsewhere).
- Dave
-