Skip to content
  • Doug Berger's avatar
    cma: fix calculation of aligned offset · e048cb32
    Doug Berger authored
    The align_offset parameter is used by bitmap_find_next_zero_area_off()
    to represent the offset of map's base from the previous alignment
    boundary; the function ensures that the returned index, plus the
    align_offset, honors the specified align_mask.
    
    The logic introduced by commit b5be83e3 ("mm: cma: align to physical
    address, not CMA region position") has the cma driver calculate the
    offset to the *next* alignment boundary.  In most cases, the base
    alignment is greater than that specified when making allocations,
    resulting in a zero offset whether we align up or down.  In the example
    given with the commit, the base alignment (8MB) was half the requested
    alignment (16MB) so the math also happened to work since the offset is
    8MB in both directions.  However, when requesting allocations with an
    alignment greater than twice that of the base, the returned index would
    not be correctly aligned.
    
    Also, the align_order arguments of cma_bitmap_aligned_mask() and
    cma_bitmap_aligned_offset() should not be negative so the argument type
    was made unsigned.
    
    Fixes: b5be83e3 ("mm: cma: align to physical address, not CMA region position")
    Link: http://lkml.kernel.org/r/20170628170742.2895-1-opendmb@gmail.com
    
    
    Signed-off-by: default avatarAngus Clark <angus@angusclark.org>
    Signed-off-by: default avatarDoug Berger <opendmb@gmail.com>
    Acked-by: default avatarGregory Fong <gregory.0xf0@gmail.com>
    Cc: Doug Berger <opendmb@gmail.com>
    Cc: Angus Clark <angus@angusclark.org>
    Cc: Laura Abbott <labbott@redhat.com>
    Cc: Vlastimil Babka <vbabka@suse.cz>
    Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
    Cc: Lucas Stach <l.stach@pengutronix.de>
    Cc: Catalin Marinas <catalin.marinas@arm.com>
    Cc: Shiraz Hashim <shashim@codeaurora.org>
    Cc: Jaewon Kim <jaewon31.kim@samsung.com>
    Signed-off-by: default avatarAndrew Morton <akpm@linux-foundation.org>
    Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
    e048cb32