On Tue, 17 Jul 2007, Rafael J. Wysocki wrote:
I'm afraid of one thing, though.
If we create a framework without ACPI (well, ACPI needs to be enabled in the
kernel anyway for other reasons, like the ability to suspend to RAM) and then
it turns out that we have to add some ACPI hooks to it, that might be difficult
to do cleanly.
Thus, it seems reasonable to think of the ACPI handling in advance.
Absolutely. This needs to be done in such a way that it will work:
On platforms without ACPI;
On platforms with ACPI where we do a non-ACPI type of shutdown
to whatever extent it is possible (or perhaps an ACPI-aware
shutdown rather than change to S4);
On platforms with ACPI where we do an ACPI-aware transition
to S4.
Rafael, for those of us who aren't thoroughly familiar with all the ins
and outs of the ACPI spec, could you please summarize a list of the
ACPI calls needed in the second and third cases above? Indicate which
ones need to be done from within the original kernel and which should
be done from within a kexec'd hibernation kernel.
I'm still not entirely clear on how "suspend-to-both" ought to be
handled. Presumably it will start off as a normal hibernation. But
instead of shutting down, wouldn't the kexec'd kernel return to the
original kernel? After all, the original kernel knows about all the
devices and can put them into a low-power state, while the kexec'd
kernel might not have sufficient information.
But what about the freezer? The original reason for using kexec was to
avoid the need for the freezer. With no freezer, while the original
kernel is busy powering down its devices, user tasks will be free to
carry out I/O -- which will make the memory snapshot inconsistent with
the on-disk data structures.