[PATCH] mm: prep_zero_page() in irq is a bug
prep_zero_page() uses KM_USER0 and hence may not be used from IRQ context, at least for highmem pages. Cc: Nick Piggin <nickpiggin@yahoo.com.au> Cc: Christoph Lameter <christoph@lameter.com> Signed-off-by: Andrew Morton <akpm@osdl.org> Signed-off-by: Linus Torvalds <torvalds@osdl.org>
This commit is contained in:
parent
17cf44064a
commit
6626c5d53b
1 changed files with 5 additions and 0 deletions
|
@ -217,6 +217,11 @@ static inline void prep_zero_page(struct page *page, int order, gfp_t gfp_flags)
|
||||||
int i;
|
int i;
|
||||||
|
|
||||||
BUG_ON((gfp_flags & (__GFP_WAIT | __GFP_HIGHMEM)) == __GFP_HIGHMEM);
|
BUG_ON((gfp_flags & (__GFP_WAIT | __GFP_HIGHMEM)) == __GFP_HIGHMEM);
|
||||||
|
/*
|
||||||
|
* clear_highpage() will use KM_USER0, so it's a bug to use __GFP_ZERO
|
||||||
|
* and __GFP_HIGHMEM from hard or soft interrupt context.
|
||||||
|
*/
|
||||||
|
BUG_ON((gfp_flags & __GFP_HIGHMEM) && in_interrupt());
|
||||||
for (i = 0; i < (1 << order); i++)
|
for (i = 0; i < (1 << order); i++)
|
||||||
clear_highpage(page + i);
|
clear_highpage(page + i);
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue