Commit df174e3b authored by Ed Swarthout's avatar Ed Swarthout Committed by Paul Mackerras

[POWERPC] Add memory regions to the kcore list for 32-bit machines

The entries are only 32-bit, so restrict the virtual address to stay
below 0xffff_ffff.  With KERNELBASE set to 0xc000_0000, this in effect
restricts access to the first 1GB of real memory.

Make setup_kcore conditional on CONFIG_PROC_KCORE for both 32/64.
Signed-off-by: default avatarEd Swarthout <Ed.Swarthout@freescale.com>
Signed-off-by: default avatarPaul Mackerras <paulus@samba.org>
parent 94987aff
...@@ -255,3 +255,40 @@ void free_initrd_mem(unsigned long start, unsigned long end) ...@@ -255,3 +255,40 @@ void free_initrd_mem(unsigned long start, unsigned long end)
} }
} }
#endif #endif
#ifdef CONFIG_PROC_KCORE
static struct kcore_list kcore_vmem;
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", __FUNCTION__);
/* 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);
}
kclist_add(&kcore_vmem, (void *)VMALLOC_START,
VMALLOC_END-VMALLOC_START);
return 0;
}
module_init(setup_kcore);
#endif
...@@ -113,6 +113,7 @@ void free_initrd_mem(unsigned long start, unsigned long end) ...@@ -113,6 +113,7 @@ void free_initrd_mem(unsigned long start, unsigned long end)
} }
#endif #endif
#ifdef CONFIG_PROC_KCORE
static struct kcore_list kcore_vmem; static struct kcore_list kcore_vmem;
static int __init setup_kcore(void) static int __init setup_kcore(void)
...@@ -139,6 +140,7 @@ static int __init setup_kcore(void) ...@@ -139,6 +140,7 @@ static int __init setup_kcore(void)
return 0; return 0;
} }
module_init(setup_kcore); module_init(setup_kcore);
#endif
static void zero_ctor(void *addr, struct kmem_cache *cache, unsigned long flags) static void zero_ctor(void *addr, struct kmem_cache *cache, unsigned long flags)
{ {
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment