The upper limit needs to be rounded down to a multiple of the alignment, not up.
Signed-off-by: Mans Rullgard mans.rullgard@linaro.org --- drivers/base/dma-contiguous.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/base/dma-contiguous.c b/drivers/base/dma-contiguous.c index 924c052..e10120f 100644 --- a/drivers/base/dma-contiguous.c +++ b/drivers/base/dma-contiguous.c @@ -256,7 +256,7 @@ int __init dma_declare_contiguous(struct device *dev, unsigned long size, alignment = PAGE_SIZE << max(MAX_ORDER, pageblock_order); base = ALIGN(base, alignment); size = ALIGN(size, alignment); - limit = ALIGN(limit, alignment); + limit &= ~(alignment - 1);
/* Reserve memory */ if (base) {
Hello,
On Monday, January 09, 2012 9:53 PM Mans Rullgard wrote:
The upper limit needs to be rounded down to a multiple of the alignment, not up.
Signed-off-by: Mans Rullgard mans.rullgard@linaro.org
Thanks for spotting this issue! I will add this change to the next version of CMA patches.
drivers/base/dma-contiguous.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
diff --git a/drivers/base/dma-contiguous.c b/drivers/base/dma-contiguous.c index 924c052..e10120f 100644 --- a/drivers/base/dma-contiguous.c +++ b/drivers/base/dma-contiguous.c @@ -256,7 +256,7 @@ int __init dma_declare_contiguous(struct device *dev, unsigned long size, alignment = PAGE_SIZE << max(MAX_ORDER, pageblock_order); base = ALIGN(base, alignment); size = ALIGN(size, alignment);
- limit = ALIGN(limit, alignment);
limit &= ~(alignment - 1);
/* Reserve memory */ if (base) {
--
Best regards
linaro-mm-sig@lists.linaro.org