Groups | Search | Server Info | Keyboard shortcuts | Login | Register [http] [https] [nntp] [nntps]
Groups > linux.kernel > #1722947
| 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 |
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 | Next — Previous in thread | Next in thread | Find similar | Unroll 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