Re: [PATCH v2] page_ext: introduce boot parameter 'early_page_ext'
From: Michal Hocko <mhocko@suse.com>
Date: 2022-08-24 08:09:59
Also in:
linux-mm, lkml
On Wed 24-08-22 14:50:58, lizhe.67@bytedance.com wrote: [...]
quoted hunk ↗ jump to hunk
diff --git a/include/linux/page_ext.h b/include/linux/page_ext.h index fabb2e1e087f..3e081cf8a1ec 100644 --- a/include/linux/page_ext.h +++ b/include/linux/page_ext.h@@ -38,19 +38,22 @@ struct page_ext { extern unsigned long page_ext_size; extern void pgdat_page_ext_init(struct pglist_data *pgdat); +#ifdef CONFIG_DEFERRED_STRUCT_PAGE_INIT +extern bool early_page_ext_enable(void); +#endif #ifdef CONFIG_SPARSEMEM static inline void page_ext_init_flatmem(void) { } -extern void page_ext_init(void); +extern void page_ext_init(bool early); static inline void page_ext_init_flatmem_late(void) { } #else extern void page_ext_init_flatmem(void); extern void page_ext_init_flatmem_late(void); -static inline void page_ext_init(void) +static inline void page_ext_init(bool early) { } #endif
Why do you need to make it CONFIG_DEFERRED_STRUCT_PAGE_INIT dependant? [...]
quoted hunk ↗ jump to hunk
diff --git a/init/main.c b/init/main.c index 91642a4e69be..3760c0326525 100644 --- a/init/main.c +++ b/init/main.c@@ -849,6 +849,8 @@ static void __init mm_init(void) pgtable_init(); debug_objects_mem_init(); vmalloc_init(); + /* Should be run after vmap initialization */ + page_ext_init(true);
you can just if (early_page_ext) page_ext_init();
quoted hunk ↗ jump to hunk
/* Should be run before the first non-init thread is created */ init_espfix_bsp(); /* Should be run after espfix64 is set up. */@@ -1606,7 +1608,7 @@ static noinline void __init kernel_init_freeable(void) padata_init(); page_alloc_init_late(); /* Initialize page ext after all struct pages are initialized. */ - page_ext_init(); + page_ext_init(false);
if (!early_page_ext) page_ext_init();
do_basic_setup();
and without the ifdefery it all becomes much more simple. -- Michal Hocko SUSE Labs