Re: [PATCH v2] page_ext: introduce boot parameter 'early_page_ext'
From: <hidden>
Date: 2022-08-25 06:21:48
Also in:
linux-mm, lkml
On 2022-08-24 8:09 UTC, mhocko@suse.com wrote:
On Wed 24-08-22 14:50:58, lizhe.67@bytedance.com wrote: [...]quoted
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) { } #endifWhy do you need to make it CONFIG_DEFERRED_STRUCT_PAGE_INIT dependant?
Yes it is unnecessary. Thanks!
[...]quoted
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
/* 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();
I think we can use an inline function instead of 'early_page_ext' here. The reason is that if CONFIG_PAGE_EXTENSION=n, 'early_page_ext' is undefined. Thought we can #define early_page_ext as false, it is ugly.
quoted
do_basic_setup();and without the ifdefery it all becomes much more simple.
Yes it becomes much more simple. Thanks for all your advices! I will take your advices and send a v3 patch.