xip: fix get_zeroed_page with __GFP_HIGHMEM
The use of get_zeroed_page() with __GFP_HIGHMEM is invalid. Use alloc_page() with __GFP_ZERO instead of invalid get_zeroed_page(). (This patch is only compile tested) Cc: Carsten Otte <cotte@de.ibm.com> Signed-off-by: Akinobu Mita <akinobu.mita@gmail.com> Acked-by: Hugh Dickins <hugh@veritas.com> Acked-by: Carsten Otte <cotte@de.ibm.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
Родитель
0f94e87cde
Коммит
c51b1a160b
|
@ -25,14 +25,15 @@ static struct page *__xip_sparse_page;
|
||||||
static struct page *xip_sparse_page(void)
|
static struct page *xip_sparse_page(void)
|
||||||
{
|
{
|
||||||
if (!__xip_sparse_page) {
|
if (!__xip_sparse_page) {
|
||||||
unsigned long zeroes = get_zeroed_page(GFP_HIGHUSER);
|
struct page *page = alloc_page(GFP_HIGHUSER | __GFP_ZERO);
|
||||||
if (zeroes) {
|
|
||||||
|
if (page) {
|
||||||
static DEFINE_SPINLOCK(xip_alloc_lock);
|
static DEFINE_SPINLOCK(xip_alloc_lock);
|
||||||
spin_lock(&xip_alloc_lock);
|
spin_lock(&xip_alloc_lock);
|
||||||
if (!__xip_sparse_page)
|
if (!__xip_sparse_page)
|
||||||
__xip_sparse_page = virt_to_page(zeroes);
|
__xip_sparse_page = page;
|
||||||
else
|
else
|
||||||
free_page(zeroes);
|
__free_page(page);
|
||||||
spin_unlock(&xip_alloc_lock);
|
spin_unlock(&xip_alloc_lock);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Загрузка…
Ссылка в новой задаче