mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-12 05:06:39 +07:00
mm: add a might_sleep_if() to dma_pool_alloc()
Buggy drivers (e.g. fsl_udc) could call dma_pool_alloc from atomic context with GFP_KERNEL. In most instances, the first pool_alloc_page call would succeed and the sleeping functions would never be called. This allowed the buggy drivers to slip through the cracks. Add a might_sleep_if() checking for __GFP_WAIT in flags. Signed-off-by: Dima Zavin <dima@android.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
d65bfacb04
commit
ea05c8444e
@ -311,6 +311,8 @@ void *dma_pool_alloc(struct dma_pool *pool, gfp_t mem_flags,
|
|||||||
size_t offset;
|
size_t offset;
|
||||||
void *retval;
|
void *retval;
|
||||||
|
|
||||||
|
might_sleep_if(mem_flags & __GFP_WAIT);
|
||||||
|
|
||||||
spin_lock_irqsave(&pool->lock, flags);
|
spin_lock_irqsave(&pool->lock, flags);
|
||||||
restart:
|
restart:
|
||||||
list_for_each_entry(page, &pool->page_list, page_list) {
|
list_for_each_entry(page, &pool->page_list, page_list) {
|
||||||
|
Loading…
Reference in New Issue
Block a user