[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <7d3725ec-1586-e697-1602-713bfd38daf9@suse.cz>
Date: Thu, 23 Mar 2023 08:09:01 +0100
From: Vlastimil Babka <vbabka@...e.cz>
To: Mike Rapoport <rppt@...nel.org>
Cc: Andrew Morton <akpm@...ux-foundation.org>,
David Hildenbrand <david@...hat.com>,
Doug Berger <opendmb@...il.com>,
Matthew Wilcox <willy@...radead.org>,
Mel Gorman <mgorman@...e.de>, Michal Hocko <mhocko@...nel.org>,
Thomas Bogendoerfer <tsbogend@...ha.franken.de>,
linux-kernel@...r.kernel.org, linux-mips@...r.kernel.org,
linux-mm@...ck.org
Subject: Re: [PATCH v2 06/14] init: fold build_all_zonelists() and
page_alloc_init_cpuhp() to mm_init()
On 3/22/23 21:26, Mike Rapoport wrote:
> On Wed, Mar 22, 2023 at 05:10:10PM +0100, Vlastimil Babka wrote:
>> On 3/21/23 18:05, Mike Rapoport wrote:
>> > From: "Mike Rapoport (IBM)" <rppt@...nel.org>
>> >
>> > Both build_all_zonelists() and page_alloc_init_cpuhp() must be called
>> > after SMP setup is complete but before the page allocator is set up.
>> >
>> > Still, they both are a part of memory management initialization, so move
>> > them to mm_init().
>>
>> Well, logic grouping is one thing, but not breaking a functional order is
>> more important. So this moves both calls to happen later than theyw ere. I
>> guess it could only matter for page_alloc_init_cpuhp() in case cpu hotplugs
>> would be processed in some of the calls we "skipped" over by moving this
>> later. And one of them is setup_arch()... so are we sure no arch does some
>> cpu hotplug for non-boot cpus there?
>
> mm_init() happens after the point build_all_zonelists() and
> page_alloc_init_cpuhp() were originally, so they are essentially moved
> later in the init sequence and in either case called after setup_arch().
Right, I looked at a wrong place in start_kernel() for the original location
of the calls, sorry for the noise.
> We skip the code below and it does not do neither cpu hotplug nor
> non-memblock allocations.
>
> jump_label_init();
> parse_early_param();
> after_dashes = parse_args("Booting kernel",
> static_command_line, __start___param,
> __stop___param - __start___param,
> -1, -1, NULL, &unknown_bootoption);
> print_unknown_bootoptions();
> if (!IS_ERR_OR_NULL(after_dashes))
> parse_args("Setting init args", after_dashes, NULL, 0, -1, -1,
> NULL, set_init_arg);
> if (extra_init_args)
> parse_args("Setting extra init args", extra_init_args,
> NULL, 0, -1, -1, NULL, set_init_arg);
>
> /* Architectural and non-timekeeping rng init, before allocator init */
> random_init_early(command_line);
>
> /*
> * These use large bootmem allocations and must precede
> * kmem_cache_init()
> */
> setup_log_buf(0);
> vfs_caches_init_early();
> sort_main_extable();
> trap_init();
>
Yeah, that looks safe.
>> > Signed-off-by: Mike Rapoport (IBM) <rppt@...nel.org>
>> > Acked-by: David Hildenbrand <david@...hat.com>
Reviewed-by: Vlastimil Babka <vbabka@...e.cz>
Powered by blists - more mailing lists