diff options
Diffstat (limited to 'kernel/kexec.c')
-rw-r--r-- | kernel/kexec.c | 34 |
1 files changed, 29 insertions, 5 deletions
diff --git a/kernel/kexec.c b/kernel/kexec.c index 5e4bd7864c5d..2436ffcec91f 100644 --- a/kernel/kexec.c +++ b/kernel/kexec.c | |||
@@ -54,6 +54,12 @@ struct resource crashk_res = { | |||
54 | .end = 0, | 54 | .end = 0, |
55 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM | 55 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM |
56 | }; | 56 | }; |
57 | struct resource crashk_low_res = { | ||
58 | .name = "Crash kernel low", | ||
59 | .start = 0, | ||
60 | .end = 0, | ||
61 | .flags = IORESOURCE_BUSY | IORESOURCE_MEM | ||
62 | }; | ||
57 | 63 | ||
58 | int kexec_should_crash(struct task_struct *p) | 64 | int kexec_should_crash(struct task_struct *p) |
59 | { | 65 | { |
@@ -1369,10 +1375,11 @@ static int __init parse_crashkernel_simple(char *cmdline, | |||
1369 | * That function is the entry point for command line parsing and should be | 1375 | * That function is the entry point for command line parsing and should be |
1370 | * called from the arch-specific code. | 1376 | * called from the arch-specific code. |
1371 | */ | 1377 | */ |
1372 | int __init parse_crashkernel(char *cmdline, | 1378 | static int __init __parse_crashkernel(char *cmdline, |
1373 | unsigned long long system_ram, | 1379 | unsigned long long system_ram, |
1374 | unsigned long long *crash_size, | 1380 | unsigned long long *crash_size, |
1375 | unsigned long long *crash_base) | 1381 | unsigned long long *crash_base, |
1382 | const char *name) | ||
1376 | { | 1383 | { |
1377 | char *p = cmdline, *ck_cmdline = NULL; | 1384 | char *p = cmdline, *ck_cmdline = NULL; |
1378 | char *first_colon, *first_space; | 1385 | char *first_colon, *first_space; |
@@ -1382,16 +1389,16 @@ int __init parse_crashkernel(char *cmdline, | |||
1382 | *crash_base = 0; | 1389 | *crash_base = 0; |
1383 | 1390 | ||
1384 | /* find crashkernel and use the last one if there are more */ | 1391 | /* find crashkernel and use the last one if there are more */ |
1385 | p = strstr(p, "crashkernel="); | 1392 | p = strstr(p, name); |
1386 | while (p) { | 1393 | while (p) { |
1387 | ck_cmdline = p; | 1394 | ck_cmdline = p; |
1388 | p = strstr(p+1, "crashkernel="); | 1395 | p = strstr(p+1, name); |
1389 | } | 1396 | } |
1390 | 1397 | ||
1391 | if (!ck_cmdline) | 1398 | if (!ck_cmdline) |
1392 | return -EINVAL; | 1399 | return -EINVAL; |
1393 | 1400 | ||
1394 | ck_cmdline += 12; /* strlen("crashkernel=") */ | 1401 | ck_cmdline += strlen(name); |
1395 | 1402 | ||
1396 | /* | 1403 | /* |
1397 | * if the commandline contains a ':', then that's the extended | 1404 | * if the commandline contains a ':', then that's the extended |
@@ -1409,6 +1416,23 @@ int __init parse_crashkernel(char *cmdline, | |||
1409 | return 0; | 1416 | return 0; |
1410 | } | 1417 | } |
1411 | 1418 | ||
1419 | int __init parse_crashkernel(char *cmdline, | ||
1420 | unsigned long long system_ram, | ||
1421 | unsigned long long *crash_size, | ||
1422 | unsigned long long *crash_base) | ||
1423 | { | ||
1424 | return __parse_crashkernel(cmdline, system_ram, crash_size, crash_base, | ||
1425 | "crashkernel="); | ||
1426 | } | ||
1427 | |||
1428 | int __init parse_crashkernel_low(char *cmdline, | ||
1429 | unsigned long long system_ram, | ||
1430 | unsigned long long *crash_size, | ||
1431 | unsigned long long *crash_base) | ||
1432 | { | ||
1433 | return __parse_crashkernel(cmdline, system_ram, crash_size, crash_base, | ||
1434 | "crashkernel_low="); | ||
1435 | } | ||
1412 | 1436 | ||
1413 | static void update_vmcoreinfo_note(void) | 1437 | static void update_vmcoreinfo_note(void) |
1414 | { | 1438 | { |