Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]


Groups > linux.kernel > #1722947

Re: [PATCH v7 02/11] sparc64/mm: setting fields in deferred pages

From David Miller <davem@davemloft.net>
Newsgroups linux.kernel
Subject Re: [PATCH v7 02/11] sparc64/mm: setting fields in deferred pages
Date 2017-08-30 03:10 +0200
Message-ID <ujZG1-1EU-5@gated-at.bofh.it> (permalink)
References <ujE8x-4Za-3@gated-at.bofh.it> <ujE8y-4Za-15@gated-at.bofh.it>
Organization linux.* mail to news gateway

Show all headers | View raw


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>

Back to linux.kernel | Previous | NextPrevious in thread | Next in thread | Find similar | Unroll thread


Thread

[PATCH v7 00/11] complete deferred page initialization Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-29 04:10 +0200
  [PATCH v7 01/11] x86/mm: setting fields in deferred pages Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-29 04:10 +0200
  [PATCH v7 05/11] mm: defining memblock_virt_alloc_try_nid_raw Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-29 04:10 +0200
  [PATCH v7 03/11] mm: deferred_init_memmap improvements Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-29 04:10 +0200
  [PATCH v7 07/11] sparc64: optimized struct page zeroing Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-29 04:10 +0200
    Re: [PATCH v7 07/11] sparc64: optimized struct page zeroing David Miller <davem@davemloft.net> - 2017-08-30 03:20 +0200
      Re: [PATCH v7 07/11] sparc64: optimized struct page zeroing Pasha Tatashin <pasha.tatashin@oracle.com> - 2017-08-30 15:30 +0200
        Re: [PATCH v7 07/11] sparc64: optimized struct page zeroing David Miller <davem@davemloft.net> - 2017-08-30 19:50 +0200
  [PATCH v7 02/11] sparc64/mm: setting fields in deferred pages Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-29 04:10 +0200
    Re: [PATCH v7 02/11] sparc64/mm: setting fields in deferred pages David Miller <davem@davemloft.net> - 2017-08-30 03:10 +0200
  [PATCH v7 11/11] mm: stop zeroing memory during allocation in vmemmap Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-29 04:10 +0200
  [PATCH v7 04/11] sparc64: simplify vmemmap_populate Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-29 04:10 +0200
    Re: [PATCH v7 04/11] sparc64: simplify vmemmap_populate David Miller <davem@davemloft.net> - 2017-08-30 03:10 +0200
  [PATCH v7 08/11] mm: zero reserved and unavailable struct pages Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-29 04:10 +0200
  [PATCH v7 09/11] x86/kasan: explicitly zero kasan shadow memory Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-29 04:10 +0200
  [PATCH v7 06/11] mm: zero struct pages during initialization Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-29 04:10 +0200
  [PATCH v7 10/11] arm64/kasan: explicitly zero kasan shadow memory Pavel Tatashin <pasha.tatashin@oracle.com> - 2017-08-29 04:10 +0200

csiph-web