linux-mm.kvack.org archive mirror
 help / color / mirror / Atom feed
* [PATCH v4 1/3] mm/memblock: introduce a new helper memblock_estimated_nr_free_pages()
@ 2024-07-08  1:00 Wei Yang
  2024-07-08  1:00 ` [PATCH v4 2/3] kernel/fork.c: get totalram_pages from memblock to calculate max_threads Wei Yang
                   ` (2 more replies)
  0 siblings, 3 replies; 6+ messages in thread
From: Wei Yang @ 2024-07-08  1:00 UTC (permalink / raw)
  To: rppt, akpm, brauner, oleg, mjguzik, tandersen
  Cc: linux-mm, linux-kernel, Wei Yang, David Hildenbrand

During bootup, system may need the number of free pages in the whole system
to do some calculation before all pages are freed to buddy system. Usually
this number is get from totalram_pages(). Since we plan to move the free
pages accounting in __free_pages_core(), this value may not represent
total free pages at the early stage, especially when
CONFIG_DEFERRED_STRUCT_PAGE_INIT is enabled.

Instead of using raw memblock api, let's introduce a new helper for user
to get the estimated number of free pages from memblock point of view.

Signed-off-by: Wei Yang <richard.weiyang@gmail.com>
CC: David Hildenbrand <david@redhat.com>
Reviewed-by: David Hildenbrand <david@redhat.com>

---
v4: adjust comment per david's suggestion
---
 include/linux/memblock.h |  1 +
 mm/memblock.c            | 20 ++++++++++++++++++++
 2 files changed, 21 insertions(+)

diff --git a/include/linux/memblock.h b/include/linux/memblock.h
index 40c62aca36ec..7d1c32b3dc12 100644
--- a/include/linux/memblock.h
+++ b/include/linux/memblock.h
@@ -486,6 +486,7 @@ static inline __init_memblock bool memblock_bottom_up(void)
 
 phys_addr_t memblock_phys_mem_size(void);
 phys_addr_t memblock_reserved_size(void);
+unsigned long memblock_estimated_nr_pages(void);
 phys_addr_t memblock_start_of_DRAM(void);
 phys_addr_t memblock_end_of_DRAM(void);
 void memblock_enforce_memory_limit(phys_addr_t memory_limit);
diff --git a/mm/memblock.c b/mm/memblock.c
index e81fb68f7f88..26162902789f 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -1729,6 +1729,26 @@ phys_addr_t __init_memblock memblock_reserved_size(void)
 	return memblock.reserved.total_size;
 }
 
+/**
+ * memblock_estimated_nr_free_pages - return estimated number of free pages
+ * from memblock point of view
+ *
+ * During bootup, subsystems might need a rough estimate of the number of free
+ * pages in the whole system, before precise numbers are available from the
+ * buddy. Especially with CONFIG_DEFERRED_STRUCT_PAGE_INIT, the numbers
+ * obtained from the buddy might be very imprecise during bootup.
+ *
+ * While we can get the estimated number of free pages from memblock, which is
+ * good enough for estimation.
+ *
+ * Return:
+ * An estimated number of free pages from memblock point of view.
+ */
+unsigned long __init memblock_estimated_nr_free_pages(void)
+{
+	return PHYS_PFN(memblock_phys_mem_size() - memblock_reserved_size());
+}
+
 /* lowest address */
 phys_addr_t __init_memblock memblock_start_of_DRAM(void)
 {
-- 
2.34.1



^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2024-07-09  1:03 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2024-07-08  1:00 [PATCH v4 1/3] mm/memblock: introduce a new helper memblock_estimated_nr_free_pages() Wei Yang
2024-07-08  1:00 ` [PATCH v4 2/3] kernel/fork.c: get totalram_pages from memblock to calculate max_threads Wei Yang
2024-07-08  7:56   ` David Hildenbrand
2024-07-08  1:00 ` [PATCH v4 3/3] kernel/fork.c: put set_max_threads()/task_struct_whitelist() in __init section Wei Yang
2024-07-08  7:56 ` [PATCH v4 1/3] mm/memblock: introduce a new helper memblock_estimated_nr_free_pages() David Hildenbrand
2024-07-09  0:56   ` Wei Yang

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox