aboutsummaryrefslogtreecommitdiffstats
path: root/arch/powerpc
diff options
context:
space:
mode:
authorKAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com>2009-09-22 19:45:48 -0400
committerLinus Torvalds <torvalds@linux-foundation.org>2009-09-23 10:39:41 -0400
commit3089aa1b0c07fb7c48f9829c619f50198307789d (patch)
tree63677c773c559458ba301bd448ecce6e007b6742 /arch/powerpc
parent908eedc6168bd92e89f90d89fa389065a36358fa (diff)
kcore: use registerd physmem information
For /proc/kcore, each arch registers its memory range by kclist_add(). In usual, - range of physical memory - range of vmalloc area - text, etc... are registered but "range of physical memory" has some troubles. It doesn't updated at memory hotplug and it tend to include unnecessary memory holes. Now, /proc/iomem (kernel/resource.c) includes required physical memory range information and it's properly updated at memory hotplug. Then, it's good to avoid using its own code(duplicating information) and to rebuild kclist for physical memory based on /proc/iomem. Signed-off-by: KAMEZAWA Hiroyuki <kamezawa.hiroyu@jp.fujitsu.com> Signed-off-by: Jiri Slaby <jirislaby@gmail.com> Cc: Ralf Baechle <ralf@linux-mips.org> Cc: Benjamin Herrenschmidt <benh@kernel.crashing.org> Cc: WANG Cong <xiyou.wangcong@gmail.com> Cc: KOSAKI Motohiro <kosaki.motohiro@jp.fujitsu.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
Diffstat (limited to 'arch/powerpc')
-rw-r--r--arch/powerpc/mm/init_32.c32
-rw-r--r--arch/powerpc/mm/init_64.c26
2 files changed, 0 insertions, 58 deletions
diff --git a/arch/powerpc/mm/init_32.c b/arch/powerpc/mm/init_32.c
index 38a450d16b27..9ddcfb4dc139 100644
--- a/arch/powerpc/mm/init_32.c
+++ b/arch/powerpc/mm/init_32.c
@@ -242,35 +242,3 @@ void free_initrd_mem(unsigned long start, unsigned long end)
242} 242}
243#endif 243#endif
244 244
245#ifdef CONFIG_PROC_KCORE
246
247static int __init setup_kcore(void)
248{
249 int i;
250
251 for (i = 0; i < lmb.memory.cnt; i++) {
252 unsigned long base;
253 unsigned long size;
254 struct kcore_list *kcore_mem;
255
256 base = lmb.memory.region[i].base;
257 size = lmb.memory.region[i].size;
258
259 kcore_mem = kmalloc(sizeof(struct kcore_list), GFP_ATOMIC);
260 if (!kcore_mem)
261 panic("%s: kmalloc failed\n", __func__);
262
263 /* must stay under 32 bits */
264 if ( 0xfffffffful - (unsigned long)__va(base) < size) {
265 size = 0xfffffffful - (unsigned long)(__va(base));
266 printk(KERN_DEBUG "setup_kcore: restrict size=%lx\n",
267 size);
268 }
269
270 kclist_add(kcore_mem, __va(base), size, KCORE_RAM);
271 }
272
273 return 0;
274}
275module_init(setup_kcore);
276#endif
diff --git a/arch/powerpc/mm/init_64.c b/arch/powerpc/mm/init_64.c
index 87ef492a1a5d..335c578b9cc3 100644
--- a/arch/powerpc/mm/init_64.c
+++ b/arch/powerpc/mm/init_64.c
@@ -109,32 +109,6 @@ void free_initrd_mem(unsigned long start, unsigned long end)
109} 109}
110#endif 110#endif
111 111
112#ifdef CONFIG_PROC_KCORE
113
114static int __init setup_kcore(void)
115{
116 int i;
117
118 for (i=0; i < lmb.memory.cnt; i++) {
119 unsigned long base, size;
120 struct kcore_list *kcore_mem;
121
122 base = lmb.memory.region[i].base;
123 size = lmb.memory.region[i].size;
124
125 /* GFP_ATOMIC to avoid might_sleep warnings during boot */
126 kcore_mem = kmalloc(sizeof(struct kcore_list), GFP_ATOMIC);
127 if (!kcore_mem)
128 panic("%s: kmalloc failed\n", __func__);
129
130 kclist_add(kcore_mem, __va(base), size, KCORE_RAM);
131 }
132
133 return 0;
134}
135module_init(setup_kcore);
136#endif
137
138static void pgd_ctor(void *addr) 112static void pgd_ctor(void *addr)
139{ 113{
140 memset(addr, 0, PGD_TABLE_SIZE); 114 memset(addr, 0, PGD_TABLE_SIZE);