lkml.org 
[lkml]   [2017]   [Aug]   [29]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    /
    Date
    SubjectRe: [PATCH v7 02/11] sparc64/mm: setting fields in deferred pages
    From
    From: Pavel Tatashin <pasha.tatashin@oracle.com>
    Date: Mon, 28 Aug 2017 22:02:13 -0400

    > Without deferred struct page feature (CONFIG_DEFERRED_STRUCT_PAGE_INIT),
    > flags and other fields in "struct page"es are never changed prior to first
    > initializing struct pages by going through __init_single_page().
    >
    > With deferred struct page feature enabled there is a case where we set some
    > fields prior to initializing:
    >
    > mem_init() {
    > register_page_bootmem_info();
    > free_all_bootmem();
    > ...
    > }
    >
    > When register_page_bootmem_info() is called only non-deferred struct pages
    > are initialized. But, this function goes through some reserved pages which
    > might be part of the deferred, and thus are not yet initialized.
    >
    > mem_init
    > register_page_bootmem_info
    > register_page_bootmem_info_node
    > get_page_bootmem
    > .. setting fields here ..
    > such as: page->freelist = (void *)type;
    >
    > free_all_bootmem()
    > free_low_memory_core_early()
    > for_each_reserved_mem_region()
    > reserve_bootmem_region()
    > init_reserved_page() <- Only if this is deferred reserved page
    > __init_single_pfn()
    > __init_single_page()
    > memset(0) <-- Loose the set fields here
    >
    > We end-up with similar issue as in the previous patch, where currently we
    > do not observe problem as memory is zeroed. But, if flag asserts are
    > changed we can start hitting issues.
    >
    > Also, because in this patch series we will stop zeroing struct page memory
    > during allocation, we must make sure that struct pages are properly
    > initialized prior to using them.
    >
    > The deferred-reserved pages are initialized in free_all_bootmem().
    > Therefore, the fix is to switch the above calls.
    >
    > Signed-off-by: Pavel Tatashin <pasha.tatashin@oracle.com>
    > Reviewed-by: Steven Sistare <steven.sistare@oracle.com>
    > Reviewed-by: Daniel Jordan <daniel.m.jordan@oracle.com>
    > Reviewed-by: Bob Picco <bob.picco@oracle.com>

    Acked-by: David S. Miller <davem@davemloft.net>

    \
     
     \ /
      Last update: 2017-08-30 03:10    [W:4.699 / U:0.316 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site