static void __init bootmem_init(void)
 {
-       unsigned long reserved_end;
        phys_addr_t ramstart = PHYS_ADDR_MAX;
        int i;
 
         * will reserve the area used for the initrd.
         */
        init_initrd();
-       reserved_end = (unsigned long) PFN_UP(__pa_symbol(&_end));
 
-       memblock_reserve(PHYS_OFFSET,
-                        (reserved_end << PAGE_SHIFT) - PHYS_OFFSET);
+       /* Reserve memory occupied by kernel. */
+       memblock_reserve(__pa_symbol(&_text),
+                       __pa_symbol(&_end) - __pa_symbol(&_text));
 
        /*
         * max_low_pfn is not a number of pages. The number of pages
                memory_present(0, start, end);
        }
 
-#ifdef CONFIG_RELOCATABLE
-       /*
-        * The kernel reserves all memory below its _end symbol as bootmem,
-        * but the kernel may now be at a much higher address. The memory
-        * between the original and new locations may be returned to the system.
-        */
-       if (__pa_symbol(_text) > __pa_symbol(VMLINUX_LOAD_ADDRESS)) {
-               unsigned long offset;
-               extern void show_kernel_relocation(const char *level);
-
-               offset = __pa_symbol(_text) - __pa_symbol(VMLINUX_LOAD_ADDRESS);
-               memblock_free(__pa_symbol(VMLINUX_LOAD_ADDRESS), offset);
-
-#if defined(CONFIG_DEBUG_KERNEL) && defined(CONFIG_DEBUG_INFO)
-               /*
-                * This information is necessary when debugging the kernel
-                * But is a security vulnerability otherwise!
-                */
-               show_kernel_relocation(KERN_INFO);
-#endif
-       }
-#endif
-
        /*
         * Reserve initrd memory if needed.
         */