• Rafael J. Wysocki's avatar
    PM / Hibernate: Avoid hitting OOM during preallocation of memory · 7af74e78
    Rafael J. Wysocki authored
    commit 6715045d upstream.
    
    There is a problem in hibernate_preallocate_memory() that it calls
    preallocate_image_memory() with an argument that may be greater than
    the total number of available non-highmem memory pages.  If that's
    the case, the OOM condition is guaranteed to trigger, which in turn
    can cause significant slowdown to occur during hibernation.
    
    To avoid that, make preallocate_image_memory() adjust its argument
    before calling preallocate_image_pages(), so that the total number of
    saveable non-highem pages left is not less than the minimum size of
    a hibernation image.  Change hibernate_preallocate_memory() to try to
    allocate from highmem if the number of pages allocated by
    preallocate_image_memory() is too low.
    
    Modify free_unnecessary_pages() to take all possible memory
    allocation patterns into account.
    Reported-by: default avatarKOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com>
    Signed-off-by: default avatarRafael J. Wysocki <rjw@sisk.pl>
    Tested-by: default avatarM. Vefa Bicakci <bicave@superonline.com>
    Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@suse.de>
    7af74e78
snapshot.c 60.3 KB