diff --git a/[refs] b/[refs] index 4221530cd00b..e1481ecbb137 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 8375d4909aee4c18798f373ecf24a79f040f75fc +refs/heads/master: 0bef3c2dc7d0c8238330785c8f4504761b0e370b diff --git a/trunk/kernel/dma-coherent.c b/trunk/kernel/dma-coherent.c index f013a0c2e111..4bdcea822b45 100644 --- a/trunk/kernel/dma-coherent.c +++ b/trunk/kernel/dma-coherent.c @@ -116,11 +116,25 @@ int dma_alloc_from_coherent(struct device *dev, ssize_t size, int page = bitmap_find_free_region(mem->bitmap, mem->size, order); if (page >= 0) { + /* + * Memory was found in the per-device arena. + */ *dma_handle = mem->device_base + (page << PAGE_SHIFT); *ret = mem->virt_base + (page << PAGE_SHIFT); memset(*ret, 0, size); - } else if (mem->flags & DMA_MEMORY_EXCLUSIVE) + } else if (mem->flags & DMA_MEMORY_EXCLUSIVE) { + /* + * The per-device arena is exhausted and we are not + * permitted to fall back to generic memory. + */ *ret = NULL; + } else { + /* + * The per-device arena is exhausted and we are + * permitted to fall back to generic memory. + */ + return 0; + } } return (mem != NULL); }