On Wed 2009-05-13 10:37:49, Rafael J. Wysocki wrote: > From: Rafael J. Wysocki <rjw@xxxxxxx> > > Currently, the following scenario appears to be possible in theory: > > * Tasks are frozen for hibernation or suspend. > * Free pages are almost exhausted. > * Certain piece of code in the suspend code path attempts to allocate > some memory using GFP_KERNEL and allocation order less than or > equal to PAGE_ALLOC_COSTLY_ORDER. > * __alloc_pages_internal() cannot find a free page so it invokes the > OOM killer. > * The OOM killer attempts to kill a task, but the task is frozen, so > it doesn't die immediately. > * __alloc_pages_internal() jumps to 'restart', unsuccessfully tries > to find a free page and invokes the OOM killer. > * No progress can be made. > > Although it is now hard to trigger during hibernation due to the > memory shrinking carried out by the hibernation code, it is > theoretically possible to trigger during suspend after the memory > shrinking has been removed from that code path. Moreover, since > memory allocations are going to be used for the hibernation memory > shrinking, it will be even more likely to happen during hibernation. > > To prevent it from happening, introduce the oom_killer_disabled > switch that will cause __alloc_pages_internal() to fail in the > situations in which the OOM killer would have been called and make > the freezer set this switch after tasks have been successfully > frozen. > > Signed-off-by: Rafael J. Wysocki <rjw@xxxxxxx> Acked-by: Pavel Machek <pavel@xxxxxx> -- (english) http://www.livejournal.com/~pavelmachek (cesky, pictures) http://atrey.karlin.mff.cuni.cz/~pavel/picture/horses/blog.html _______________________________________________ linux-pm mailing list linux-pm@xxxxxxxxxxxxxxxxxxxxxxxxxx https://lists.linux-foundation.org/mailman/listinfo/linux-pm