Hi,
On Wed, 2005-06-01 at 07:50 +0800, Benjamin Herrenschmidt wrote:
On Wed, 2005-06-01 at 00:45 +1000, Benjamin Herrenschmidt wrote:
quoted
On Tue, 2005-05-31 at 12:36 +0200, Pavel Machek wrote:
quoted
Hi!
quoted
If we specify a swap device for swsusp using resume= kernel
argument and
quoted
quoted
quoted
that device doesn't exist in the swap list, we end up calling
swsusp_free() before we have allocated pagedir_save. That causes
us to
quoted
quoted
quoted
explode when trying to free it.
Pavel, does that look right ?
It looks like a workaround. We should not call swsusp_free in
case
quoted
quoted
device does not exists. Quick look did not reveal where the bug
comes
quoted
quoted
from, can you try to trace it?
Pavel
Well, the bug comes from arch code calling swsusp_save() which
fails,
quoted
then we call swsusp_free()
More specifically, arch suspend calls swsusp_save().
It fails and returns the error to the arch asm code, which itself
returns it to it's caller swsusp_suspend(), which does that:
if ((error = swsusp_arch_suspend()))
swsusp_free();
I encounter a similar issue, when swsusp_swap_check failed.
It seems the swsusp_free isn't required in the failure case,
suspend_prepare_image has correctly handled the failure case to me.
Other arch? I wonder why swsusp_free is called after device_power_down
failed as well. No pages are allocated before device_power_down.
Thanks,
Shaohua