Messages in this thread | | | From | "Rafael J. Wysocki" <> | Subject | Re: PCI PM: Restore standard config registers of all devices early | Date | Mon, 2 Feb 2009 23:56:32 +0100 |
| |
On Monday 02 February 2009, Rafael J. Wysocki wrote: > On Monday 02 February 2009, Linus Torvalds wrote: > > > > On Mon, 2 Feb 2009, Rafael J. Wysocki wrote: > > > > > > I think it would be easier to make ACPI allow us to run AML with interrupts > > > off. > > > > Well, I'd agree, except I have this strong memory of us having known bugs > > with ACPI turning hard-interrupts on again. Similarly, it uses mutexes etc > > that simply don't work with interrupts off and/or may turn them on again > > thanks to scheduling. > > > > "Fixing" that seems not very easy. ACPI has a bad habit of being _really_ > > hard to fix in this area. > > > > I do agree that _if_ we can just fix ACPI, we wouldn't have these issues, > > and we should just call it with interrupts disabled with our existing > > code. But my previous email was a "maybe we can do it like this" kind of > > thing, which might allow us to use ACPI with none of the irq-off issues. > > Well, I think both will be difficult, this way or another. :-) > > I'll have a look at the ACPI thing.
Generally speaking, we'd need to run acpi_evaluate_object() with interrupts off.
There are two apparent problems with that, from a quick look:
* The ACPI_MTX_INTERPRETER mutex needs to be acquired, but we know we won't need that mutex with interrupts off, so presumably we can work around this.
* Memory allocations with GFP_KERNEL are made, which is even worse, because we really shouldn't do that during suspend _at_ _all_, even during the regular ->suspend() with interrupts on, because there's not guarantee that swap will will be available at that time. So, for the sake of correctness, we should get rid of the GFP_KERNEL from the ACPI code paths executed during suspend-resume anyway.
Thanks, Rafael
| |