mm: cma: Ensure that reservations never cross the low/high mem boundary
authorLaurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Fri, 24 Oct 2014 10:18:41 +0000 (13:18 +0300)
committerMarek Szyprowski <m.szyprowski@samsung.com>
Mon, 27 Oct 2014 12:00:54 +0000 (13:00 +0100)
commit16195ddd4ebcc10c30b2f232f8e400df8d464380
tree7fe365184316ad8211913feeddbf99f457c01318
parent800a85d3d286604b8c539ca7ee90b992316fd2a7
mm: cma: Ensure that reservations never cross the low/high mem boundary

Commit 95b0e655f914 ("ARM: mm: don't limit default CMA region only to
low memory") extended CMA memory reservation to allow usage of high
memory. It relied on commit f7426b983a6a ("mm: cma: adjust address limit
to avoid hitting low/high memory boundary") to ensure that the reserved
block never crossed the low/high memory boundary. While the
implementation correctly lowered the limit, it failed to consider the
case where the base..limit range crossed the low/high memory boundary
with enough space on each side to reserve the requested size on either
low or high memory.

Rework the base and limit adjustment to fix the problem. The function
now starts by rejecting the reservation altogether for fixed
reservations that cross the boundary, tries to reserve from high memory
first and then falls back to low memory.

Signed-off-by: Laurent Pinchart <laurent.pinchart+renesas@ideasonboard.com>
Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
mm/cma.c