#ifdef CONFIG_IMA_KEXEC
int arch_ima_add_kexec_buffer(struct kimage *image, unsigned long load_addr,
size_t size);
diff --git a/arch/powerpc/kexec/ima.c b/arch/powerpc/kexec/ima.c
index 906e8212435d..68017123b07d 100644
--- a/arch/powerpc/kexec/ima.c
+++ b/arch/powerpc/kexec/ima.c
@@ -61,32 +61,6 @@ int ima_free_kexec_buffer(void)
return memblock_free(addr, size);
}
-/**
- * remove_ima_buffer - remove the IMA buffer property and reservation from @fdt
- *
- * @fdt: Flattened Device Tree to update
- * @chosen_node: Offset to the chosen node in the device tree
- *
- * The IMA measurement buffer is of no use to a subsequent kernel, so we always
- * remove it from the device tree.
- */
-void remove_ima_buffer(void *fdt, int chosen_node)
-{
- int ret;
- unsigned long addr;
- size_t size;
-
- ret = get_ima_kexec_buffer(fdt, chosen_node, &addr, &size);
- if (ret)
- return;
-
- fdt_delprop(fdt, chosen_node, "linux,ima-kexec-buffer");
-
- ret = delete_fdt_mem_rsv(fdt, addr, size);
- if (!ret)
- pr_debug("Removed old IMA buffer reservation.\n");
-}
-
#ifdef CONFIG_IMA_KEXEC
/**
* arch_ima_add_kexec_buffer - do arch-specific steps to add the IMA buffer
diff --git a/drivers/of/kexec.c b/drivers/of/kexec.c
index 516b86f7113a..42d16dfff78d 100644
--- a/drivers/of/kexec.c
+++ b/drivers/of/kexec.c
@@ -129,3 +129,32 @@ int get_ima_kexec_buffer(void *fdt, int chosen_node,
return 0;
}
+
+/**
+ * remove_ima_buffer - remove the IMA buffer property and reservation from @fdt
+ *
+ * @fdt: Flattened Device Tree to update
+ * @chosen_node: Offset to the chosen node in the device tree
+ *
+ * The IMA measurement buffer is of no use to a subsequent kernel, so we always
+ * remove it from the device tree.
+ */
+void remove_ima_buffer(void *fdt, int chosen_node)
+{
+ int ret;
+ unsigned long addr;
+ size_t size;
+
+ if (!IS_ENABLED(CONFIG_HAVE_IMA_KEXEC))
+ return;
+
+ ret = get_ima_kexec_buffer(fdt, chosen_node, &addr, &size);
+ if (ret)
+ return;
+
+ fdt_delprop(fdt, chosen_node, "linux,ima-kexec-buffer");
+
+ ret = delete_fdt_mem_rsv(fdt, addr, size);
+ if (!ret)
+ pr_debug("Removed old IMA buffer reservation.\n");
+}
diff --git a/include/linux/kexec.h b/include/linux/kexec.h
index 10ff704ab670..52a0efff184d 100644
--- a/include/linux/kexec.h
+++ b/include/linux/kexec.h
@@ -411,6 +411,7 @@ static inline int kexec_crash_loaded(void) { return 0; }
extern int get_root_addr_size_cells(int *addr_cells, int *size_cells);
extern int get_ima_kexec_buffer(void *fdt, int chosen_node,
unsigned long *addr, size_t *size);
+extern void remove_ima_buffer(void *fdt, int chosen_node);
extern int delete_fdt_mem_rsv(void *fdt, unsigned long start,
unsigned long size);
#endif /* CONFIG_OF_FLATTREE */