ACPI sleeping whilst atomic warnings on resume.
This has been broken for months. On resume, we call acpi_pci_link_set() with interrupts off, so we get a warning when we try to do a kmalloc of non atomic memory. The actual allocation is just 2 long's (plus extra byte for some reason I can't fathom), so a simple conversion to GFP_ATOMIC is probably the safest way to fix this.
The error looks like this..
Debug: sleeping function called from invalid context at mm/slab.c:2486 in_atomic():0, irqs_disabled():1
[<c0143f6c>] kmem_cache_alloc+0x40/0x56 [<c0206a2e>] acpi_pci_link_set+0x3f/0x17f [<c0206f96>] irqrouter_resume+0x1e/0x3c [<c0239bca>] __sysdev_resume+0x11/0x6b [<c0239e88>] sysdev_resume+0x34/0x52 [<c023de21>] device_power_up+0x5/0xa
Signed-off-by Dave Jones <[email protected]>
drivers/acpi/pci_link.c renamed from drivers/acpi/pci_link.c~ +1 -1
@@ -316,7 +316,7 @@ static int acpi_pci_link_set(struct acpiif (!link || !irq)return_VALUE (-EINVAL ); - resource =kmalloc (sizeof (*resource) +1 ,GFP_KERNEL ); + resource =kmalloc (sizeof (*resource) +1 ,GFP_ATOMIC );if (!resource)return_VALUE (-ENOMEM );