History

ARM: 8305/1: DMA: Fix kzalloc flags in __iommu_alloc_buffer()

There doesn't seem to be any valid reason to allocate the pages array with the same flags as the buffer itself. Doing so can eventually lead to the following safeguard in mm/slab.c's cache_grow() to be hit: if (unlikely(flags & GFP_SLAB_BUG_MASK)) { pr_emerg("gfp: %un", flags & GFP_SLAB_BUG_MASK); BUG(); } This happens when buffers are allocated with __GFP_DMA32 or __GFP_HIGHMEM. Fix this by allocating the pages array with GFP_KERNEL to follow what is done elsewhere in this file. Using GFP_KERNEL in __iommu_alloc_buffer() is safe because atomic allocations are handled by __iommu_alloc_atomic().

Alexandre Courbot committed 11 years ago

Commit 23be7fd1 parent 8e648061 file · +1 −1Browse files

Unified · Split

arch/arm/mm/dma-mapping.c+1−1
@@ -1106,7 +1106,7 @@ static struct page **__iommu_alloc_buffer(struct device *dev, size_t size, · 1105 unmodified lines
1106 int i = 0;1106 int i = 0;
1107 1107
1108 if (array_size <= PAGE_SIZE)1108 if (array_size <= PAGE_SIZE)
1109 pages = kzalloc(array_size, gfp);1109 pages = kzalloc(array_size, GFP_KERNEL);
1110 else1110 else
1111 pages = vzalloc(array_size);1111 pages = vzalloc(array_size);
1112 if (!pages)1112 if (!pages)

Keyboard shortcuts

General

Show keyboard shortcuts
?
Focus the current search
/

Issues and pull requests

Open filters
f

Issues, pull requests and Inbox

Select next item
j↓
Select previous item
k↑
Open selected item
Enter
Dismiss filters or clear selection
Esc

Repository code

Go to file
t