From: Johannes Weiner <hannes@saeurebad.de>
To: Andrew Morton <akpm@linux-foundation.org>
Cc: Ingo Molnar <mingo@elte.hu>, Yinghai Lu <yhlu.kernel@gmail.com>,
Andi Kleen <andi@firstfloor.org>,
Yasunori Goto <y-goto@jp.fujitsu.com>,
linux-kernel@vger.kernel.org
Subject: [PATCH -mm 04/14] bootmem: add debugging framework
Date: Fri, 06 Jun 2008 00:49:44 +0200 [thread overview]
Message-ID: <20080605225720.068001036@saeurebad.de> (raw)
In-Reply-To: 20080605224940.434439989@saeurebad.de
[-- Attachment #1: bootmem-debugging.patch --]
[-- Type: text/plain, Size: 3403 bytes --]
Introduce the bootmem_debug kernel parameter that enables very verbose
diagnostics regarding all range operations of bootmem as well as the
initialization and release of nodes.
Signed-off-by: Johannes Weiner <hannes@saeurebad.de>
---
mm/bootmem.c | 51 ++++++++++++++++++++++++++++++++++++++++++++-------
1 file changed, 44 insertions(+), 7 deletions(-)
--- a/mm/bootmem.c
+++ b/mm/bootmem.c
@@ -34,6 +34,22 @@ unsigned long saved_max_pfn;
bootmem_data_t bootmem_node_data[MAX_NUMNODES] __initdata;
+static int bootmem_debug;
+
+static int __init bootmem_debug_setup(char *buf)
+{
+ bootmem_debug = 1;
+ return 0;
+}
+early_param("bootmem_debug", bootmem_debug_setup);
+
+#define bdebug(fmt, args...) ({ \
+ if (unlikely(bootmem_debug)) \
+ printk(KERN_INFO \
+ "bootmem::%s " fmt, \
+ __FUNCTION__, ## args); \
+})
+
/*
* Given an initialised bdata, it returns the size of the boot bitmap
*/
@@ -104,6 +120,9 @@ static unsigned long __init init_bootmem
mapsize = get_mapsize(bdata);
memset(bdata->node_bootmem_map, 0xff, mapsize);
+ bdebug("nid=%d start=%lx map=%lx end=%lx mapsize=%lx\n",
+ bdata - bootmem_node_data, start, mapstart, end, mapsize);
+
return mapsize;
}
@@ -198,6 +217,8 @@ static unsigned long __init free_all_boo
count += i;
bdata->node_bootmem_map = NULL;
+ bdebug("nid=%d released=%lx\n", bdata - bootmem_node_data, count);
+
return count;
}
@@ -255,6 +276,10 @@ static void __init free_bootmem_core(boo
if (eidx > bdata->node_low_pfn - PFN_DOWN(bdata->node_boot_start))
eidx = bdata->node_low_pfn - PFN_DOWN(bdata->node_boot_start);
+ bdebug("nid=%d start=%lx end=%lx\n", bdata - bootmem_node_data,
+ sidx + PFN_DOWN(bdata->node_boot_start),
+ eidx + PFN_DOWN(bdata->node_boot_start));
+
for (i = sidx; i < eidx; i++) {
if (unlikely(!test_and_clear_bit(i, bdata->node_bootmem_map)))
BUG();
@@ -360,13 +385,16 @@ static void __init reserve_bootmem_core(
if (eidx > bdata->node_low_pfn - PFN_DOWN(bdata->node_boot_start))
eidx = bdata->node_low_pfn - PFN_DOWN(bdata->node_boot_start);
- for (i = sidx; i < eidx; i++) {
- if (test_and_set_bit(i, bdata->node_bootmem_map)) {
-#ifdef CONFIG_DEBUG_BOOTMEM
- printk("hm, page %08lx reserved twice.\n", i*PAGE_SIZE);
-#endif
- }
- }
+ bdebug("nid=%d start=%lx end=%lx flags=%x\n",
+ bdata - bootmem_node_data,
+ sidx + PFN_DOWN(bdata->node_boot_start),
+ eidx + PFN_DOWN(bdata->node_boot_start),
+ flags);
+
+ for (i = sidx; i < eidx; i++)
+ if (test_and_set_bit(i, bdata->node_bootmem_map))
+ bdebug("hm, page %lx reserved twice.\n",
+ PFN_DOWN(bdata->node_boot_start) + i);
}
/**
@@ -454,6 +482,10 @@ alloc_bootmem_core(struct bootmem_data *
if (!bdata->node_bootmem_map)
return NULL;
+ bdebug("nid=%d size=%lx [%lu pages] align=%lx goal=%lx limit=%lx\n",
+ bdata - bootmem_node_data, size, PAGE_ALIGN(size) >> PAGE_SHIFT,
+ align, goal, limit);
+
/* bdata->node_boot_start is supposed to be (12+6)bits alignment on x86_64 ? */
node_boot_start = bdata->node_boot_start;
node_bootmem_map = bdata->node_bootmem_map;
@@ -561,6 +593,11 @@ found:
ret = phys_to_virt(start * PAGE_SIZE + node_boot_start);
}
+ bdebug("nid=%d start=%lx end=%lx\n",
+ bdata - bootmem_node_data,
+ start + PFN_DOWN(bdata->node_boot_start),
+ start + areasize + PFN_DOWN(bdata->node_boot_start));
+
/*
* Reserve the area now:
*/
--
next prev parent reply other threads:[~2008-06-05 23:08 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-05 22:49 [PATCH -mm 00/14] bootmem rewrite v4 Johannes Weiner
2008-06-05 22:49 ` [PATCH -mm 01/14] bootmem: reorder code to match new bootmem structure Johannes Weiner
2008-06-05 22:49 ` [PATCH -mm 02/14] bootmem: clean up bootmem.c file header Johannes Weiner
2008-06-05 22:49 ` [PATCH -mm 03/14] bootmem: add documentation to API functions Johannes Weiner
2008-06-05 22:49 ` Johannes Weiner [this message]
2008-06-05 22:49 ` [PATCH -mm 05/14] bootmem: revisit bitmap size calculations Johannes Weiner
2008-06-05 22:49 ` [PATCH -mm 06/14] bootmem: revisit bootmem descriptor list handling Johannes Weiner
2008-06-05 22:49 ` [PATCH -mm 07/14] bootmem: clean up free_all_bootmem_core Johannes Weiner
2008-06-05 22:49 ` [PATCH -mm 08/14] bootmem: clean up alloc_bootmem_core Johannes Weiner
2008-06-17 9:34 ` [PATCH] Fix new alloc_bootmem_core (Re: [PATCH -mm 08/14] bootmem: clean up alloc_bootmem_core) Yasunori Goto
2008-06-17 16:59 ` Johannes Weiner
2008-06-26 18:56 ` Johannes Weiner
2008-06-05 22:49 ` [PATCH -mm 09/14] bootmem: free/reserve helpers Johannes Weiner
2008-06-05 22:49 ` [PATCH -mm 10/14] bootmem: factor out the marking of a PFN range Johannes Weiner
2008-06-05 22:49 ` [PATCH -mm 11/14] bootmem: respect goal more likely Johannes Weiner
2008-06-05 22:49 ` [PATCH -mm 12/14] bootmem: Make __alloc_bootmem_low_node fall back to other nodes Johannes Weiner
2008-06-05 22:49 ` [PATCH -mm 13/14] bootmem: revisit alloc_bootmem_section Johannes Weiner
2008-06-05 22:49 ` [PATCH -mm 14/14] bootmem: replace node_boot_start in struct bootmem_data Johannes Weiner
2008-06-06 1:15 ` [PATCH -mm 00/14] bootmem rewrite v4 Yasunori Goto
2008-06-08 20:34 ` Andrew Morton
2008-06-08 21:52 ` Johannes Weiner
2008-06-08 23:32 ` Andrew Morton
-- strict thread matches above, loose matches on Subject: below --
2008-06-03 0:50 [PATCH -mm 00/14] bootmem rewrite v3 Johannes Weiner
2008-06-03 0:50 ` [PATCH -mm 04/14] bootmem: add debugging framework Johannes Weiner
2008-05-30 19:42 [PATCH -mm 00/14] bootmem rewrite v2 Johannes Weiner
2008-05-30 19:42 ` [PATCH -mm 04/14] bootmem: add debugging framework Johannes Weiner
2008-05-30 19:42 ` 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=20080605225720.068001036@saeurebad.de \
--to=hannes@saeurebad.de \
--cc=akpm@linux-foundation.org \
--cc=andi@firstfloor.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@elte.hu \
--cc=y-goto@jp.fujitsu.com \
--cc=yhlu.kernel@gmail.com \
/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.