--- v12
+++ v18
@@ -1,104 +1,79 @@
-fdt_appendprop_addrrange() function adds a property, with the given name,
-to the device tree at the given node offset, and also sets the address
-and size of the property. This function should be used to add
-"linux,ima-kexec-buffer" property to the device tree and set the address
-and size of the IMA measurement buffer, instead of using custom function.
+From: Rob Herring <robh@kernel.org>
-Use fdt_appendprop_addrrange() to add "linux,ima-kexec-buffer" property
-to the device tree. This property holds the address and size of
-the IMA measurement buffer that needs to be passed from the current
-kernel to the next kernel across kexec system call.
+The architecture specific field, elfcorehdr_addr in struct kimage_arch,
+that holds the address of the buffer in memory for ELF core header for
+powerpc has a different name than the one used for x86_64. This makes
+it hard to have a common code for setting up the device tree for
+kexec system call.
-Remove custom code that is used in setup_ima_buffer() to add
-"linux,ima-kexec-buffer" property to the device tree.
+Rename elfcorehdr_addr to elf_load_addr to align with x86_64 name so
+common code can use it.
-Signed-off-by: Lakshmi Ramasubramanian <nramas@linux.microsoft.com>
+Signed-off-by: Rob Herring <robh@kernel.org>
+Reviewed-by: Lakshmi Ramasubramanian <nramas@linux.microsoft.com>
---
- arch/powerpc/kexec/ima.c | 51 ++++++----------------------------------
- 1 file changed, 7 insertions(+), 44 deletions(-)
+ arch/powerpc/include/asm/kexec.h | 2 +-
+ arch/powerpc/kexec/file_load.c | 4 ++--
+ arch/powerpc/kexec/file_load_64.c | 4 ++--
+ 3 files changed, 5 insertions(+), 5 deletions(-)
-diff --git a/arch/powerpc/kexec/ima.c b/arch/powerpc/kexec/ima.c
-index 720e50e490b6..d579d3da4715 100644
---- a/arch/powerpc/kexec/ima.c
-+++ b/arch/powerpc/kexec/ima.c
-@@ -11,6 +11,7 @@
- #include <linux/of.h>
- #include <linux/memblock.h>
- #include <linux/libfdt.h>
-+#include <asm/ima.h>
+diff --git a/arch/powerpc/include/asm/kexec.h b/arch/powerpc/include/asm/kexec.h
+index 55d6ede30c19..4d9b250cf1e6 100644
+--- a/arch/powerpc/include/asm/kexec.h
++++ b/arch/powerpc/include/asm/kexec.h
+@@ -108,7 +108,7 @@ struct kimage_arch {
+ unsigned long backup_start;
+ void *backup_buf;
- static int get_addr_size_cells(int *addr_cells, int *size_cells)
- {
-@@ -145,27 +146,6 @@ int arch_ima_add_kexec_buffer(struct kimage *image, unsigned long load_addr,
+- unsigned long elfcorehdr_addr;
++ unsigned long elf_load_addr;
+ unsigned long elf_headers_sz;
+ void *elf_headers;
+
+diff --git a/arch/powerpc/kexec/file_load.c b/arch/powerpc/kexec/file_load.c
+index 9a232bc36c8f..f7c31daf8a2e 100644
+--- a/arch/powerpc/kexec/file_load.c
++++ b/arch/powerpc/kexec/file_load.c
+@@ -45,7 +45,7 @@ char *setup_kdump_cmdline(struct kimage *image, char *cmdline,
+ return NULL;
+
+ elfcorehdr_strlen = sprintf(cmdline_ptr, "elfcorehdr=0x%lx ",
+- image->arch.elfcorehdr_addr);
++ image->arch.elf_load_addr);
+
+ if (elfcorehdr_strlen + cmdline_len > COMMAND_LINE_SIZE) {
+ pr_err("Appending elfcorehdr=<addr> exceeds cmdline size\n");
+@@ -263,7 +263,7 @@ int setup_new_fdt(const struct kimage *image, void *fdt,
+ * Avoid elfcorehdr from being stomped on in kdump kernel by
+ * setting up memory reserve map.
+ */
+- ret = fdt_add_mem_rsv(fdt, image->arch.elfcorehdr_addr,
++ ret = fdt_add_mem_rsv(fdt, image->arch.elf_load_addr,
+ image->arch.elf_headers_sz);
+ if (ret) {
+ pr_err("Error reserving elfcorehdr memory: %s\n",
+diff --git a/arch/powerpc/kexec/file_load_64.c b/arch/powerpc/kexec/file_load_64.c
+index c69bcf9b547a..e539b7d401a2 100644
+--- a/arch/powerpc/kexec/file_load_64.c
++++ b/arch/powerpc/kexec/file_load_64.c
+@@ -815,7 +815,7 @@ static int load_elfcorehdr_segment(struct kimage *image, struct kexec_buf *kbuf)
+ goto out;
+ }
+
+- image->arch.elfcorehdr_addr = kbuf->mem;
++ image->arch.elf_load_addr = kbuf->mem;
+ image->arch.elf_headers_sz = headers_sz;
+ image->arch.elf_headers = headers;
+ out:
+@@ -851,7 +851,7 @@ int load_crashdump_segments_ppc64(struct kimage *image,
+ return ret;
+ }
+ pr_debug("Loaded elf core header at 0x%lx, bufsz=0x%lx memsz=0x%lx\n",
+- image->arch.elfcorehdr_addr, kbuf->bufsz, kbuf->memsz);
++ image->arch.elf_load_addr, kbuf->bufsz, kbuf->memsz);
+
return 0;
}
-
--static int write_number(void *p, u64 value, int cells)
--{
-- if (cells == 1) {
-- u32 tmp;
--
-- if (value > U32_MAX)
-- return -EINVAL;
--
-- tmp = cpu_to_be32(value);
-- memcpy(p, &tmp, sizeof(tmp));
-- } else if (cells == 2) {
-- u64 tmp;
--
-- tmp = cpu_to_be64(value);
-- memcpy(p, &tmp, sizeof(tmp));
-- } else
-- return -EINVAL;
--
-- return 0;
--}
--
- /**
- * setup_ima_buffer - add IMA buffer information to the fdt
- * @image: kexec image being loaded.
-@@ -176,35 +156,18 @@ static int write_number(void *p, u64 value, int cells)
- */
- int setup_ima_buffer(const struct kimage *image, void *fdt, int chosen_node)
- {
-- int ret, addr_cells, size_cells, entry_size;
-- u8 value[16];
-+ int ret;
-
- remove_ima_buffer(fdt, chosen_node);
- if (!image->arch.ima_buffer_size)
- return 0;
-
-- ret = get_addr_size_cells(&addr_cells, &size_cells);
-+ ret = fdt_appendprop_addrrange(fdt, 0, chosen_node,
-+ "linux,ima-kexec-buffer",
-+ image->arch.ima_buffer_addr,
-+ image->arch.ima_buffer_size);
- if (ret)
-- return ret;
--
-- entry_size = 4 * (addr_cells + size_cells);
--
-- if (entry_size > sizeof(value))
-- return -EINVAL;
--
-- ret = write_number(value, image->arch.ima_buffer_addr, addr_cells);
-- if (ret)
-- return ret;
--
-- ret = write_number(value + 4 * addr_cells, image->arch.ima_buffer_size,
-- size_cells);
-- if (ret)
-- return ret;
--
-- ret = fdt_setprop(fdt, chosen_node, "linux,ima-kexec-buffer", value,
-- entry_size);
-- if (ret < 0)
-- return -EINVAL;
-+ return (ret == -FDT_ERR_NOSPACE ? -ENOMEM : -EINVAL);
-
- ret = fdt_add_mem_rsv(fdt, image->arch.ima_buffer_addr,
- image->arch.ima_buffer_size);
--
-2.29.2
+2.30.0