Skip to content

Commit

Permalink
[ACPI] S3 resume: avoid kmalloc() might_sleep oops symptom
Browse files Browse the repository at this point in the history
ACPI now uses kmalloc(...,GPF_ATOMIC) during suspend/resume.

http://bugzilla.kernel.org/show_bug.cgi?id=3469

Signed-off-by: David Shaohua Li <shaohua.li@intel.com>
Signed-off-by: Len Brown <len.brown@intel.com>
  • Loading branch information
David Shaohua Li authored and Len Brown committed Aug 4, 2005
1 parent 8066eff commit 11e981f
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 1 deletion.
6 changes: 5 additions & 1 deletion drivers/acpi/osl.c
Original file line number Diff line number Diff line change
Expand Up @@ -145,10 +145,14 @@ acpi_os_vprintf(const char *fmt, va_list args)
#endif
}

extern int acpi_in_resume;
void *
acpi_os_allocate(acpi_size size)
{
return kmalloc(size, GFP_KERNEL);
if (acpi_in_resume)
return kmalloc(size, GFP_ATOMIC);
else
return kmalloc(size, GFP_KERNEL);
}

void
Expand Down
7 changes: 7 additions & 0 deletions drivers/acpi/pci_link.c
Original file line number Diff line number Diff line change
Expand Up @@ -798,6 +798,11 @@ acpi_pci_link_resume(
return_VALUE(0);
}

/*
* FIXME: this is a workaround to avoid nasty warning. It will be removed
* after every device calls pci_disable_device in .resume.
*/
int acpi_in_resume;
static int
irqrouter_resume(
struct sys_device *dev)
Expand All @@ -807,6 +812,7 @@ irqrouter_resume(

ACPI_FUNCTION_TRACE("irqrouter_resume");

acpi_in_resume = 1;
list_for_each(node, &acpi_link.entries) {
link = list_entry(node, struct acpi_pci_link, node);
if (!link) {
Expand All @@ -816,6 +822,7 @@ irqrouter_resume(
}
acpi_pci_link_resume(link);
}
acpi_in_resume = 0;
return_VALUE(0);
}

Expand Down

0 comments on commit 11e981f

Please sign in to comment.