aboutsummaryrefslogtreecommitdiffstats
path: root/kernel/kexec.c
diff options
context:
space:
mode:
Diffstat (limited to 'kernel/kexec.c')
-rw-r--r--kernel/kexec.c17
1 files changed, 10 insertions, 7 deletions
diff --git a/kernel/kexec.c b/kernel/kexec.c
index e9a6be4d1ebb..38c25b1f2fd5 100644
--- a/kernel/kexec.c
+++ b/kernel/kexec.c
@@ -1284,19 +1284,22 @@ SYSCALL_DEFINE4(kexec_load, unsigned long, entry, unsigned long, nr_segments,
1284 if (nr_segments > 0) { 1284 if (nr_segments > 0) {
1285 unsigned long i; 1285 unsigned long i;
1286 1286
1287 /* Loading another kernel to reboot into */ 1287 if (flags & KEXEC_ON_CRASH) {
1288 if ((flags & KEXEC_ON_CRASH) == 0) 1288 /*
1289 result = kimage_alloc_init(&image, entry, nr_segments, 1289 * Loading another kernel to switch to if this one
1290 segments, flags); 1290 * crashes. Free any current crash dump kernel before
1291 /* Loading another kernel to switch to if this one crashes */
1292 else if (flags & KEXEC_ON_CRASH) {
1293 /* Free any current crash dump kernel before
1294 * we corrupt it. 1291 * we corrupt it.
1295 */ 1292 */
1293
1296 kimage_free(xchg(&kexec_crash_image, NULL)); 1294 kimage_free(xchg(&kexec_crash_image, NULL));
1297 result = kimage_alloc_init(&image, entry, nr_segments, 1295 result = kimage_alloc_init(&image, entry, nr_segments,
1298 segments, flags); 1296 segments, flags);
1299 crash_map_reserved_pages(); 1297 crash_map_reserved_pages();
1298 } else {
1299 /* Loading another kernel to reboot into. */
1300
1301 result = kimage_alloc_init(&image, entry, nr_segments,
1302 segments, flags);
1300 } 1303 }
1301 if (result) 1304 if (result)
1302 goto out; 1305 goto out;