Messages in this thread Patch in this message | | | From | "Kirill A. Shutemov" <> | Subject | [PATCH] mm: avoid false-positive PageTail() during meminit | Date | Thu, 1 Oct 2015 11:58:00 +0300 |
| |
Since compound_head() rework we encode PageTail() into bit 0 of page->lru.next (aka page->compound_head). We need to make sure that page->lru is initialized before first use of compound_head() or PageTail().
My page-flags patchset makes sure that we don't use PG_reserved on compound pages. That means we have PageTail() check as eary as in SetPageReserved() in reserve_bootmem_region()
Let's initialize page->lru before that to avoid false positive from PageTail().
Signed-off-by: Kirill A. Shutemov <kirill.shutemov@linux.intel.com> ---
Andrew, this can be folded into "mm: make compound_head() robust"
--- mm/page_alloc.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-)
diff --git a/mm/page_alloc.c b/mm/page_alloc.c index 778eb3a0f103..95fbc43a93dd 100644 --- a/mm/page_alloc.c +++ b/mm/page_alloc.c @@ -926,8 +926,6 @@ static void init_reserved_page(unsigned long pfn) #else static inline void init_reserved_page(unsigned long pfn) { - /* Avoid false-positive PageTail() */ - INIT_LIST_HEAD(&pfn_to_page(pfn)->lru); } #endif /* CONFIG_DEFERRED_STRUCT_PAGE_INIT */ @@ -947,6 +945,10 @@ void __meminit reserve_bootmem_region(unsigned long start, unsigned long end) struct page *page = pfn_to_page(start_pfn); init_reserved_page(start_pfn); + + /* Avoid false-positive PageTail() */ + INIT_LIST_HEAD(&page->lru); + SetPageReserved(page); } } -- 2.5.1
| |