thp: compound_lock
Add a new compound_lock() needed to serialize put_page against __split_huge_page_refcount(). Signed-off-by: Andrea Arcangeli <aarcange@redhat.com> Acked-by: Rik van Riel <riel@redhat.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
committed by
Linus Torvalds
parent
a826e42242
commit
e9da73d677
@@ -107,6 +107,9 @@ enum pageflags {
|
||||
#endif
|
||||
#ifdef CONFIG_MEMORY_FAILURE
|
||||
PG_hwpoison, /* hardware poisoned page. Don't touch */
|
||||
#endif
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
PG_compound_lock,
|
||||
#endif
|
||||
__NR_PAGEFLAGS,
|
||||
|
||||
@@ -397,6 +400,12 @@ static inline void __ClearPageTail(struct page *page)
|
||||
#define __PG_MLOCKED 0
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_TRANSPARENT_HUGEPAGE
|
||||
#define __PG_COMPOUND_LOCK (1 << PG_compound_lock)
|
||||
#else
|
||||
#define __PG_COMPOUND_LOCK 0
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Flags checked when a page is freed. Pages being freed should not have
|
||||
* these flags set. It they are, there is a problem.
|
||||
@@ -406,7 +415,8 @@ static inline void __ClearPageTail(struct page *page)
|
||||
1 << PG_private | 1 << PG_private_2 | \
|
||||
1 << PG_buddy | 1 << PG_writeback | 1 << PG_reserved | \
|
||||
1 << PG_slab | 1 << PG_swapcache | 1 << PG_active | \
|
||||
1 << PG_unevictable | __PG_MLOCKED | __PG_HWPOISON)
|
||||
1 << PG_unevictable | __PG_MLOCKED | __PG_HWPOISON | \
|
||||
__PG_COMPOUND_LOCK)
|
||||
|
||||
/*
|
||||
* Flags checked when a page is prepped for return by the page allocator.
|
||||
|
||||
Reference in New Issue
Block a user