* [PATCH] memblock: use for_each_zone() in reset_all_zones_managed_pages() @ 2026-09-08 16:57 Sang-Heon Jeon 2026-09-10 9:58 ` Mike Rapoport 0 siblings, 1 reply; 7+ messages in thread From: Sang-Heon Jeon @ 2026-09-08 16:57 UTC (permalink / raw) To: Andrew Morton, Mike Rapoport; +Cc: linux-mm reset_all_zones_managed_pages() iterates over the zones of every online node with a nested loop. for_each_zone() iterates over the same zones in the same order. So use for_each_zone() instead and remove reset_node_managed_pages(). No functional change. Signed-off-by: Sang-Heon Jeon <ekffu200098@gmail.com> --- mm/memblock.c | 12 ++---------- 1 file changed, 2 insertions(+), 10 deletions(-) diff --git a/mm/memblock.c b/mm/memblock.c index 4302fb4ab85c..ed6937be8d9f 100644 --- a/mm/memblock.c +++ b/mm/memblock.c @@ -2465,22 +2465,14 @@ static unsigned long __init free_low_memory_core_early(void) return count; } -static void __init reset_node_managed_pages(pg_data_t *pgdat) +static void __init reset_all_zones_managed_pages(void) { struct zone *z; - for (z = pgdat->node_zones; z < pgdat->node_zones + MAX_NR_ZONES; z++) + for_each_zone(z) atomic_long_set(&z->managed_pages, 0); } -static void __init reset_all_zones_managed_pages(void) -{ - struct pglist_data *pgdat; - - for_each_online_pgdat(pgdat) - reset_node_managed_pages(pgdat); -} - /** * memblock_free_all - release free pages to the buddy allocator */ base-commit: dbffc67777cd752ef3f77818109e1d2ef13e2949 -- 2.43.0 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] memblock: use for_each_zone() in reset_all_zones_managed_pages() 2026-09-08 16:57 [PATCH] memblock: use for_each_zone() in reset_all_zones_managed_pages() Sang-Heon Jeon @ 2026-09-10 9:58 ` Mike Rapoport 2026-09-10 10:13 ` Mike Rapoport 0 siblings, 1 reply; 7+ messages in thread From: Mike Rapoport @ 2026-09-10 9:58 UTC (permalink / raw) To: Andrew Morton, Sang-Heon Jeon; +Cc: linux-mm On Wed, 09 Sep 2026 01:57:32 +0900, Sang-Heon Jeon wrote: > memblock: use for_each_zone() in reset_all_zones_managed_pages() Applied to for-next branch of memblock.git tree, thanks! [1/1] memblock: use for_each_zone() in reset_all_zones_managed_pages() commit: 0876b2d8794913c867a1bb0dc3fd22ea1c5f0a95 tree: https://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock branch: for-next -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] memblock: use for_each_zone() in reset_all_zones_managed_pages() 2026-09-10 9:58 ` Mike Rapoport @ 2026-09-10 10:13 ` Mike Rapoport 2026-09-10 12:19 ` Sang-Heon Jeon 0 siblings, 1 reply; 7+ messages in thread From: Mike Rapoport @ 2026-09-10 10:13 UTC (permalink / raw) To: Mike Rapoport; +Cc: Andrew Morton, Sang-Heon Jeon, linux-mm On 2026-09-10 12:58 +0300, Mike Rapoport wrote: > On Wed, 09 Sep 2026 01:57:32 +0900, Sang-Heon Jeon wrote: > > memblock: use for_each_zone() in reset_all_zones_managed_pages() > > Applied to for-next branch of memblock.git tree, thanks! > > [1/1] memblock: use for_each_zone() in reset_all_zones_managed_pages() > commit: 0876b2d8794913c867a1bb0dc3fd22ea1c5f0a95 > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock > branch: for-next Hmm, I was too hasty. This breaks mmemblock tests, so I dropped it for now. > -- > Sincerely yours, > Mike. > > > > > ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] memblock: use for_each_zone() in reset_all_zones_managed_pages() 2026-09-10 10:13 ` Mike Rapoport @ 2026-09-10 12:19 ` Sang-Heon Jeon 2026-09-10 14:35 ` Sang-Heon Jeon 0 siblings, 1 reply; 7+ messages in thread From: Sang-Heon Jeon @ 2026-09-10 12:19 UTC (permalink / raw) To: Mike Rapoport; +Cc: Andrew Morton, linux-mm On Thu, Sep 10, 2026 at 7:13 PM Mike Rapoport <rppt@kernel.org> wrote: > > On 2026-09-10 12:58 +0300, Mike Rapoport wrote: > > On Wed, 09 Sep 2026 01:57:32 +0900, Sang-Heon Jeon wrote: > > > memblock: use for_each_zone() in reset_all_zones_managed_pages() > > > > Applied to for-next branch of memblock.git tree, thanks! > > > > [1/1] memblock: use for_each_zone() in reset_all_zones_managed_pages() > > commit: 0876b2d8794913c867a1bb0dc3fd22ea1c5f0a95 > > > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock > > branch: for-next > > Hmm, I was too hasty. > This breaks mmemblock tests, so I dropped it for now. Sorry for the noise. I missed it. I will keep it in mind next time. Just give me a second to check. > > -- > > Sincerely yours, > > Mike. > > > > > > > > > > > > Best regards Sang-Heon Jeon ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] memblock: use for_each_zone() in reset_all_zones_managed_pages() 2026-09-10 12:19 ` Sang-Heon Jeon @ 2026-09-10 14:35 ` Sang-Heon Jeon 2026-09-14 8:20 ` Mike Rapoport 0 siblings, 1 reply; 7+ messages in thread From: Sang-Heon Jeon @ 2026-09-10 14:35 UTC (permalink / raw) To: Mike Rapoport; +Cc: Andrew Morton, linux-mm On Thu, Sep 10, 2026 at 9:19 PM Sang-Heon Jeon <ekffu200098@gmail.com> wrote: > > On Thu, Sep 10, 2026 at 7:13 PM Mike Rapoport <rppt@kernel.org> wrote: > > > > On 2026-09-10 12:58 +0300, Mike Rapoport wrote: > > > On Wed, 09 Sep 2026 01:57:32 +0900, Sang-Heon Jeon wrote: > > > > memblock: use for_each_zone() in reset_all_zones_managed_pages() > > > > > > Applied to for-next branch of memblock.git tree, thanks! > > > > > > [1/1] memblock: use for_each_zone() in reset_all_zones_managed_pages() > > > commit: 0876b2d8794913c867a1bb0dc3fd22ea1c5f0a95 > > > > > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock > > > branch: for-next > > > > Hmm, I was too hasty. > > This breaks mmemblock tests, so I dropped it for now. > > Sorry for the noise. I missed it. I will keep it in mind next time. > Just give me a second to check. With the below fixes, tests will be fine again. Is it okay to send the v2 patchset with below fixes? diff --git a/tools/testing/memblock/linux/mmzone.h b/tools/testing/memblock/linux/mmzone.h index 8d934ff5b080..631fe07923e7 100644 --- a/tools/testing/memblock/linux/mmzone.h +++ b/tools/testing/memblock/linux/mmzone.h @@ -7,13 +7,20 @@ struct pglist_data *first_online_pgdat(void); struct pglist_data *next_online_pgdat(struct pglist_data *pgdat); +struct zone *next_zone(struct zone *zone); #define for_each_online_pgdat(pgdat) \ for (pgdat = first_online_pgdat(); \ pgdat; \ pgdat = next_online_pgdat(pgdat)) +#define for_each_zone(zone) \ + for (zone = (first_online_pgdat())->node_zones; \ + zone; \ + zone = next_zone(zone)) + enum zone_type { + ZONE_NORMAL, __MAX_NR_ZONES }; @@ -27,6 +34,7 @@ enum zone_type { #define pageblock_start_pfn(pfn) ALIGN_DOWN((pfn), pageblock_nr_pages) struct zone { + struct pglist_data *zone_pgdat; atomic_long_t managed_pages; }; diff --git a/tools/testing/memblock/mmzone.c b/tools/testing/memblock/mmzone.c index e719450f81cb..e73848bdc8d6 100644 --- a/tools/testing/memblock/mmzone.c +++ b/tools/testing/memblock/mmzone.c @@ -1,9 +1,15 @@ // SPDX-License-Identifier: GPL-2.0-or-later #include <linux/mmzone.h> +static pg_data_t dummy_pgdat = { + .node_zones = { + [0 ... MAX_NR_ZONES - 1] = { .zone_pgdat = &dummy_pgdat }, + }, +}; + struct pglist_data *first_online_pgdat(void) { - return NULL; + return &dummy_pgdat; } struct pglist_data *next_online_pgdat(struct pglist_data *pgdat) @@ -11,6 +17,22 @@ struct pglist_data *next_online_pgdat(struct pglist_data *pgdat) return NULL; } +struct zone *next_zone(struct zone *zone) +{ + pg_data_t *pgdat = zone->zone_pgdat; + + if (zone < pgdat->node_zones + MAX_NR_ZONES - 1) + zone++; + else { + pgdat = next_online_pgdat(pgdat); + if (pgdat) + zone = pgdat->node_zones; + else + zone = NULL; + } + return zone; +} + void atomic_long_set(atomic_long_t *v, long i) { } > > > -- > > > Sincerely yours, > > > Mike. > > > > > > > > > > > > > > > > > > > > > Best regards > Sang-Heon Jeon Best regards, Sang-Heon Jeon ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH] memblock: use for_each_zone() in reset_all_zones_managed_pages() 2026-09-10 14:35 ` Sang-Heon Jeon @ 2026-09-14 8:20 ` Mike Rapoport 2026-09-15 7:46 ` Sang-Heon Jeon 0 siblings, 1 reply; 7+ messages in thread From: Mike Rapoport @ 2026-09-14 8:20 UTC (permalink / raw) To: Sang-Heon Jeon; +Cc: Andrew Morton, linux-mm On Thu, Sep 10, 2026 at 11:35:41PM +0900, Sang-Heon Jeon wrote: > On Thu, Sep 10, 2026 at 9:19 PM Sang-Heon Jeon <ekffu200098@gmail.com> wrote: > > > > On Thu, Sep 10, 2026 at 7:13 PM Mike Rapoport <rppt@kernel.org> wrote: > > > > > > On 2026-09-10 12:58 +0300, Mike Rapoport wrote: > > > > On Wed, 09 Sep 2026 01:57:32 +0900, Sang-Heon Jeon wrote: > > > > > memblock: use for_each_zone() in reset_all_zones_managed_pages() > > > > > > > > Applied to for-next branch of memblock.git tree, thanks! > > > > > > > > [1/1] memblock: use for_each_zone() in reset_all_zones_managed_pages() > > > > commit: 0876b2d8794913c867a1bb0dc3fd22ea1c5f0a95 > > > > > > > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock > > > > branch: for-next > > > > > > Hmm, I was too hasty. > > > This breaks mmemblock tests, so I dropped it for now. > > > > Sorry for the noise. I missed it. I will keep it in mind next time. > > Just give me a second to check. > > With the below fixes, tests will be fine again. Is it okay to send the > v2 patchset with below fixes? memblock tests do not cover late parts of mm initialization, I believe it would be fine to just define for_each_zone() to a nop. > diff --git a/tools/testing/memblock/linux/mmzone.h > b/tools/testing/memblock/linux/mmzone.h > index 8d934ff5b080..631fe07923e7 100644 > --- a/tools/testing/memblock/linux/mmzone.h > +++ b/tools/testing/memblock/linux/mmzone.h > @@ -7,13 +7,20 @@ > > struct pglist_data *first_online_pgdat(void); > struct pglist_data *next_online_pgdat(struct pglist_data *pgdat); > +struct zone *next_zone(struct zone *zone); > > #define for_each_online_pgdat(pgdat) \ > for (pgdat = first_online_pgdat(); \ > pgdat; \ > pgdat = next_online_pgdat(pgdat)) > > +#define for_each_zone(zone) \ > + for (zone = (first_online_pgdat())->node_zones; \ > + zone; \ > + zone = next_zone(zone)) > + > enum zone_type { > + ZONE_NORMAL, > __MAX_NR_ZONES > }; > > @@ -27,6 +34,7 @@ enum zone_type { > #define pageblock_start_pfn(pfn) ALIGN_DOWN((pfn), pageblock_nr_pages) > > struct zone { > + struct pglist_data *zone_pgdat; > atomic_long_t managed_pages; > }; > > diff --git a/tools/testing/memblock/mmzone.c b/tools/testing/memblock/mmzone.c > index e719450f81cb..e73848bdc8d6 100644 > --- a/tools/testing/memblock/mmzone.c > +++ b/tools/testing/memblock/mmzone.c > @@ -1,9 +1,15 @@ > // SPDX-License-Identifier: GPL-2.0-or-later > #include <linux/mmzone.h> > > +static pg_data_t dummy_pgdat = { > + .node_zones = { > + [0 ... MAX_NR_ZONES - 1] = { .zone_pgdat = &dummy_pgdat }, > + }, > +}; > + > struct pglist_data *first_online_pgdat(void) > { > - return NULL; > + return &dummy_pgdat; > } > > struct pglist_data *next_online_pgdat(struct pglist_data *pgdat) > @@ -11,6 +17,22 @@ struct pglist_data *next_online_pgdat(struct > pglist_data *pgdat) > return NULL; > } > > +struct zone *next_zone(struct zone *zone) > +{ > + pg_data_t *pgdat = zone->zone_pgdat; > + > + if (zone < pgdat->node_zones + MAX_NR_ZONES - 1) > + zone++; > + else { > + pgdat = next_online_pgdat(pgdat); > + if (pgdat) > + zone = pgdat->node_zones; > + else > + zone = NULL; > + } > + return zone; > +} > + > void atomic_long_set(atomic_long_t *v, long i) > { > } > > > > > -- > > > > Sincerely yours, > > > > Mike. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Best regards > > Sang-Heon Jeon > > Best regards, > Sang-Heon Jeon -- Sincerely yours, Mike. ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH] memblock: use for_each_zone() in reset_all_zones_managed_pages() 2026-09-14 8:20 ` Mike Rapoport @ 2026-09-15 7:46 ` Sang-Heon Jeon 0 siblings, 0 replies; 7+ messages in thread From: Sang-Heon Jeon @ 2026-09-15 7:46 UTC (permalink / raw) To: Mike Rapoport; +Cc: Andrew Morton, linux-mm On Mon, Sep 14, 2026 at 5:20 PM Mike Rapoport <rppt@kernel.org> wrote: > > On Thu, Sep 10, 2026 at 11:35:41PM +0900, Sang-Heon Jeon wrote: > > On Thu, Sep 10, 2026 at 9:19 PM Sang-Heon Jeon <ekffu200098@gmail.com> wrote: > > > > > > On Thu, Sep 10, 2026 at 7:13 PM Mike Rapoport <rppt@kernel.org> wrote: > > > > > > > > On 2026-09-10 12:58 +0300, Mike Rapoport wrote: > > > > > On Wed, 09 Sep 2026 01:57:32 +0900, Sang-Heon Jeon wrote: > > > > > > memblock: use for_each_zone() in reset_all_zones_managed_pages() > > > > > > > > > > Applied to for-next branch of memblock.git tree, thanks! > > > > > > > > > > [1/1] memblock: use for_each_zone() in reset_all_zones_managed_pages() > > > > > commit: 0876b2d8794913c867a1bb0dc3fd22ea1c5f0a95 > > > > > > > > > > tree: https://git.kernel.org/pub/scm/linux/kernel/git/rppt/memblock > > > > > branch: for-next > > > > > > > > Hmm, I was too hasty. > > > > This breaks mmemblock tests, so I dropped it for now. > > > > > > Sorry for the noise. I missed it. I will keep it in mind next time. > > > Just give me a second to check. > > > > With the below fixes, tests will be fine again. Is it okay to send the > > v2 patchset with below fixes? > > memblock tests do not cover late parts of mm initialization, I believe it > would be fine to just define for_each_zone() to a nop. Thanks for the review, Mike. I'll send a v2 soon. > > diff --git a/tools/testing/memblock/linux/mmzone.h > > b/tools/testing/memblock/linux/mmzone.h > > index 8d934ff5b080..631fe07923e7 100644 > > --- a/tools/testing/memblock/linux/mmzone.h > > +++ b/tools/testing/memblock/linux/mmzone.h > > @@ -7,13 +7,20 @@ > > > > struct pglist_data *first_online_pgdat(void); > > struct pglist_data *next_online_pgdat(struct pglist_data *pgdat); > > +struct zone *next_zone(struct zone *zone); > > > > #define for_each_online_pgdat(pgdat) \ > > for (pgdat = first_online_pgdat(); \ > > pgdat; \ > > pgdat = next_online_pgdat(pgdat)) > > > > +#define for_each_zone(zone) \ > > + for (zone = (first_online_pgdat())->node_zones; \ > > + zone; \ > > + zone = next_zone(zone)) > > + > > enum zone_type { > > + ZONE_NORMAL, > > __MAX_NR_ZONES > > }; > > > > @@ -27,6 +34,7 @@ enum zone_type { > > #define pageblock_start_pfn(pfn) ALIGN_DOWN((pfn), pageblock_nr_pages) > > > > struct zone { > > + struct pglist_data *zone_pgdat; > > atomic_long_t managed_pages; > > }; > > > > diff --git a/tools/testing/memblock/mmzone.c b/tools/testing/memblock/mmzone.c > > index e719450f81cb..e73848bdc8d6 100644 > > --- a/tools/testing/memblock/mmzone.c > > +++ b/tools/testing/memblock/mmzone.c > > @@ -1,9 +1,15 @@ > > // SPDX-License-Identifier: GPL-2.0-or-later > > #include <linux/mmzone.h> > > > > +static pg_data_t dummy_pgdat = { > > + .node_zones = { > > + [0 ... MAX_NR_ZONES - 1] = { .zone_pgdat = &dummy_pgdat }, > > + }, > > +}; > > + > > struct pglist_data *first_online_pgdat(void) > > { > > - return NULL; > > + return &dummy_pgdat; > > } > > > > struct pglist_data *next_online_pgdat(struct pglist_data *pgdat) > > @@ -11,6 +17,22 @@ struct pglist_data *next_online_pgdat(struct > > pglist_data *pgdat) > > return NULL; > > } > > > > +struct zone *next_zone(struct zone *zone) > > +{ > > + pg_data_t *pgdat = zone->zone_pgdat; > > + > > + if (zone < pgdat->node_zones + MAX_NR_ZONES - 1) > > + zone++; > > + else { > > + pgdat = next_online_pgdat(pgdat); > > + if (pgdat) > > + zone = pgdat->node_zones; > > + else > > + zone = NULL; > > + } > > + return zone; > > +} > > + > > void atomic_long_set(atomic_long_t *v, long i) > > { > > } > > > > > > > -- > > > > > Sincerely yours, > > > > > Mike. > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > > Best regards > > > Sang-Heon Jeon > > > > Best regards, > > Sang-Heon Jeon > > -- > Sincerely yours, > Mike. Best regards, Sang-Heon Jeon ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-09-15 7:46 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-09-08 16:57 [PATCH] memblock: use for_each_zone() in reset_all_zones_managed_pages() Sang-Heon Jeon 2026-09-10 9:58 ` Mike Rapoport 2026-09-10 10:13 ` Mike Rapoport 2026-09-10 12:19 ` Sang-Heon Jeon 2026-09-10 14:35 ` Sang-Heon Jeon 2026-09-14 8:20 ` Mike Rapoport 2026-09-15 7:46 ` Sang-Heon Jeon
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.