Re: PCI PM: Restore standard config registers of all devices early

Rafael J. Wysocki
2009-02-02T22:57:22Z

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