Merge tag 'for-linus' of git://git.kernel.org/pub/scm/virt/kvm/kvm
[linux-2.6-microblaze.git] / arch / powerpc / kernel / kexec_elf_64.c
index 9a42309..ba4f18a 100644 (file)
@@ -572,7 +572,7 @@ static void *elf64_load(struct kimage *image, char *kernel_buf,
 {
        int ret;
        unsigned int fdt_size;
-       unsigned long kernel_load_addr, purgatory_load_addr;
+       unsigned long kernel_load_addr;
        unsigned long initrd_load_addr = 0, fdt_load_addr;
        void *fdt;
        const void *slave_code;
@@ -580,6 +580,8 @@ static void *elf64_load(struct kimage *image, char *kernel_buf,
        struct elf_info elf_info;
        struct kexec_buf kbuf = { .image = image, .buf_min = 0,
                                  .buf_max = ppc64_rma_size };
+       struct kexec_buf pbuf = { .image = image, .buf_min = 0,
+                                 .buf_max = ppc64_rma_size, .top_down = true };
 
        ret = build_elf_exec_info(kernel_buf, kernel_len, &ehdr, &elf_info);
        if (ret)
@@ -591,14 +593,13 @@ static void *elf64_load(struct kimage *image, char *kernel_buf,
 
        pr_debug("Loaded the kernel at 0x%lx\n", kernel_load_addr);
 
-       ret = kexec_load_purgatory(image, 0, ppc64_rma_size, true,
-                                  &purgatory_load_addr);
+       ret = kexec_load_purgatory(image, &pbuf);
        if (ret) {
                pr_err("Loading purgatory failed.\n");
                goto out;
        }
 
-       pr_debug("Loaded purgatory at 0x%lx\n", purgatory_load_addr);
+       pr_debug("Loaded purgatory at 0x%lx\n", pbuf.mem);
 
        if (initrd != NULL) {
                kbuf.buffer = initrd;
@@ -657,7 +658,7 @@ out:
        return ret ? ERR_PTR(ret) : fdt;
 }
 
-struct kexec_file_ops kexec_elf64_ops = {
+const struct kexec_file_ops kexec_elf64_ops = {
        .probe = elf64_probe,
        .load = elf64_load,
 };