[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: Ed Swarthout <Ed.Swarthout@freescale.com>
Signed-off-by: Paul Mackerras <paulus@samba.org>
This commit is contained in:
Ed Swarthout 2007-09-21 12:53:02 +10:00 committed by Paul Mackerras
parent 94987aff23
commit df174e3be8
2 changed files with 39 additions and 0 deletions

View File

@ -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

View File

@ -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)
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)
{ {