2004-10-11 23:02:41

by Bjorn Helgaas

[permalink] [raw]
Subject: swsusp resume doesn't sysdev_resume

Swsusp often fails on -mm kernels because sysdev_resume doesn't
get called in the resume path. So things like ACPI IRQ links
used by modular drivers don't get restored.

We can work around this by using "pci=routeirq", so all the IRQ
setup gets done at boot-time, but that's an ugly hack, and I
expect that we'll trip over other sysdevs that need to be resumed
anyway.

I don't understand swsusp well enough to fix this. It's not enough
to just call device_power_up() before device_resume(), because it
relies on sysdev_suspend() having been called before the suspend
image was created.

Any hints?


2004-10-14 13:38:21

by Pavel Machek

[permalink] [raw]
Subject: Re: swsusp resume doesn't sysdev_resume

Hi!

Sorry for long delay.

> Swsusp often fails on -mm kernels because sysdev_resume doesn't
> get called in the resume path. So things like ACPI IRQ links
> used by modular drivers don't get restored.
>
> We can work around this by using "pci=routeirq", so all the IRQ
> setup gets done at boot-time, but that's an ugly hack, and I
> expect that we'll trip over other sysdevs that need to be resumed
> anyway.
>
> I don't understand swsusp well enough to fix this. It's not enough
> to just call device_power_up() before device_resume(), because it
> relies on sysdev_suspend() having been called before the suspend
> image was created.

Can you try adding sysdev_suspend() and sysdev_resume() and see what
breaks? Its probably right thing to do...
Pavel
--
People were complaining that M$ turns users into beta-testers...
...jr ghea gurz vagb qrirybcref, naq gurl frrz gb yvxr vg gung jnl!