[ACPI] S3 resume: avoid kmalloc() might_sleep oops symptom
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>
This commit is contained in:
Родитель
8066eff0a1
Коммит
11e981f1e0
|
@ -145,10 +145,14 @@ acpi_os_vprintf(const char *fmt, va_list args)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
extern int acpi_in_resume;
|
||||||
void *
|
void *
|
||||||
acpi_os_allocate(acpi_size size)
|
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
|
void
|
||||||
|
|
|
@ -798,6 +798,11 @@ acpi_pci_link_resume(
|
||||||
return_VALUE(0);
|
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
|
static int
|
||||||
irqrouter_resume(
|
irqrouter_resume(
|
||||||
struct sys_device *dev)
|
struct sys_device *dev)
|
||||||
|
@ -807,6 +812,7 @@ irqrouter_resume(
|
||||||
|
|
||||||
ACPI_FUNCTION_TRACE("irqrouter_resume");
|
ACPI_FUNCTION_TRACE("irqrouter_resume");
|
||||||
|
|
||||||
|
acpi_in_resume = 1;
|
||||||
list_for_each(node, &acpi_link.entries) {
|
list_for_each(node, &acpi_link.entries) {
|
||||||
link = list_entry(node, struct acpi_pci_link, node);
|
link = list_entry(node, struct acpi_pci_link, node);
|
||||||
if (!link) {
|
if (!link) {
|
||||||
|
@ -816,6 +822,7 @@ irqrouter_resume(
|
||||||
}
|
}
|
||||||
acpi_pci_link_resume(link);
|
acpi_pci_link_resume(link);
|
||||||
}
|
}
|
||||||
|
acpi_in_resume = 0;
|
||||||
return_VALUE(0);
|
return_VALUE(0);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Загрузка…
Ссылка в новой задаче