On Mon, Nov 09, 2015 at 08:56:10PM +0900, Tetsuo Handa wrote:
There are many locations that do
if (memory_was_allocated_by_vmalloc) vfree(ptr); else kfree(ptr);
but kvfree() can handle both kmalloc()ed memory and vmalloc()ed memory using is_vmalloc_addr(). Unless callers have special reasons, we can replace this branch with kvfree(). Please check and reply if you found problems.
Signed-off-by: Tetsuo Handa penguin-kernel@I-love.SAKURA.ne.jp Acked-by: Michal Hocko mhocko@suse.com Cc: Russell King linux@arm.linux.org.uk # arm
Acked-by: Russell King rmk+kernel@arm.linux.org.uk
In so far as this ARM specific change looks reasonable. Thanks.
diff --git a/arch/arm/mm/dma-mapping.c b/arch/arm/mm/dma-mapping.c index e62400e..492bf3e 100644 --- a/arch/arm/mm/dma-mapping.c +++ b/arch/arm/mm/dma-mapping.c @@ -1200,10 +1200,7 @@ error: while (i--) if (pages[i]) __free_pages(pages[i], 0);
- if (array_size <= PAGE_SIZE)
kfree(pages);
- else
vfree(pages);
- kvfree(pages); return NULL;
}
@@ -1211,7 +1208,6 @@ static int __iommu_free_buffer(struct device *dev, struct page **pages, size_t size, struct dma_attrs *attrs) { int count = size >> PAGE_SHIFT;
int array_size = count * sizeof(struct page *); int i;
if (dma_get_attr(DMA_ATTR_FORCE_CONTIGUOUS, attrs)) {
@@ -1222,10 +1218,7 @@ static int __iommu_free_buffer(struct device *dev, struct page **pages, __free_pages(pages[i], 0); }
- if (array_size <= PAGE_SIZE)
kfree(pages);
- else
vfree(pages);
- kvfree(pages); return 0;
}