From: "Pratyush Yadav (Google)" <[email protected]>

Similar to memblock_reserved_kern_size(), but calculates only the memory
reserved for hugetlb pages. This is needed in an upcoming commit that
subtracts hugetlb reservation size when computing the size of KHO
scratch areas.

Signed-off-by: Pratyush Yadav (Google) <[email protected]>
---
 include/linux/memblock.h |  1 +
 mm/memblock.c            | 22 ++++++++++++++++++++++
 2 files changed, 23 insertions(+)

diff --git a/include/linux/memblock.h b/include/linux/memblock.h
index 678fe466529a..d62db9e776cf 100644
--- a/include/linux/memblock.h
+++ b/include/linux/memblock.h
@@ -487,6 +487,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);
 phys_addr_t memblock_reserved_kern_size(phys_addr_t limit, int nid);
+phys_addr_t memblock_reserved_hugetlb_size(phys_addr_t limit, int nid);
 unsigned long memblock_estimated_nr_free_pages(void);
 phys_addr_t memblock_start_of_DRAM(void);
 phys_addr_t memblock_end_of_DRAM(void);
diff --git a/mm/memblock.c b/mm/memblock.c
index ba6d887ea18e..c10dfb054806 100644
--- a/mm/memblock.c
+++ b/mm/memblock.c
@@ -1893,6 +1893,28 @@ phys_addr_t __init_memblock memblock_reserved_size(void)
        return memblock.reserved.total_size;
 }
 
+phys_addr_t __init_memblock memblock_reserved_hugetlb_size(phys_addr_t limit, 
int nid)
+{
+       struct memblock_region *r;
+       phys_addr_t total = 0;
+
+       for_each_reserved_mem_region(r) {
+               phys_addr_t size = r->size;
+
+               if (r->base > limit)
+                       break;
+
+               if (r->base + r->size > limit)
+                       size = limit - r->base;
+
+               if (nid == memblock_get_region_node(r) || !numa_valid_node(nid))
+                       if (r->flags & MEMBLOCK_RSRV_HUGETLB)
+                               total += size;
+       }
+
+       return total;
+}
+
 phys_addr_t __init_memblock memblock_reserved_kern_size(phys_addr_t limit, int 
nid)
 {
        struct memblock_region *r;
-- 
2.55.0.141.g00534a21ce-goog


Reply via email to