mirror of
https://github.com/Fishwaldo/Star64_linux.git
synced 2025-06-22 22:51:37 +00:00
mm, debug_pagealloc: don't rely on static keys too early
Commit96a2b03f28
("mm, debug_pagelloc: use static keys to enable debugging") has introduced a static key to reduce overhead when debug_pagealloc is compiled in but not enabled. It relied on the assumption that jump_label_init() is called before parse_early_param() as in start_kernel(), so when the "debug_pagealloc=on" option is parsed, it is safe to enable the static key. However, it turns out multiple architectures call parse_early_param() earlier from their setup_arch(). x86 also calls jump_label_init() even earlier, so no issue was found while testing the commit, but same is not true for e.g. ppc64 and s390 where the kernel would not boot with debug_pagealloc=on as found by our QA. To fix this without tricky changes to init code of multiple architectures, this patch partially reverts the static key conversion from96a2b03f28
. Init-time and non-fastpath calls (such as in arch code) of debug_pagealloc_enabled() will again test a simple bool variable. Fastpath mm code is converted to a new debug_pagealloc_enabled_static() variant that relies on the static key, which is enabled in a well-defined point in mm_init() where it's guaranteed that jump_label_init() has been called, regardless of architecture. [sfr@canb.auug.org.au: export _debug_pagealloc_enabled_early] Link: http://lkml.kernel.org/r/20200106164944.063ac07b@canb.auug.org.au Link: http://lkml.kernel.org/r/20191219130612.23171-1-vbabka@suse.cz Fixes:96a2b03f28
("mm, debug_pagelloc: use static keys to enable debugging") Signed-off-by: Vlastimil Babka <vbabka@suse.cz> Signed-off-by: Stephen Rothwell <sfr@canb.auug.org.au> Cc: Joonsoo Kim <iamjoonsoo.kim@lge.com> Cc: "Kirill A. Shutemov" <kirill.shutemov@linux.intel.com> Cc: Michal Hocko <mhocko@kernel.org> Cc: Vlastimil Babka <vbabka@suse.cz> Cc: Matthew Wilcox <willy@infradead.org> Cc: Mel Gorman <mgorman@techsingularity.net> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Borislav Petkov <bp@alien8.de> Cc: Qian Cai <cai@lca.pw> Cc: <stable@vger.kernel.org> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
parent
4a87e2a25d
commit
8e57f8acbb
6 changed files with 34 additions and 32 deletions
|
@ -1383,7 +1383,7 @@ static void free_unmap_vmap_area(struct vmap_area *va)
|
|||
{
|
||||
flush_cache_vunmap(va->va_start, va->va_end);
|
||||
unmap_vmap_area(va);
|
||||
if (debug_pagealloc_enabled())
|
||||
if (debug_pagealloc_enabled_static())
|
||||
flush_tlb_kernel_range(va->va_start, va->va_end);
|
||||
|
||||
free_vmap_area_noflush(va);
|
||||
|
@ -1681,7 +1681,7 @@ static void vb_free(const void *addr, unsigned long size)
|
|||
|
||||
vunmap_page_range((unsigned long)addr, (unsigned long)addr + size);
|
||||
|
||||
if (debug_pagealloc_enabled())
|
||||
if (debug_pagealloc_enabled_static())
|
||||
flush_tlb_kernel_range((unsigned long)addr,
|
||||
(unsigned long)addr + size);
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue