• Nathan Bryant's avatar
    [ACPI] restore PCI Interrupt Link Devices upon resume · 06df8085
    Nathan Bryant authored
    * register as as a sys_device so that we can get resume callbacks and restore
      interrupt routing state.
    * add acpi_pci_link_resume(), which will be called when resuming from a suspend
      state that needs IRQ routing to be restored. This fixes issues reported on
      the mailing lists, e.g.:
    http://marc.theaimsgroup.com/?l=acpi4linux&m=109142999328643&w=2
    * rename setonboot --> initialized
    * change to test acpi_noirq in init
    
    We want to initialize everything on S3 resume in case the BIOS points an
    interrupt link somewhere we didn't expect. (Doing so avoids "missing interrupt"
    or "irq x: nobody cared" problems.) According to Len, past experience has shown
    that it's a good idea to initialize only devices that exist or were explicitly
    asked for, so we try to initialize only the IRQ's that were previously
    initialized at some point before suspend, by checking the "initialized" flag.
    This corresponds to links that have PCI devices attached.  Everything else, we
    leave alone. Assuming the BIOS does the same thing on resume that it did on
    boot, this will leave all the unused links in the same state that they were on
    boot.
    
    We are registered as a sysdev in order to do this work fairly early during
    resume, before devices are resumed; some devices may not call
    pci_device_enable.
    
    Previous "setonboot once" behavior is left in place, to be conservative.
    06df8085
pci_link.c 21.9 KB