Re: [linux-pm] Re: Hibernation considerations

Alan Stern
2007-07-22T16:00:37Z

On Sat, 21 Jul 2007 david@lang.hm wrote:

> wait a min her, it's possible we are misunderstanding each other.

I'd describe it as: You are misunderstanding me. :-)

> as I see it.
>
> if userspace can aquire locks that prevent the kernel from shutting off
> (or doing anything else in particular) then it's possible for misbehaving
> userspace code to stop the kernel by simply choosing to never release the
> lock.
>
> this would be a trivial DOS from userspace.

You are confusing "userspace" with "user tasks". And not only that,
you often use the term "userspace" when you should say "user mode".

If you want I can explain the differences.

> now, if you are talking instead about the fact that when userspace makes a
> system call, the execution of that system call involves aquiring locks
> that are released before the system call completes you have a very
> different situation.

That is exactly what I have been talking about. It may be different
from what you _thought_, but it's not different from what I actually
_said_.

> if you have locks that are held across system calls then you should
> already have problems. becouse you can't count on userspace ever taking
> whatever action is appropriate to release the lock.
>
> what am I missing that concerns you so much?

Here's what you are missing:

The new kexec approach eliminates the freezer and relies instead on the
fact that none of the tasks in the original kernel can execute while
the new kexec'd kernel is running. This means the new kernel can write
out a memory image with no fear of interference or corruption.

But it also means that tasks which otherwise would have been frozen are
actually free to run before the kexec call is made (and after the call
returns, if the kexec'd kernel returns back to the original kernel).
Any driver which was written with the assumption that tasks would be
frozen at those times will need to be changed.

For example, drivers know that they have to quiesce their device in
preparation for creating the memory snapshot. But they assume that no
I/O requests will be made while the device is quiesced (because no user
task is capable of generating an I/O request if they are all frozen),
so the driver doesn't try to prevent such requests from reactivating
the device.

The situation as regards locking is harder to discuss since I don't
know of any code examples to use as a guide. The fact remains that if
user tasks aren't frozen then they can make system calls, and while
running in kernel mode they can acquire locks, which might cause
problems -- even though I can't identify any definite examples.

Because of these problems, it's too early to start trying to use kexec
to avoid the need for the freezer.

Of course, exactly the same possible problems exist when one tries to
remove the freezer from suspend-to-RAM. It has nothing to do with
kexec in particular (and certainly nothing to do with ACPI).

> having read through Documentation/power/devices.txt I remain convinced
> that you are making a fundamental mistake.
>
> you are designing a system

I'm not designing anything! _You_ are. I'm merely pointing out
problems in your design which you haven't considered.

> that will only work if everything (every
> driver, every state transition) participates fully in the process at all
> times. You started with the facts 'this is the info that ACPI provides

Look again; I wasn't talking about ACPI. You have mixed up the issues
in this email thread. (Not hard to do, since it has been a very long
and complicated thread.)

> and
> this is how it is designed to be used' and worked from there instead of
> looking to see what the kernel really needed and figuring how to provide a
> good interface for that that happens to be implemented (today) with ACPI.
> (a proper power management framework shouldn't care if you have ACPI, APM,
> or some other method of controlling the devices)

This and the rest of your email have no bearing on what I was talking
about, so I have snipped out the remainder.

Alan Stern