summaryrefslogtreecommitdiffstats
path: root/drivers/acpi
diff options
context:
space:
mode:
authorDave Jones <davej@redhat.com>2005-12-12 00:37:40 -0800
committerLinus Torvalds <torvalds@g5.osdl.org>2005-12-12 08:57:45 -0800
commita64882e795cc1d890e3359d0aa143af1cf67e8d4 (patch)
tree9b766783e8034d81f1e460a02da0ffbdc8a4aef1 /drivers/acpi
parent66d43e98ea6ff291cd4e524386bfb99105feb180 (diff)
downloadlinux-a64882e795cc1d890e3359d0aa143af1cf67e8d4.tar.gz
linux-a64882e795cc1d890e3359d0aa143af1cf67e8d4.tar.bz2
linux-a64882e795cc1d890e3359d0aa143af1cf67e8d4.zip
[PATCH] ACPI: fix 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 <davej@redhat.com> Cc: "Brown, Len" <len.brown@intel.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Diffstat (limited to 'drivers/acpi')
-rw-r--r--drivers/acpi/pci_link.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/drivers/acpi/pci_link.c b/drivers/acpi/pci_link.c
index 82292b77e5c6..78927c0f1551 100644
--- a/drivers/acpi/pci_link.c
+++ b/drivers/acpi/pci_link.c
@@ -316,7 +316,7 @@ static int acpi_pci_link_set(struct acpi_pci_link *link, int irq)
if (!link || !irq)
return_VALUE(-EINVAL);
- resource = kmalloc(sizeof(*resource) + 1, GFP_KERNEL);
+ resource = kmalloc(sizeof(*resource) + 1, GFP_ATOMIC);
if (!resource)
return_VALUE(-ENOMEM);