• R
    [PATCH] swsusp: Introduce memory bitmaps · b788db79
    Rafael J. Wysocki 提交于
    Introduce the memory bitmap data structure and make swsusp use in the suspend
    phase.
    
    The current swsusp's internal data structure is not very efficient from the
    memory usage point of view, so it seems reasonable to replace it with a data
    structure that will require less memory, such as a pair of bitmaps.
    
    The idea is to use bitmaps that may be allocated as sets of individual pages,
    so that we can avoid making allocations of order greater than 0.  For this
    reason the memory bitmap structure consists of several linked lists of objects
    that contain pointers to memory pages with the actual bitmap data.  Still, for
    a typical system all of these lists fit in a single page, so it's reasonable
    to introduce an additional mechanism allowing us to allocate all of them
    efficiently without sacrificing the generality of the design.  This is done
    with the help of the chain_allocator structure and associated functions.
    
    We need to use two memory bitmaps during the suspend phase of the
    suspend-resume cycle.  One of them is necessary for marking the saveable
    pages, and the second is used to mark the pages in which to store the copies
    of them (aka image pages).
    
    First, the bitmaps are created and we allocate as many image pages as needed
    (the corresponding bits in the second bitmap are set as soon as the pages are
    allocated).  Second, the bits corresponding to the saveable pages are set in
    the first bitmap and the saveable pages are copied to the image pages.
    Finally, the first bitmap is used to save the kernel virtual addresses of the
    saveable pages and the second one is used to save the contents of the image
    pages.
    Signed-off-by: NRafael J. Wysocki <rjw@sisk.pl>
    Acked-by: NPavel Machek <pavel@ucw.cz>
    Signed-off-by: NAndrew Morton <akpm@osdl.org>
    Signed-off-by: NLinus Torvalds <torvalds@osdl.org>
    b788db79
swsusp.c 6.8 KB