All of lore.kernel.org
 help / color / mirror / Atom feed
From: Johannes Weiner <hannes@saeurebad.de>
To: Heiko Carstens <heiko.carstens@de.ibm.com>
Cc: Andrew Morton <akpm@linux-foundation.org>,
	linux-kernel@vger.kernel.org, linux-arch@vger.kernel.org
Subject: [PATCH 02/20 fixed] mm: generic show_mem()
Date: Fri, 27 Jun 2008 23:17:06 +0200	[thread overview]
Message-ID: <87od5mwpbh.fsf_-_@skyscraper.fehenstaub.lan> (raw)
In-Reply-To: <20080627144329.GA7634@osiris.ibm.com> (Heiko Carstens's message of "Fri, 27 Jun 2008 16:43:30 +0200")

This implements a platform-independent version of show_mem().

Signed-off-by: Johannes Weiner <hannes@saeurebad.de>
---
 mm/Kconfig      |    3 +++
 mm/page_alloc.c |   56 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++
 2 files changed, 59 insertions(+)

Heiko Carstens <heiko.carstens@de.ibm.com> writes:

>> +#ifdef CONFIG_HAVE_GENERIC_SHOW_MEM
>> +void show_mem(void)
>> +{
>> +	pg_data_t *pgdat;
>> +	int total = 0, reserved = 0, shared = 0, nonshared = 0, highmem = 0;
>
> All of these should be unsigned long. Might overflow on very large
> configurations otherwise.

Thanks Heiko for pointing it out.  quicklist_total_size() also returns
UL so I fixed up the format character there as well.

--- a/mm/page_alloc.c
+++ b/mm/page_alloc.c
@@ -45,6 +45,7 @@
 #include <linux/fault-inject.h>
 #include <linux/page-isolation.h>
 #include <linux/memcontrol.h>
+#include <linux/nmi.h>
 #include <linux/debugobjects.h>
 
 #include <asm/tlbflush.h>
@@ -2042,6 +2043,61 @@ static void zoneref_set_zone(struct zone
 	zoneref->zone_idx = zone_idx(zone);
 }
 
+#ifdef CONFIG_HAVE_GENERIC_SHOW_MEM
+void show_mem(void)
+{
+	pg_data_t *pgdat;
+	unsigned long total = 0, reserved = 0, shared = 0,
+		nonshared = 0, highmem = 0;
+
+	printk(KERN_INFO "Mem-Info:\n");
+	show_free_areas();
+
+	for_each_online_pgdat(pgdat) {
+		unsigned long i, flags;
+
+		pgdat_resize_lock(pgdat, &flags);
+		for (i = 0; i < pgdat->node_spanned_pages; i++) {
+			struct page *page;
+			unsigned long pfn = pgdat->node_start_pfn + i;
+
+			if (unlikely((i % MAX_ORDER_NR_PAGES) == 0))
+				touch_nmi_watchdog();
+
+			if (!pfn_valid(pfn))
+				continue;
+
+			page = pfn_to_page(pfn);
+
+			if (PageHighMem(page))
+				highmem++;
+
+			if (PageReserved(page))
+				reserved++;
+			else if (page_count(page) == 1)
+				nonshared++;
+			else if (page_count(page) > 1)
+				shared += page_count(page) - 1;
+
+			total++;
+		}
+		pgdat_resize_unlock(pgdat, &flags);
+	}
+
+	printk(KERN_INFO "%lu pages RAM\n", total);
+#ifdef CONFIG_HIGHMEM
+	printk(KERN_INFO "%lu pages HighMem\n", highmem);
+#endif
+	printk(KERN_INFO "%lu pages reserved\n", reserved);
+	printk(KERN_INFO "%lu pages shared\n", shared);
+	printk(KERN_INFO "%lu pages non-shared\n", nonshared);
+#ifdef CONFIG_QUICKLIST
+	printk(KERN_INFO "%lu pages in pagetable cache\n",
+		quicklist_total_size());
+#endif
+}
+#endif /* CONFIG_HAVE_GENERIC_SHOW_MEM */
+
 /*
  * Builds allocation fallback zone lists.
  *
--- a/mm/Kconfig
+++ b/mm/Kconfig
@@ -213,6 +213,9 @@ config VIRT_TO_BUS
 config PAGE_WALKER
 	def_bool n
 
+config HAVE_GENERIC_SHOW_MEM
+	def_bool n
+
 config UNEVICTABLE_LRU
 	bool "Add LRU list to track non-evictable pages"
 	default y

  reply	other threads:[~2008-06-27 21:17 UTC|newest]

Thread overview: 33+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-06-27 11:53 [PATCH 00/20] mm: generic show_mem() v4 Johannes Weiner
2008-06-27 11:53 ` [PATCH 01/20] mm: print swapcache page count in show_swap_cache_info() Johannes Weiner
2008-06-27 11:53 ` [PATCH 02/20] mm: generic show_mem() Johannes Weiner
2008-06-27 14:43   ` Heiko Carstens
2008-06-27 21:17     ` Johannes Weiner [this message]
2008-06-28  4:22   ` Paul Mundt
2008-06-28 10:25     ` Johannes Weiner
2008-06-28 17:51       ` Paul Mundt
2008-06-27 11:53 ` [PATCH 03/20] alpha: use " Johannes Weiner
2008-06-27 11:53 ` [PATCH 04/20] avr32: " Johannes Weiner
2008-06-27 11:53 ` [PATCH 05/20] blackfin: " Johannes Weiner
2008-06-27 11:53 ` [PATCH 06/20] cris: " Johannes Weiner
2008-06-27 11:53 ` [PATCH 07/20] frv: " Johannes Weiner
2008-06-27 11:53 ` [PATCH 08/20] m32r: " Johannes Weiner
2008-06-27 11:53 ` [PATCH 09/20] m68k: " Johannes Weiner
2008-06-29  9:17   ` Geert Uytterhoeven
2008-06-27 11:53 ` [PATCH 10/20] m68knommu: " Johannes Weiner
2008-06-27 11:54 ` [PATCH 11/20] mips: " Johannes Weiner
2008-06-27 11:54 ` [PATCH 12/20] h8300: " Johannes Weiner
2008-06-27 11:54 ` [PATCH 13/20] mn10300: " Johannes Weiner
2008-06-27 11:54 ` [PATCH 14/20] powerpc: " Johannes Weiner
2008-07-01  7:27   ` Benjamin Herrenschmidt
2008-06-27 11:54 ` [PATCH 15/20] s390: " Johannes Weiner
2008-06-27 11:54 ` [PATCH 16/20] sh: " Johannes Weiner
2008-06-27 11:54 ` [PATCH 17/20] sparc64: " Johannes Weiner
2008-06-27 22:46   ` David Miller
2008-06-27 11:54 ` [PATCH 18/20] um: " Johannes Weiner
2008-06-27 15:08   ` Jeff Dike
2008-06-27 11:54 ` [PATCH 19/20] x86: " Johannes Weiner
2008-06-27 11:54 ` [PATCH 20/20] xtensa: " Johannes Weiner
2008-07-01  6:55 ` [PATCH 00/20] mm: generic show_mem() v4 Johannes Weiner
2008-07-01  7:25   ` Andrew Morton
2008-07-01  7:54     ` Johannes Weiner

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=87od5mwpbh.fsf_-_@skyscraper.fehenstaub.lan \
    --to=hannes@saeurebad.de \
    --cc=akpm@linux-foundation.org \
    --cc=heiko.carstens@de.ibm.com \
    --cc=linux-arch@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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.