|
@@ -64,7 +64,9 @@ bool kexec_in_progress = false;
|
|
|
char __weak kexec_purgatory[0];
|
|
|
size_t __weak kexec_purgatory_size = 0;
|
|
|
|
|
|
+#ifdef CONFIG_KEXEC_FILE
|
|
|
static int kexec_calculate_store_digests(struct kimage *image);
|
|
|
+#endif
|
|
|
|
|
|
/* Location of the reserved area for the crash kernel */
|
|
|
struct resource crashk_res = {
|
|
@@ -341,6 +343,7 @@ out_free_image:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+#ifdef CONFIG_KEXEC_FILE
|
|
|
static int copy_file_from_fd(int fd, void **buf, unsigned long *buf_len)
|
|
|
{
|
|
|
struct fd f = fdget(fd);
|
|
@@ -612,6 +615,9 @@ out_free_image:
|
|
|
kfree(image);
|
|
|
return ret;
|
|
|
}
|
|
|
+#else /* CONFIG_KEXEC_FILE */
|
|
|
+static inline void kimage_file_post_load_cleanup(struct kimage *image) { }
|
|
|
+#endif /* CONFIG_KEXEC_FILE */
|
|
|
|
|
|
static int kimage_is_destination_range(struct kimage *image,
|
|
|
unsigned long start,
|
|
@@ -1375,6 +1381,7 @@ COMPAT_SYSCALL_DEFINE4(kexec_load, compat_ulong_t, entry,
|
|
|
}
|
|
|
#endif
|
|
|
|
|
|
+#ifdef CONFIG_KEXEC_FILE
|
|
|
SYSCALL_DEFINE5(kexec_file_load, int, kernel_fd, int, initrd_fd,
|
|
|
unsigned long, cmdline_len, const char __user *, cmdline_ptr,
|
|
|
unsigned long, flags)
|
|
@@ -1451,6 +1458,8 @@ out:
|
|
|
return ret;
|
|
|
}
|
|
|
|
|
|
+#endif /* CONFIG_KEXEC_FILE */
|
|
|
+
|
|
|
void crash_kexec(struct pt_regs *regs)
|
|
|
{
|
|
|
/* Take the kexec_mutex here to prevent sys_kexec_load
|
|
@@ -2006,6 +2015,7 @@ static int __init crash_save_vmcoreinfo_init(void)
|
|
|
|
|
|
subsys_initcall(crash_save_vmcoreinfo_init);
|
|
|
|
|
|
+#ifdef CONFIG_KEXEC_FILE
|
|
|
static int __kexec_add_segment(struct kimage *image, char *buf,
|
|
|
unsigned long bufsz, unsigned long mem,
|
|
|
unsigned long memsz)
|
|
@@ -2682,6 +2692,7 @@ int kexec_purgatory_get_set_symbol(struct kimage *image, const char *name,
|
|
|
|
|
|
return 0;
|
|
|
}
|
|
|
+#endif /* CONFIG_KEXEC_FILE */
|
|
|
|
|
|
/*
|
|
|
* Move into place and start executing a preloaded standalone
|