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:
Dave Young 2012-10-25 17:07:19 +08:00
parent c248af077b
commit 1cbfc5626e
3 changed files with 159 additions and 0 deletions

View 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

View File

@ -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. */

View File

@ -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