mirror of https://gitee.com/openkylin/linux.git
[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:
parent
94987aff23
commit
df174e3be8
|
@ -255,3 +255,40 @@ void free_initrd_mem(unsigned long start, unsigned long end)
|
|||
}
|
||||
}
|
||||
#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)
|
|||
}
|
||||
#endif
|
||||
|
||||
#ifdef CONFIG_PROC_KCORE
|
||||
static struct kcore_list kcore_vmem;
|
||||
|
||||
static int __init setup_kcore(void)
|
||||
|
@ -139,6 +140,7 @@ static int __init setup_kcore(void)
|
|||
return 0;
|
||||
}
|
||||
module_init(setup_kcore);
|
||||
#endif
|
||||
|
||||
static void zero_ctor(void *addr, struct kmem_cache *cache, unsigned long flags)
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue