[PATCH] [3/18] Convert /proc output code over to report multiple hstates

Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]
From: Andi Kleen
Date: Sunday, March 16, 2008 - 6:58 pm

I chose to just report the numbers in a row, in the hope 
to minimze breakage of existing software. The "compat" page size
is always the first number.

Signed-off-by: Andi Kleen <ak@suse.de>

---
 mm/hugetlb.c |   59 +++++++++++++++++++++++++++++++++++++++--------------------
 1 file changed, 39 insertions(+), 20 deletions(-)

Index: linux/mm/hugetlb.c
===================================================================
--- linux.orig/mm/hugetlb.c
+++ linux/mm/hugetlb.c
@@ -683,37 +683,56 @@ int hugetlb_overcommit_handler(struct ct
 
 #endif /* CONFIG_SYSCTL */
 
+static int dump_field(char *buf, unsigned field)
+{
+	int n = 0;
+	struct hstate *h;
+	for_each_hstate (h)
+		n += sprintf(buf + n, " %5lu", *(unsigned long *)((char *)h + field));
+	buf[n++] = '\n';
+	return n;
+}
+
 int hugetlb_report_meminfo(char *buf)
 {
-	struct hstate *h = &global_hstate;
-	return sprintf(buf,
-			"HugePages_Total: %5lu\n"
-			"HugePages_Free:  %5lu\n"
-			"HugePages_Rsvd:  %5lu\n"
-			"HugePages_Surp:  %5lu\n"
-			"Hugepagesize:    %5lu kB\n",
-			h->nr_huge_pages,
-			h->free_huge_pages,
-			h->resv_huge_pages,
-			h->surplus_huge_pages,
-			1UL << (huge_page_order(h) + PAGE_SHIFT - 10));
+	struct hstate *h;
+	int n = 0;
+	n += sprintf(buf + 0, "HugePages_Total:");
+	n += dump_field(buf + n, offsetof(struct hstate, nr_huge_pages));
+	n += sprintf(buf + n, "HugePages_Free: ");
+	n += dump_field(buf + n, offsetof(struct hstate, free_huge_pages));
+	n += sprintf(buf + n, "HugePages_Rsvd: ");
+	n += dump_field(buf + n, offsetof(struct hstate, resv_huge_pages));
+	n += sprintf(buf + n, "HugePages_Surp: ");
+	n += dump_field(buf + n, offsetof(struct hstate, surplus_huge_pages));
+	n += sprintf(buf + n, "Hugepagesize:   ");
+	for_each_hstate (h)
+		n += sprintf(buf + n, " %5u", huge_page_size(h) / 1024);
+	n += sprintf(buf + n, " kB\n");
+	return n;
 }
 
 int hugetlb_report_node_meminfo(int nid, char *buf)
 {
-	struct hstate *h = &global_hstate;
-	return sprintf(buf,
-		"Node %d HugePages_Total: %5u\n"
-		"Node %d HugePages_Free:  %5u\n",
-		nid, h->nr_huge_pages_node[nid],
-		nid, h->free_huge_pages_node[nid]);
+	int n = 0;
+	n += sprintf(buf, "Node %d HugePages_Total:", nid);
+	n += dump_field(buf + n, offsetof(struct hstate,
+						nr_huge_pages_node[nid]));
+	n += sprintf(buf + n , "Node %d HugePages_Free: ", nid);
+	n += dump_field(buf + n, offsetof(struct hstate,
+						 free_huge_pages_node[nid]));
+	return n;
 }
 
 /* Return the number pages of memory we physically have, in PAGE_SIZE units. */
 unsigned long hugetlb_total_pages(void)
 {
-	struct hstate *h = &global_hstate;
-	return h->nr_huge_pages * (1 << huge_page_order(h));
+	long x = 0;
+	struct hstate *h;
+	for_each_hstate (h) {
+		x += h->nr_huge_pages * (1 << huge_page_order(h));
+	}
+	return x;
 }
 
 /*
--
Previous message: [thread] [date] [author]
Next message: [thread] [date] [author]

Messages in current thread:
[PATCH] [0/18] GB pages hugetlb support, Andi Kleen, (Sun Mar 16, 6:58 pm)
[PATCH] [3/18] Convert /proc output code over to report mu ..., Andi Kleen, (Sun Mar 16, 6:58 pm)
[PATCH] [8/18] Add a __alloc_bootmem_node_nopanic, Andi Kleen, (Sun Mar 16, 6:58 pm)
[PATCH] [14/18] Clean up hugetlb boot time printk, Andi Kleen, (Sun Mar 16, 6:58 pm)
[PATCH] [16/18] Add huge pud support to hugetlbfs, Andi Kleen, (Sun Mar 16, 6:58 pm)
[PATCH] [17/18] Add huge pud support to mm/memory.c, Andi Kleen, (Sun Mar 16, 6:58 pm)
Re: [PATCH] [0/18] GB pages hugetlb support, Paul Jackson, (Sun Mar 16, 8:11 pm)
Re: [PATCH] [0/18] GB pages hugetlb support, Paul Jackson, (Sun Mar 16, 10:35 pm)
Re: [PATCH] [0/18] GB pages hugetlb support, Andi Kleen, (Sun Mar 16, 11:58 pm)
Re: [PATCH] [0/18] GB pages hugetlb support, Paul Jackson, (Mon Mar 17, 12:00 am)
Re: [PATCH] [0/18] GB pages hugetlb support, Andi Kleen, (Mon Mar 17, 12:00 am)
Re: [PATCH] [0/18] GB pages hugetlb support, Andi Kleen, (Mon Mar 17, 12:29 am)
Re: [PATCH] [0/18] GB pages hugetlb support, Paul Jackson, (Mon Mar 17, 2:26 am)
Re: [PATCH] [0/18] GB pages hugetlb support, Adam Litke, (Mon Mar 17, 8:05 am)
Re: [PATCH] [0/18] GB pages hugetlb support, Andi Kleen, (Mon Mar 17, 8:33 am)
Re: [PATCH] [0/18] GB pages hugetlb support, Adam Litke, (Mon Mar 17, 8:59 am)