mirror of
https://github.com/torvalds/linux.git
synced 2026-07-27 09:36:22 +02:00
mm: introduce for_each_free_list()
Patch series "mm: misc cleanups from __GFP_UNMAPPED series". In v2 of the __GFP_UNMAPPED series [0], we realised that some of the patches could potentially be merged as independent cleanups. These are all independent of one another, if you think some are useful cleanups and others are pointless churn, it should be fine to just pick whatever subset you prefer. No functional change intended. This patch (of 4): There are a couple of places that iterate over the freelists with awareness of the data structures' layout. It seems ideally, code outside of mm should not be aware of the page allocator's freelists at all. But, this patch just doesn't hide them completely, it's just a meek incremental step in that direction: provide a macro to iterate over it without needing to be aware of the actual struct fields. Link: https://lore.kernel.org/20260513-page_alloc-unmapped-prep-v1-0-dacdf5402be8@google.com Link: https://lore.kernel.org/20260513-page_alloc-unmapped-prep-v1-1-dacdf5402be8@google.com Link: https://lore.kernel.org/all/20260320-page_alloc-unmapped-v2-0-28bf1bd54f41@google.com/ [0] Signed-off-by: Brendan Jackman <jackmanb@google.com> Acked-by: Mike Rapoport (Microsoft) <rppt@kernel.org> Reviewed-by: Vlastimil Babka (SUSE) <vbabka@kernel.org> Cc: Axel Rasmussen <axelrasmussen@google.com> Cc: Barry Song <baohua@kernel.org> Cc: David Hildenbrand <david@kernel.org> Cc: Johannes Weiner <hannes@cmpxchg.org> Cc: Kairui Song <kasong@tencent.com> Cc: Len Brown <lenb@kernel.org> Cc: Liam R. Howlett <liam@infradead.org> Cc: Lorenzo Stoakes <ljs@kernel.org> Cc: Michal Hocko <mhocko@suse.com> Cc: "Rafael J. Wysocki" <rafael@kernel.org> Cc: Shakeel Butt <shakeel.butt@linux.dev> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Wei Xu <weixugc@google.com> Cc: Yuanchu Xie <yuanchu@google.com> Cc: Zi Yan <ziy@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
This commit is contained in:
parent
88e09fffee
commit
9c860d1d5d
|
|
@ -177,9 +177,12 @@ static inline bool migratetype_is_mergeable(int mt)
|
|||
return mt < MIGRATE_PCPTYPES;
|
||||
}
|
||||
|
||||
#define for_each_migratetype_order(order, type) \
|
||||
for (order = 0; order < NR_PAGE_ORDERS; order++) \
|
||||
for (type = 0; type < MIGRATE_TYPES; type++)
|
||||
#define for_each_free_list(list, zone, order) \
|
||||
for (order = 0; order < NR_PAGE_ORDERS; order++) \
|
||||
for (unsigned int __type = 0; \
|
||||
__type < MIGRATE_TYPES && \
|
||||
(list = &(zone)->free_area[order].free_list[__type], 1); \
|
||||
__type++)
|
||||
|
||||
extern int page_group_by_mobility_disabled;
|
||||
|
||||
|
|
|
|||
|
|
@ -1244,8 +1244,9 @@ unsigned int snapshot_additional_pages(struct zone *zone)
|
|||
static void mark_free_pages(struct zone *zone)
|
||||
{
|
||||
unsigned long pfn, max_zone_pfn, page_count = WD_PAGE_COUNT;
|
||||
struct list_head *free_list;
|
||||
unsigned long flags;
|
||||
unsigned int order, t;
|
||||
unsigned int order;
|
||||
struct page *page;
|
||||
|
||||
if (zone_is_empty(zone))
|
||||
|
|
@ -1269,9 +1270,8 @@ static void mark_free_pages(struct zone *zone)
|
|||
swsusp_unset_page_free(page);
|
||||
}
|
||||
|
||||
for_each_migratetype_order(order, t) {
|
||||
list_for_each_entry(page,
|
||||
&zone->free_area[order].free_list[t], buddy_list) {
|
||||
for_each_free_list(free_list, zone, order) {
|
||||
list_for_each_entry(page, free_list, buddy_list) {
|
||||
unsigned long i;
|
||||
|
||||
pfn = page_to_pfn(page);
|
||||
|
|
|
|||
11
mm/mm_init.c
11
mm/mm_init.c
|
|
@ -1429,11 +1429,14 @@ static void __meminit zone_init_internals(struct zone *zone, enum zone_type idx,
|
|||
|
||||
static void __meminit zone_init_free_lists(struct zone *zone)
|
||||
{
|
||||
unsigned int order, t;
|
||||
for_each_migratetype_order(order, t) {
|
||||
INIT_LIST_HEAD(&zone->free_area[order].free_list[t]);
|
||||
struct list_head *list;
|
||||
unsigned int order;
|
||||
|
||||
for_each_free_list(list, zone, order)
|
||||
INIT_LIST_HEAD(list);
|
||||
|
||||
for (order = 0; order < NR_PAGE_ORDERS; order++)
|
||||
zone->free_area[order].nr_free = 0;
|
||||
}
|
||||
|
||||
#ifdef CONFIG_UNACCEPTED_MEMORY
|
||||
INIT_LIST_HEAD(&zone->unaccepted_pages);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user