@@ -450,20 +450,30 @@ static void *__alloc_from_pool(size_t size, struct page **ret_page)
return ptr;
}
-static int __free_from_pool(void *start, size_t size)
+static bool __in_atomic_pool(void *start, size_t size)
{
struct dma_pool *pool = &atomic_pool;
- unsigned long pageno, count;
- unsigned long flags;
if (start < pool->vaddr || start > pool->vaddr + pool->size)
- return 0;
+ return false;
if (start + size > pool->vaddr + pool->size) {
WARN(1, "freeing wrong coherent size from pool\n");
- return 0;
+ return false;
}
+ return true;
+}
+
+static int __free_from_pool(void *start, size_t size)
+{
+ struct dma_pool *pool = &atomic_pool;
+ unsigned long pageno, count;
+ unsigned long flags;
+
+ if (!__in_atomic_pool(start, size))
+ return 0;
+
pageno = (start - pool->vaddr) >> PAGE_SHIFT;
count = size >> PAGE_SHIFT;