From ba40086e8d82fa699b3faa394d9372e74d54b343 Mon Sep 17 00:00:00 2001 From: Andrew Morton Date: Wed, 22 Mar 2006 00:08:42 -0800 Subject: [PATCH] --- yaml --- r: 22477 b: refs/heads/master c: 6626c5d53bc45c59798628677ba5606f02e371f3 h: refs/heads/master i: 22475: 29149471f2e6425e84223cf1ba542f0389f9021a v: v3 --- [refs] | 2 +- trunk/mm/page_alloc.c | 5 +++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/[refs] b/[refs] index 76d005124853..2ba6cc7ee09e 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 17cf44064ae744f081309108fa67f0e942b10167 +refs/heads/master: 6626c5d53bc45c59798628677ba5606f02e371f3 diff --git a/trunk/mm/page_alloc.c b/trunk/mm/page_alloc.c index bdff85899638..ed91684cb1f5 100644 --- a/trunk/mm/page_alloc.c +++ b/trunk/mm/page_alloc.c @@ -217,6 +217,11 @@ static inline void prep_zero_page(struct page *page, int order, gfp_t gfp_flags) int i; 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++) clear_highpage(page + i); }