diff options
author | Adrian McMenamin <adrian@mcmen.demon.co.uk> | 2009-01-21 10:47:38 +0100 |
---|---|---|
committer | Paul Mundt <lethal@linux-sh.org> | 2009-01-21 10:47:38 +0100 |
commit | cdf57cab27aef72f13a19c86858c6cac9951dc24 (patch) | |
tree | 86226edbbe82c3f3ddca7e1ad929037e2f0ea6ad /kernel/dma-coherent.c | |
parent | sh: fix unaligned and nonexistent address handling (diff) | |
download | linux-cdf57cab27aef72f13a19c86858c6cac9951dc24.tar.xz linux-cdf57cab27aef72f13a19c86858c6cac9951dc24.zip |
dma-coherent: per-device coherent area is in pages, not bytes.
Commit 58c6d3dfe436eb8cfb451981d8fdc9044eaf42da ("dma-coherent: catch
oversized requests to dma_alloc_from_coherent()") attempted to add a
sanity check to bail out on allocations larger than the coherent area.
Unfortunately when this was implemented, the fact the coherent area
is tracked in pages rather than bytes was overlooked, which subsequently
broke every single dma_alloc_from_coherent() user, forcing the allocation
silently through generic memory instead.
Signed-off-by: Adrian McMenamin <adrian@mcmen.demon.co.uk >
Signed-off-by: Paul Mundt <lethal@linux-sh.org>
Diffstat (limited to 'kernel/dma-coherent.c')
-rw-r--r-- | kernel/dma-coherent.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/kernel/dma-coherent.c b/kernel/dma-coherent.c index 038707404b76..38fa292c6aa9 100644 --- a/kernel/dma-coherent.c +++ b/kernel/dma-coherent.c @@ -118,8 +118,8 @@ int dma_alloc_from_coherent(struct device *dev, ssize_t size, mem = dev->dma_mem; if (!mem) return 0; - if (unlikely(size > mem->size)) - return 0; + if (unlikely(size > (mem->size << PAGE_SHIFT))) + return 0; pageno = bitmap_find_free_region(mem->bitmap, mem->size, order); if (pageno >= 0) { |