/* The device tree may be allocated beyond our memory limit, or inside the crash kernel region for kdump. If so, move it out of the way.  */
static void __init move_device_tree(void)
/* The device tree may be allocated beyond our memory limit, or inside the crash kernel region for kdump. If so, move it out of the way.  */
static void __init move_device_tree(void)
{
	unsigned long start, size;
	void *p;
	DBG("-> move_device_tree\n");
	start = __pa(initial_boot_params);
	size = initial_boot_params->totalsize;
	if ((memory_limit && (start + size) > memory_limit) ||
			overlaps_crashkernel(start, size)) {
		p = __va(lmb_alloc_base(size, PAGE_SIZE, lmb.rmo_size));
		memcpy(p, initial_boot_params, size);
		initial_boot_params = (struct boot_param_header *)p;
		DBG("Moved device tree to 0x%p\n", p);
	}
	DBG("<- move_device_tree\n");
}