Pull two patches from upstream
bz865162 Someone need this for kexec to load memdisk which is smaller then 32k. kexec-tools-2.0.3-Load-bzImages-smaller-than-32-KiB.patch bz849650, for efi booting system we need this acpi_rsdp kernel argument after vivek's secure boot work we maybe need drop this one. kexec-tools-2.0.3-kdump-pass-acpi_rsdp-to-2nd-kernel-for-efi-booting.patch
This commit is contained in:
parent
c248af077b
commit
1cbfc5626e
73
kexec-tools-2.0.3-Load-bzImages-smaller-than-32-KiB.patch
Normal file
73
kexec-tools-2.0.3-Load-bzImages-smaller-than-32-KiB.patch
Normal file
@ -0,0 +1,73 @@
|
||||
From 0e4946bc3009e7b9ce6f9d792077eddd7e40cc14 Mon Sep 17 00:00:00 2001
|
||||
From: Eric Biggers <ebiggers3@gmail.com>
|
||||
Date: Tue, 5 Jun 2012 19:46:07 -0400
|
||||
Subject: [PATCH] Load bzImages smaller than 32 KiB
|
||||
|
||||
Allow bzImages smaller than 32KiB to be kexec'ed.
|
||||
|
||||
The current code will fail to load a bzImage smaller than 32768 bytes (sizeof
|
||||
struct x86_linux_header), but the 'memdisk' program that comes with syslinux is
|
||||
only about 26 KiB. This patch changes the minimum size to 1024 bytes (2
|
||||
sectors), which appears to be the limit that syslinux enforces.
|
||||
|
||||
Removed the "tail" field of struct x86_linux_header because it doesn't seem to
|
||||
actually be used (is there a reason for it?).
|
||||
|
||||
Also, note that bzImage_probe() was incorrectly using `sizeof (header)', even
|
||||
though header is a pointer.
|
||||
|
||||
Signed-off-by: Eric Biggers <ebiggers3@gmail.com>
|
||||
Signed-off-by: Simon Horman <horms@verge.net.au>
|
||||
---
|
||||
include/x86/x86-linux.h | 2 --
|
||||
kexec/arch/i386/kexec-bzImage.c | 7 +++++--
|
||||
2 files changed, 5 insertions(+), 4 deletions(-)
|
||||
|
||||
diff --git a/include/x86/x86-linux.h b/include/x86/x86-linux.h
|
||||
index 59d35c9..2ebcc3a 100644
|
||||
--- a/include/x86/x86-linux.h
|
||||
+++ b/include/x86/x86-linux.h
|
||||
@@ -233,7 +233,6 @@ struct x86_linux_header {
|
||||
uint32_t high_base; /* 0x24C */
|
||||
uint32_t high_memsz; /* 0x250 */
|
||||
uint32_t high_filesz; /* 0x254 */
|
||||
- uint32_t tail[32*1024 - 0x258]; /* 0x258 */
|
||||
#else
|
||||
uint32_t kernel_alignment; /* 0x230 */
|
||||
uint8_t relocatable_kernel; /* 0x234 */
|
||||
@@ -241,7 +240,6 @@ struct x86_linux_header {
|
||||
uint32_t cmdline_size; /* 0x238 */
|
||||
uint32_t hardware_subarch; /* 0x23C */
|
||||
uint64_t hardware_subarch_data; /* 0x240 */
|
||||
- uint8_t tail[32*1024 - 0x248]; /* 0x248 */
|
||||
#endif
|
||||
} PACKED;
|
||||
|
||||
diff --git a/kexec/arch/i386/kexec-bzImage.c b/kexec/arch/i386/kexec-bzImage.c
|
||||
index 54c4427..6998587 100644
|
||||
--- a/kexec/arch/i386/kexec-bzImage.c
|
||||
+++ b/kexec/arch/i386/kexec-bzImage.c
|
||||
@@ -44,7 +44,10 @@ static const int probe_debug = 0;
|
||||
int bzImage_probe(const char *buf, off_t len)
|
||||
{
|
||||
const struct x86_linux_header *header;
|
||||
- if ((uintmax_t)len < (uintmax_t)sizeof(header)) {
|
||||
+ if ((uintmax_t)len < (uintmax_t)(2 * 512)) {
|
||||
+ if (probe_debug) {
|
||||
+ fprintf(stderr, "File is too short to be a bzImage!\n");
|
||||
+ }
|
||||
return -1;
|
||||
}
|
||||
header = (const struct x86_linux_header *)buf;
|
||||
@@ -118,7 +121,7 @@ int do_bzImage_load(struct kexec_info *info,
|
||||
/*
|
||||
* Find out about the file I am about to load.
|
||||
*/
|
||||
- if ((uintmax_t)kernel_len < (uintmax_t)sizeof(setup_header)) {
|
||||
+ if ((uintmax_t)kernel_len < (uintmax_t)(2 * 512)) {
|
||||
return -1;
|
||||
}
|
||||
memcpy(&setup_header, kernel, sizeof(setup_header));
|
||||
--
|
||||
1.7.1
|
||||
|
@ -0,0 +1,82 @@
|
||||
From 75d1a16f0b4e5b33e91a51d93014f1fd8303f36e Mon Sep 17 00:00:00 2001
|
||||
From: Dave Young <dyoung@redhat.com>
|
||||
Date: Thu, 18 Oct 2012 11:16:08 +0800
|
||||
Subject: [PATCH] kdump: pass acpi_rsdp= to 2nd kernel for efi booting
|
||||
|
||||
In case efi booting, kdump need kernel parameter acpi_rsdp= to retrieve
|
||||
the acpi root table physical address.
|
||||
|
||||
Add a function cmdline_add_efi to get the address from /sys/firmware/efi/systab
|
||||
If there's no such file or read fail the function will just do nothing.
|
||||
|
||||
Tested efi boot Fedora 17 on thinkpad T420.
|
||||
|
||||
Some background info for this issue:
|
||||
http://lists.infradead.org/pipermail/kexec/2010-March/003889.html
|
||||
|
||||
[v1 -> v2]:
|
||||
Address comments from Khalid and Simon
|
||||
use fgets instead of read(2) to iterate the file
|
||||
do not add 'noefi' because kexec does not construct EFI signature
|
||||
in bootloader signature in boot_params, so kexec'd kernel will
|
||||
disable EFI automatically even without noefi.
|
||||
|
||||
Signed-off-by: Dave Young <dyoung@redhat.com>
|
||||
Reviewed-by: Khalid Aziz <khalid@gonehiking.org>
|
||||
Acked-by: "Eric W. Biederman" <ebiederm@xmission.com>
|
||||
Signed-off-by: Simon Horman <horms@verge.net.au>
|
||||
---
|
||||
kexec/arch/i386/crashdump-x86.c | 35 +++++++++++++++++++++++++++++++++++
|
||||
1 file changed, 35 insertions(+)
|
||||
|
||||
--- kexec-tools-2.0.3.orig/kexec/arch/i386/crashdump-x86.c
|
||||
+++ kexec-tools-2.0.3/kexec/arch/i386/crashdump-x86.c
|
||||
@@ -665,6 +665,40 @@ static int cmdline_add_memmap_acpi(char
|
||||
return 0;
|
||||
}
|
||||
|
||||
+/* Appends 'acpi_rsdp=' commandline for efi boot crash dump */
|
||||
+static void cmdline_add_efi(char *cmdline)
|
||||
+{
|
||||
+ FILE *fp;
|
||||
+ int cmdlen, len;
|
||||
+ char line[MAX_LINE], *s;
|
||||
+ const char *acpis = " acpi_rsdp=";
|
||||
+
|
||||
+ fp = fopen("/sys/firmware/efi/systab", "r");
|
||||
+ if (!fp)
|
||||
+ return;
|
||||
+
|
||||
+ while(fgets(line, sizeof(line), fp) != 0) {
|
||||
+ /* ACPI20= always goes before ACPI= */
|
||||
+ if ((strstr(line, "ACPI20=")) || (strstr(line, "ACPI="))) {
|
||||
+ line[strlen(line) - 1] = '\0';
|
||||
+ s = strchr(line, '=');
|
||||
+ s += 1;
|
||||
+ len = strlen(s) + strlen(acpis);
|
||||
+ cmdlen = strlen(cmdline) + len;
|
||||
+ if (cmdlen > (COMMAND_LINE_SIZE - 1))
|
||||
+ die("Command line overflow\n");
|
||||
+ strcat(cmdline, acpis);
|
||||
+ strcat(cmdline, s);
|
||||
+ dbgprintf("Command line after adding efi\n");
|
||||
+ dbgprintf("%s\n", cmdline);
|
||||
+
|
||||
+ break;
|
||||
+ }
|
||||
+ }
|
||||
+
|
||||
+ fclose(fp);
|
||||
+}
|
||||
+
|
||||
static void get_backup_area(unsigned long *start, unsigned long *end)
|
||||
{
|
||||
const char *iomem = proc_iomem();
|
||||
@@ -838,6 +872,7 @@ int load_crashdump_segments(struct kexec
|
||||
if (delete_memmap(memmap_p, elfcorehdr, memsz) < 0)
|
||||
return -1;
|
||||
cmdline_add_memmap(mod_cmdline, memmap_p);
|
||||
+ cmdline_add_efi(mod_cmdline);
|
||||
cmdline_add_elfcorehdr(mod_cmdline, elfcorehdr);
|
||||
|
||||
/* Inform second kernel about the presence of ACPI tables. */
|
@ -50,6 +50,8 @@ Obsoletes: diskdumputils netdump
|
||||
#
|
||||
# Patches 0 through 100 are meant for x86 kexec-tools enablement
|
||||
#
|
||||
Patch001: kexec-tools-2.0.3-Load-bzImages-smaller-than-32-KiB.patch
|
||||
Patch002: kexec-tools-2.0.3-kdump-pass-acpi_rsdp-to-2nd-kernel-for-efi-booting.patch
|
||||
|
||||
#
|
||||
# Patches 101 through 200 are meant for x86_64 kexec-tools enablement
|
||||
@ -92,6 +94,8 @@ mkdir -p -m755 kcp
|
||||
tar -z -x -v -f %{SOURCE9}
|
||||
|
||||
|
||||
%patch001 -p1
|
||||
%patch002 -p1
|
||||
%patch301 -p1
|
||||
%patch601 -p1
|
||||
%patch602 -p1
|
||||
|
Loading…
Reference in New Issue
Block a user