[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <20141028152444.79bd9fe9@canb.auug.org.au>
Date: Tue, 28 Oct 2014 15:24:44 +1100
From: Stephen Rothwell <sfr@...b.auug.org.au>
To: Andrew Morton <akpm@...ux-foundation.org>,
Marek Szyprowski <m.szyprowski@...sung.com>,
Kyungmin Park <kyungmin.park@...sung.com>
Cc: linux-next@...r.kernel.org, linux-kernel@...r.kernel.org,
Laurent Pinchart <laurent.pinchart+renesas@...asonboard.com>,
Thierry Reding <treding@...dia.com>
Subject: linux-next: manual merge of the akpm-current tree with the
dma-mapping tree
Hi Andrew,
Today's linux-next merge of the akpm-current tree got a conflict in
mm/cma.c between commit 16195ddd4ebc ("mm: cma: Ensure that
reservations never cross the low/high mem boundary") from the
dma-mapping tree and commit 2a70e5a78672 ("mm/cma: ake kmemleak ignore
CMA regions") from the akpm-current tree.
I fixed it up (I think - see below) and can carry the fix as necessary
(no action is required).
--
Cheers,
Stephen Rothwell sfr@...b.auug.org.au
diff --cc mm/cma.c
index fde706e1284f,471fcfef043b..000000000000
--- a/mm/cma.c
+++ b/mm/cma.c
@@@ -278,30 -274,20 +278,35 @@@ int __init cma_declare_contiguous(phys_
goto err;
}
} else {
- phys_addr_t addr = memblock_alloc_range(size, alignment, base,
- limit);
+ phys_addr_t addr = 0;
+
+ /*
+ * All pages in the reserved area must come from the same zone.
+ * If the requested region crosses the low/high memory boundary,
+ * try allocating from high memory first and fall back to low
+ * memory in case of failure.
+ */
+ if (base < highmem_start && limit > highmem_start) {
+ addr = memblock_alloc_range(size, alignment,
+ highmem_start, limit);
+ limit = highmem_start;
+ }
+
if (!addr) {
- ret = -ENOMEM;
- goto err;
- } else {
- /*
- * kmemleak scans/reads tracked objects for pointers to
- * other objects but this address isn't mapped and
- * accessible
- */
- kmemleak_ignore(phys_to_virt(addr));
- base = addr;
+ addr = memblock_alloc_range(size, alignment, base,
+ limit);
+ if (!addr) {
+ ret = -ENOMEM;
+ goto err;
+ }
}
-
++ /*
++ * kmemleak scans/reads tracked objects for pointers to
++ * other objects but this address isn't mapped and
++ * accessible
++ */
++ kmemleak_ignore(phys_to_virt(addr));
+ base = addr;
}
ret = cma_init_reserved_mem(base, size, order_per_bit, res_cma);
Content of type "application/pgp-signature" skipped
Powered by blists - more mailing lists