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>
Tento commit je obsažen v:

odevzdal
Linus Torvalds

rodič
908eedc616
revize
3089aa1b0c
@@ -242,35 +242,3 @@ void free_initrd_mem(unsigned long start, unsigned long end)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PROC_KCORE
|
||||
|
||||
static int __init setup_kcore(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i = 0; i < lmb.memory.cnt; i++) {
|
||||
unsigned long base;
|
||||
unsigned long size;
|
||||
struct kcore_list *kcore_mem;
|
||||
|
||||
base = lmb.memory.region[i].base;
|
||||
size = lmb.memory.region[i].size;
|
||||
|
||||
kcore_mem = kmalloc(sizeof(struct kcore_list), GFP_ATOMIC);
|
||||
if (!kcore_mem)
|
||||
panic("%s: kmalloc failed\n", __func__);
|
||||
|
||||
/* must stay under 32 bits */
|
||||
if ( 0xfffffffful - (unsigned long)__va(base) < size) {
|
||||
size = 0xfffffffful - (unsigned long)(__va(base));
|
||||
printk(KERN_DEBUG "setup_kcore: restrict size=%lx\n",
|
||||
size);
|
||||
}
|
||||
|
||||
kclist_add(kcore_mem, __va(base), size, KCORE_RAM);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
module_init(setup_kcore);
|
||||
#endif
|
||||
|
@@ -109,32 +109,6 @@ void free_initrd_mem(unsigned long start, unsigned long end)
|
||||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PROC_KCORE
|
||||
|
||||
static int __init setup_kcore(void)
|
||||
{
|
||||
int i;
|
||||
|
||||
for (i=0; i < lmb.memory.cnt; i++) {
|
||||
unsigned long base, size;
|
||||
struct kcore_list *kcore_mem;
|
||||
|
||||
base = lmb.memory.region[i].base;
|
||||
size = lmb.memory.region[i].size;
|
||||
|
||||
/* GFP_ATOMIC to avoid might_sleep warnings during boot */
|
||||
kcore_mem = kmalloc(sizeof(struct kcore_list), GFP_ATOMIC);
|
||||
if (!kcore_mem)
|
||||
panic("%s: kmalloc failed\n", __func__);
|
||||
|
||||
kclist_add(kcore_mem, __va(base), size, KCORE_RAM);
|
||||
}
|
||||
|
||||
return 0;
|
||||
}
|
||||
module_init(setup_kcore);
|
||||
#endif
|
||||
|
||||
static void pgd_ctor(void *addr)
|
||||
{
|
||||
memset(addr, 0, PGD_TABLE_SIZE);
|
||||
|
Odkázat v novém úkolu
Zablokovat Uživatele