Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

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

[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
Loading
Loading
Loading
Loading
+37 −0
Original line number Diff line number Diff line
@@ -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
+2 −0
Original line number Diff line number Diff line
@@ -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)
{