* [PATCH v4 0/4] kexec-tools: efi runtime support on kexec kernel
@ 2013-12-20 10:05 Dave Young
[not found] ` <1387533947-18210-1-git-send-email-dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
0 siblings, 1 reply; 12+ messages in thread
From: Dave Young @ 2013-12-20 10:05 UTC (permalink / raw)
To: kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
Cc: mjg59-1xO5oi07KQx4cg9Nei1l7Q, linux-efi-u79uwXL29TY76Z2rM5mHXA,
toshi.kani-VXdhtT5mjnY, matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy,
greg-U8xfFu+wG4EAvxtiuMwx3w, x86-DgEjT+Ai2ygdnm+yROfE0A,
James.Bottomley-d9PhHud1JfjCXq6kfMZ53/egYHeGw8Jk,
horms-/R6kz+dDXgpPR4JQBCEnsQ, bp-Gina5bIWoIWzQB+pC5nmwQ,
ebiederm-aS9lmoZGLiVWk0Htik3J/w, hpa-YMNOUZJC4hwAvxtiuMwx3w,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA
This patchset is for adding efi runtime support on kexec kernel
kernel patches see below thread:
http://thread.gmane.org/gmane.linux.kernel.efi/2491
in kexec-tools, this patchset will do below:
1. retrieve efi_info from debugfs boot_params, and fill the
x86 setup header
2. collect data efi runtime needed:
/sys/firmware/efi/systab: fw_vendor, runtime, config_tables and smbios
/sys/firmware/efi/efi-runtime-map/*, the phys-virt mappings in 1st kernel
3. assemble setup_data based on data get in 2) then pass it to 2nd kernel
changelog v3->v4:
update efi_info memmap to the saved runtime map instead of use 1st kernel
untouched memmap.
Tested on OVMF, dell laptop, lenovo laptop and HP workstation
Dave Young (4):
build fix: include x86-linux.h in x86-linux-setup.h
Add function get_bootparam
Add efi_info in x86 setup header
Passing efi related data via setup_data
include/x86/x86-linux.h | 3 +-
kexec/arch/i386/crashdump-x86.c | 4 +-
kexec/arch/i386/x86-linux-setup.c | 246 ++++++++++++++++++++++++++++++++++--
kexec/arch/i386/x86-linux-setup.h | 2 +
kexec/arch/x86_64/kexec-bzImage64.c | 6 +
5 files changed, 248 insertions(+), 13 deletions(-)
--
1.8.3.1
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v4 1/4] build fix: include x86-linux.h in x86-linux-setup.h
[not found] ` <1387533947-18210-1-git-send-email-dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2013-12-20 10:05 ` Dave Young
2013-12-20 10:05 ` [PATCH v4 2/4] Add function get_bootparam Dave Young
` (4 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Dave Young @ 2013-12-20 10:05 UTC (permalink / raw)
To: kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
Cc: mjg59-1xO5oi07KQx4cg9Nei1l7Q, linux-efi-u79uwXL29TY76Z2rM5mHXA,
toshi.kani-VXdhtT5mjnY, matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy,
greg-U8xfFu+wG4EAvxtiuMwx3w, x86-DgEjT+Ai2ygdnm+yROfE0A,
James.Bottomley-d9PhHud1JfjCXq6kfMZ53/egYHeGw8Jk,
horms-/R6kz+dDXgpPR4JQBCEnsQ, bp-Gina5bIWoIWzQB+pC5nmwQ,
ebiederm-aS9lmoZGLiVWk0Htik3J/w, hpa-YMNOUZJC4hwAvxtiuMwx3w,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA
There's build warnings about using struct x86_linux_param_header *
in x86-linux-setup.h, it is declared in x86-linux.h
Fix it by include x86-linux.h in x86-linux-setup.h
Signed-off-by: Dave Young <dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
kexec/arch/i386/x86-linux-setup.h | 1 +
1 file changed, 1 insertion(+)
diff --git a/kexec/arch/i386/x86-linux-setup.h b/kexec/arch/i386/x86-linux-setup.h
index 09aed4d..2afe97c 100644
--- a/kexec/arch/i386/x86-linux-setup.h
+++ b/kexec/arch/i386/x86-linux-setup.h
@@ -1,5 +1,6 @@
#ifndef X86_LINUX_SETUP_H
#define X86_LINUX_SETUP_H
+#include <x86/x86-linux.h>
void init_linux_parameters(struct x86_linux_param_header *real_mode);
void setup_linux_bootloader_parameters_high(
--
1.8.3.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v4 2/4] Add function get_bootparam
[not found] ` <1387533947-18210-1-git-send-email-dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-12-20 10:05 ` [PATCH v4 1/4] build fix: include x86-linux.h in x86-linux-setup.h Dave Young
@ 2013-12-20 10:05 ` Dave Young
2013-12-20 10:05 ` [PATCH v4 3/4] Add efi_info in x86 setup header Dave Young
` (3 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Dave Young @ 2013-12-20 10:05 UTC (permalink / raw)
To: kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
Cc: mjg59-1xO5oi07KQx4cg9Nei1l7Q, linux-efi-u79uwXL29TY76Z2rM5mHXA,
toshi.kani-VXdhtT5mjnY, matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy,
greg-U8xfFu+wG4EAvxtiuMwx3w, x86-DgEjT+Ai2ygdnm+yROfE0A,
James.Bottomley-d9PhHud1JfjCXq6kfMZ53/egYHeGw8Jk,
horms-/R6kz+dDXgpPR4JQBCEnsQ, bp-Gina5bIWoIWzQB+pC5nmwQ,
ebiederm-aS9lmoZGLiVWk0Htik3J/w, hpa-YMNOUZJC4hwAvxtiuMwx3w,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA
Not only setup_subarch will get data from debugfs file
boot_params/data, later code for adding efi_info will
also need do same thing. Thus add a common function here
for later use.
v1->v2: make get_bootparam() static
v2->v3: return error code when get_bootparam fails because
later patch to collect efi runtime maps will not
necessary if get_bootparam fails.
switch to use /sys/kernel/boot_params if possible.
return error code for later use in setup_efi_info.
Signed-off-by: Dave Young <dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
kexec/arch/i386/x86-linux-setup.c | 42 +++++++++++++++++++++++++++++----------
1 file changed, 31 insertions(+), 11 deletions(-)
diff --git a/kexec/arch/i386/x86-linux-setup.c b/kexec/arch/i386/x86-linux-setup.c
index 454fad6..7b4c65d 100644
--- a/kexec/arch/i386/x86-linux-setup.c
+++ b/kexec/arch/i386/x86-linux-setup.c
@@ -436,28 +436,48 @@ char *find_mnt_by_fsname(char *fsname)
return mntdir;
}
-void setup_subarch(struct x86_linux_param_header *real_mode)
+static int get_bootparam(void *buf, off_t offset, size_t size)
{
int data_file;
- const off_t offset = offsetof(typeof(*real_mode), hardware_subarch);
- char *debugfs_mnt;
+ char *debugfs_mnt, *sysfs_mnt;
char filename[PATH_MAX];
+ int err, has_sysfs_params = 0;
+
+ sysfs_mnt = find_mnt_by_fsname("sysfs");
+ if (sysfs_mnt) {
+ snprintf(filename, PATH_MAX, "%s/%s", sysfs_mnt,
+ "kernel/boot_params/data");
+ free(sysfs_mnt);
+ err = access(filename, F_OK);
+ if (!err)
+ has_sysfs_params = 1;
+ }
- debugfs_mnt = find_mnt_by_fsname("debugfs");
- if (!debugfs_mnt)
- return;
- snprintf(filename, PATH_MAX, "%s/%s", debugfs_mnt, "boot_params/data");
- filename[PATH_MAX-1] = 0;
- free(debugfs_mnt);
+ if (!has_sysfs_params) {
+ debugfs_mnt = find_mnt_by_fsname("debugfs");
+ if (!debugfs_mnt)
+ return 1;
+ snprintf(filename, PATH_MAX, "%s/%s", debugfs_mnt,
+ "boot_params/data");
+ free(debugfs_mnt);
+ }
data_file = open(filename, O_RDONLY);
if (data_file < 0)
- return;
+ return 1;
if (lseek(data_file, offset, SEEK_SET) < 0)
goto close;
- read(data_file, &real_mode->hardware_subarch, sizeof(uint32_t));
+ read(data_file, buf, size);
close:
close(data_file);
+ return 0;
+}
+
+void setup_subarch(struct x86_linux_param_header *real_mode)
+{
+ off_t offset = offsetof(typeof(*real_mode), hardware_subarch);
+
+ get_bootparam(&real_mode->hardware_subarch, offset, sizeof(uint32_t));
}
void setup_linux_system_parameters(struct kexec_info *info,
--
1.8.3.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v4 3/4] Add efi_info in x86 setup header
[not found] ` <1387533947-18210-1-git-send-email-dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-12-20 10:05 ` [PATCH v4 1/4] build fix: include x86-linux.h in x86-linux-setup.h Dave Young
2013-12-20 10:05 ` [PATCH v4 2/4] Add function get_bootparam Dave Young
@ 2013-12-20 10:05 ` Dave Young
2013-12-20 10:05 ` [PATCH v4 4/4] Passing efi related data via setup_data Dave Young
` (2 subsequent siblings)
5 siblings, 0 replies; 12+ messages in thread
From: Dave Young @ 2013-12-20 10:05 UTC (permalink / raw)
To: kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
Cc: linux-efi-u79uwXL29TY76Z2rM5mHXA, x86-DgEjT+Ai2ygdnm+yROfE0A,
mjg59-1xO5oi07KQx4cg9Nei1l7Q, hpa-YMNOUZJC4hwAvxtiuMwx3w,
James.Bottomley-d9PhHud1JfjCXq6kfMZ53/egYHeGw8Jk,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA, ebiederm-aS9lmoZGLiVWk0Htik3J/w,
horms-/R6kz+dDXgpPR4JQBCEnsQ, bp-Gina5bIWoIWzQB+pC5nmwQ,
greg-U8xfFu+wG4EAvxtiuMwx3w,
matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy, toshi.kani-VXdhtT5mjnY
For supporting efi runtime on kexec kernel we need to
fill the efi_info struct in setup_header. I just get
the info in kernel exported boot_params data in debugfs.
v1->v2:
update comment for offset of reserved4_1[] in x87_linux_param_header
Address comment from mjg59: do not break old kernel when use newer kexec-tools.
add checking for xloadflags bit 4 XLF_EFI_KEXEC. Only fill
efi_info and pass acpi_rsdp when the kexec kernel support efi boot.
coding style fix, change internal function to be static
Signed-off-by: Dave Young <dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
include/x86/x86-linux.h | 3 ++-
kexec/arch/i386/crashdump-x86.c | 4 +++-
kexec/arch/i386/x86-linux-setup.c | 9 +++++++++
kexec/arch/i386/x86-linux-setup.h | 1 +
kexec/arch/x86_64/kexec-bzImage64.c | 6 ++++++
5 files changed, 21 insertions(+), 2 deletions(-)
diff --git a/include/x86/x86-linux.h b/include/x86/x86-linux.h
index c41e5f2..50c7324 100644
--- a/include/x86/x86-linux.h
+++ b/include/x86/x86-linux.h
@@ -113,7 +113,8 @@ struct x86_linux_param_header {
uint32_t ext_ramdisk_image; /* 0xc0 */
uint32_t ext_ramdisk_size; /* 0xc4 */
uint32_t ext_cmd_line_ptr; /* 0xc8 */
- uint8_t reserved4_1[0x1e0 - 0xcc]; /* 0xcc */
+ uint8_t reserved4_1[0x1c0 - 0xcc]; /* 0xe4 */
+ uint8_t efi_info[32]; /* 0x1c0 */
uint32_t alt_mem_k; /* 0x1e0 */
uint8_t reserved5[4]; /* 0x1e4 */
uint8_t e820_map_nr; /* 0x1e8 */
diff --git a/kexec/arch/i386/crashdump-x86.c b/kexec/arch/i386/crashdump-x86.c
index ca98165..53bd077 100644
--- a/kexec/arch/i386/crashdump-x86.c
+++ b/kexec/arch/i386/crashdump-x86.c
@@ -41,6 +41,7 @@
#include "../../crashdump.h"
#include "kexec-x86.h"
#include "crashdump-x86.h"
+#include "x86-linux-setup.h"
#ifdef HAVE_LIBXENCTRL
#include <xenctrl.h>
@@ -935,7 +936,8 @@ int load_crashdump_segments(struct kexec_info *info, char* mod_cmdline,
if (delete_memmap(memmap_p, elfcorehdr, memsz) < 0)
return -1;
cmdline_add_memmap(mod_cmdline, memmap_p);
- cmdline_add_efi(mod_cmdline);
+ if (!bzImage_support_efi_boot)
+ cmdline_add_efi(mod_cmdline);
cmdline_add_elfcorehdr(mod_cmdline, elfcorehdr);
/* Inform second kernel about the presence of ACPI tables. */
diff --git a/kexec/arch/i386/x86-linux-setup.c b/kexec/arch/i386/x86-linux-setup.c
index 7b4c65d..38bd9dd 100644
--- a/kexec/arch/i386/x86-linux-setup.c
+++ b/kexec/arch/i386/x86-linux-setup.c
@@ -480,6 +480,13 @@ void setup_subarch(struct x86_linux_param_header *real_mode)
get_bootparam(&real_mode->hardware_subarch, offset, sizeof(uint32_t));
}
+static void setup_efi_info(struct x86_linux_param_header *real_mode)
+{
+ off_t offset = offsetof(typeof(*real_mode), efi_info);
+
+ get_bootparam(&real_mode->efi_info, offset, 32);
+}
+
void setup_linux_system_parameters(struct kexec_info *info,
struct x86_linux_param_header *real_mode)
{
@@ -489,6 +496,8 @@ void setup_linux_system_parameters(struct kexec_info *info,
/* get subarch from running kernel */
setup_subarch(real_mode);
+ if (bzImage_support_efi_boot)
+ setup_efi_info(real_mode);
/* Default screen size */
real_mode->orig_x = 0;
diff --git a/kexec/arch/i386/x86-linux-setup.h b/kexec/arch/i386/x86-linux-setup.h
index 2afe97c..6fb84b4 100644
--- a/kexec/arch/i386/x86-linux-setup.h
+++ b/kexec/arch/i386/x86-linux-setup.h
@@ -29,5 +29,6 @@ void setup_linux_system_parameters(struct kexec_info *info,
/* command line parameter may be appended by purgatory */
#define PURGATORY_CMDLINE_SIZE 64
+extern int bzImage_support_efi_boot;
#endif /* X86_LINUX_SETUP_H */
diff --git a/kexec/arch/x86_64/kexec-bzImage64.c b/kexec/arch/x86_64/kexec-bzImage64.c
index a7b9f15..1983bcf 100644
--- a/kexec/arch/x86_64/kexec-bzImage64.c
+++ b/kexec/arch/x86_64/kexec-bzImage64.c
@@ -42,6 +42,7 @@
#include <arch/options.h>
static const int probe_debug = 0;
+int bzImage_support_efi_boot;
int bzImage64_probe(const char *buf, off_t len)
{
@@ -82,6 +83,11 @@ int bzImage64_probe(const char *buf, off_t len)
/* Must be KERNEL_64 and CAN_BE_LOADED_ABOVE_4G */
return -1;
}
+
+#define XLF_EFI_KEXEC (1 << 4)
+ if ((header->xloadflags & XLF_EFI_KEXEC) == XLF_EFI_KEXEC)
+ bzImage_support_efi_boot = 1;
+
/* I've got a relocatable bzImage64 */
if (probe_debug)
fprintf(stderr, "It's a relocatable bzImage64\n");
--
1.8.3.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* [PATCH v4 4/4] Passing efi related data via setup_data
[not found] ` <1387533947-18210-1-git-send-email-dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
` (2 preceding siblings ...)
2013-12-20 10:05 ` [PATCH v4 3/4] Add efi_info in x86 setup header Dave Young
@ 2013-12-20 10:05 ` Dave Young
[not found] ` <1387533947-18210-5-git-send-email-dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-12-20 17:58 ` [PATCH v4 0/4] kexec-tools: efi runtime support on kexec kernel Toshi Kani
2014-01-21 2:55 ` Dave Young
5 siblings, 1 reply; 12+ messages in thread
From: Dave Young @ 2013-12-20 10:05 UTC (permalink / raw)
To: kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
Cc: mjg59-1xO5oi07KQx4cg9Nei1l7Q, linux-efi-u79uwXL29TY76Z2rM5mHXA,
toshi.kani-VXdhtT5mjnY, matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy,
greg-U8xfFu+wG4EAvxtiuMwx3w, x86-DgEjT+Ai2ygdnm+yROfE0A,
James.Bottomley-d9PhHud1JfjCXq6kfMZ53/egYHeGw8Jk,
horms-/R6kz+dDXgpPR4JQBCEnsQ, bp-Gina5bIWoIWzQB+pC5nmwQ,
ebiederm-aS9lmoZGLiVWk0Htik3J/w, hpa-YMNOUZJC4hwAvxtiuMwx3w,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA
For supporting efi runtime, several efi physical addresses
fw_vendor, runtime, config tables, smbios and the whole runtime
mapping info need to be used in kexec kernel. Thus introduce
setup_data struct for passing these data.
collect the varialbes from /sys/firmware/efi/systab and
/sys/firmware/efi/runtime-map
Tested on qemu+ovmf, dell laptop, lenovo laptop and HP workstation.
v1->v2:
HPA: use uint*_t instead of __uint*_t
Simon: indention fix; fix a memory leak
move offset change update to previous patch in setup header
only passing setup_data when the bzImage support efi boot
Vivek: export a value in bzImage probe so it can be used
to check if we should pass acpi_rsdp.
coding style
v2->v3:
code cleanup
bail out if efi mm desc_version != 1
bhe: define macro for SETUP_EFI
break loop if find matched string in systab.
v3->v4:
patch04:
update memmap in efi_info to the saved runtime map
So kernel side can iterate them as normal boot.
Signed-off-by: Dave Young <dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
kexec/arch/i386/x86-linux-setup.c | 201 +++++++++++++++++++++++++++++++++++++-
1 file changed, 198 insertions(+), 3 deletions(-)
diff --git a/kexec/arch/i386/x86-linux-setup.c b/kexec/arch/i386/x86-linux-setup.c
index 38bd9dd..b8000b2 100644
--- a/kexec/arch/i386/x86-linux-setup.c
+++ b/kexec/arch/i386/x86-linux-setup.c
@@ -36,6 +36,8 @@
#include "x86-linux-setup.h"
#include "../../kexec/kexec-syscall.h"
+#define SETUP_EFI 4
+
void init_linux_parameters(struct x86_linux_param_header *real_mode)
{
/* Fill in the values that are usually provided by the kernel. */
@@ -480,11 +482,204 @@ void setup_subarch(struct x86_linux_param_header *real_mode)
get_bootparam(&real_mode->hardware_subarch, offset, sizeof(uint32_t));
}
-static void setup_efi_info(struct x86_linux_param_header *real_mode)
+struct efi_mem_descriptor {
+ uint32_t type;
+ uint32_t pad;
+ uint64_t phys_addr;
+ uint64_t virt_addr;
+ uint64_t num_pages;
+ uint64_t attribute;
+};
+
+struct efi_setup_data {
+ uint64_t fw_vendor;
+ uint64_t runtime;
+ uint64_t tables;
+ uint64_t smbios;
+ uint64_t reserved[8];
+ struct efi_mem_descriptor map[0];
+};
+
+struct setup_data {
+ uint64_t next;
+ uint32_t type;
+ uint32_t len;
+ uint8_t data[0];
+} __attribute__((packed));
+
+static int __get_efi_value(char *line, const char *pattern, uint64_t *val)
+{
+ char *s, *end;
+ s = strstr(line, pattern);
+ if (s)
+ *val = strtoull(s + strlen(pattern), &end, 16);
+
+ if (!s || *val == ULONG_MAX)
+ return 1;
+ return 0;
+}
+
+static void _get_efi_value(const char *filename,
+ const char *pattern, uint64_t *val)
{
+ FILE *fp;
+ char line[1024];
+ int ret;
+
+ fp = fopen(filename, "r");
+ if (!fp)
+ return;
+
+ while (fgets(line, sizeof(line), fp) != 0) {
+ ret = __get_efi_value(line, pattern, val);
+ if (!ret)
+ break;
+ }
+
+ fclose(fp);
+}
+
+static void get_efi_values(struct efi_setup_data *esd)
+{
+ _get_efi_value("/sys/firmware/efi/systab", "SMBIOS=0x",
+ &esd->smbios);
+ _get_efi_value("/sys/firmware/efi/fw_vendor", "0x",
+ &esd->fw_vendor);
+ _get_efi_value("/sys/firmware/efi/runtime", "0x",
+ &esd->runtime);
+ _get_efi_value("/sys/firmware/efi/config_table", "0x",
+ &esd->tables);
+}
+
+static int get_efi_runtime_map(struct efi_setup_data **esd)
+{
+ DIR *dirp;
+ struct dirent *entry;
+ char filename[1024];
+ struct efi_mem_descriptor md;
+ int nr_maps = 0;
+
+ dirp = opendir("/sys/firmware/efi/runtime-map");
+ if (!dirp)
+ return 0;
+ while ((entry = readdir(dirp)) != NULL) {
+ sprintf(filename,
+ "/sys/firmware/efi/runtime-map/%s",
+ (char *)entry->d_name);
+ if (*entry->d_name == '.')
+ continue;
+ file_scanf(filename, "type", "0x%x", (unsigned int *)&md.type);
+ file_scanf(filename, "phys_addr", "0x%llx",
+ (unsigned long long *)&md.phys_addr);
+ file_scanf(filename, "virt_addr", "0x%llx",
+ (unsigned long long *)&md.virt_addr);
+ file_scanf(filename, "num_pages", "0x%llx",
+ (unsigned long long *)&md.num_pages);
+ file_scanf(filename, "attribute", "0x%llx",
+ (unsigned long long *)&md.attribute);
+ *esd = realloc(*esd, sizeof(struct efi_setup_data) +
+ (nr_maps + 1) * sizeof(struct efi_mem_descriptor));
+ *((*esd)->map + nr_maps) = md;
+ nr_maps++;
+ }
+
+ closedir(dirp);
+ return nr_maps;
+}
+
+struct efi_info {
+ uint32_t efi_loader_signature;
+ uint32_t efi_systab;
+ uint32_t efi_memdesc_size;
+ uint32_t efi_memdesc_version;
+ uint32_t efi_memmap;
+ uint32_t efi_memmap_size;
+ uint32_t efi_systab_hi;
+ uint32_t efi_memmap_hi;
+};
+
+
+static int setup_efi_setup_data(struct kexec_info *info,
+ struct x86_linux_param_header *real_mode)
+{
+ int nr_maps;
+ int64_t setup_data_paddr;
+ struct setup_data *sd;
+ struct efi_setup_data *esd;
+ int size, sdsize;
+ int has_efi = 0;
+ struct efi_info *ei = (struct efi_info *)real_mode->efi_info;
+
+ has_efi = access("/sys/firmware/efi/systab", F_OK);
+ if (has_efi < 0)
+ return 1;
+
+ esd = malloc(sizeof(struct efi_setup_data));
+ if (!esd)
+ return 1;
+ memset(esd, 0, sizeof(struct efi_setup_data));
+ get_efi_values(esd);
+ nr_maps = get_efi_runtime_map(&esd);
+ if (!nr_maps) {
+ free(esd);
+ return 1;
+ }
+ size = nr_maps * sizeof(struct efi_mem_descriptor) +
+ sizeof(struct efi_setup_data);
+ sd = malloc(sizeof(struct setup_data) + size);
+ if (!sd) {
+ free(esd);
+ return 1;
+ }
+
+ memset(sd, 0, sizeof(struct setup_data) + size);
+ sd->next = 0;
+ sd->type = SETUP_EFI;
+ sd->len = size;
+ memcpy(sd->data, esd, size);
+ free(esd);
+ sdsize = sd->len + sizeof(struct setup_data);
+ setup_data_paddr = add_buffer(info, sd, sdsize, sdsize, getpagesize(),
+ 0x100000, ULONG_MAX, INT_MAX);
+
+ real_mode->setup_data = setup_data_paddr;
+
+ ei->efi_memmap = real_mode->setup_data + sizeof(struct setup_data) +
+ sizeof(struct efi_setup_data);
+ ei->efi_memmap_size = nr_maps * sizeof(struct efi_mem_descriptor);
+ ei->efi_memdesc_size = sizeof(struct efi_mem_descriptor);
+
+ return 0;
+}
+
+static int
+get_efi_mem_desc_version(struct x86_linux_param_header *real_mode)
+{
+ struct efi_info *ei = (struct efi_info *)real_mode->efi_info;
+
+ return ei->efi_memdesc_version;
+}
+
+static void setup_efi_info(struct kexec_info *info,
+ struct x86_linux_param_header *real_mode)
+{
+ int ret, desc_version;
off_t offset = offsetof(typeof(*real_mode), efi_info);
- get_bootparam(&real_mode->efi_info, offset, 32);
+ ret = get_bootparam(&real_mode->efi_info, offset, 32);
+ if (ret)
+ return;
+ desc_version = get_efi_mem_desc_version(real_mode);
+ if (desc_version != 1) {
+ fprintf(stderr,
+ "efi memory descriptor version %d is not supported!\n",
+ desc_version);
+ memset(&real_mode->efi_info, 0, 32);
+ return;
+ }
+ ret = setup_efi_setup_data(info, real_mode);
+ if (ret)
+ memset(&real_mode->efi_info, 0, 32);
}
void setup_linux_system_parameters(struct kexec_info *info,
@@ -497,7 +692,7 @@ void setup_linux_system_parameters(struct kexec_info *info,
/* get subarch from running kernel */
setup_subarch(real_mode);
if (bzImage_support_efi_boot)
- setup_efi_info(real_mode);
+ setup_efi_info(info, real_mode);
/* Default screen size */
real_mode->orig_x = 0;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v4 0/4] kexec-tools: efi runtime support on kexec kernel
[not found] ` <1387533947-18210-1-git-send-email-dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
` (3 preceding siblings ...)
2013-12-20 10:05 ` [PATCH v4 4/4] Passing efi related data via setup_data Dave Young
@ 2013-12-20 17:58 ` Toshi Kani
2014-01-21 2:55 ` Dave Young
5 siblings, 0 replies; 12+ messages in thread
From: Toshi Kani @ 2013-12-20 17:58 UTC (permalink / raw)
To: Dave Young
Cc: kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
linux-efi-u79uwXL29TY76Z2rM5mHXA, x86-DgEjT+Ai2ygdnm+yROfE0A,
mjg59-1xO5oi07KQx4cg9Nei1l7Q, hpa-YMNOUZJC4hwAvxtiuMwx3w,
James.Bottomley-d9PhHud1JfjCXq6kfMZ53/egYHeGw8Jk,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA, ebiederm-aS9lmoZGLiVWk0Htik3J/w,
horms-/R6kz+dDXgpPR4JQBCEnsQ, bp-Gina5bIWoIWzQB+pC5nmwQ,
greg-U8xfFu+wG4EAvxtiuMwx3w,
matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy
On Fri, 2013-12-20 at 18:05 +0800, Dave Young wrote:
> This patchset is for adding efi runtime support on kexec kernel
> kernel patches see below thread:
> http://thread.gmane.org/gmane.linux.kernel.efi/2491
>
> in kexec-tools, this patchset will do below:
> 1. retrieve efi_info from debugfs boot_params, and fill the
> x86 setup header
>
> 2. collect data efi runtime needed:
> /sys/firmware/efi/systab: fw_vendor, runtime, config_tables and smbios
> /sys/firmware/efi/efi-runtime-map/*, the phys-virt mappings in 1st kernel
>
> 3. assemble setup_data based on data get in 2) then pass it to 2nd kernel
>
> changelog v3->v4:
> update efi_info memmap to the saved runtime map instead of use 1st kernel
> untouched memmap.
>
> Tested on OVMF, dell laptop, lenovo laptop and HP workstation
>
> Dave Young (4):
> build fix: include x86-linux.h in x86-linux-setup.h
> Add function get_bootparam
> Add efi_info in x86 setup header
> Passing efi related data via setup_data
>
> include/x86/x86-linux.h | 3 +-
> kexec/arch/i386/crashdump-x86.c | 4 +-
> kexec/arch/i386/x86-linux-setup.c | 246 ++++++++++++++++++++++++++++++++++--
> kexec/arch/i386/x86-linux-setup.h | 2 +
> kexec/arch/x86_64/kexec-bzImage64.c | 6 +
> 5 files changed, 248 insertions(+), 13 deletions(-)
>
Tested on an HP 60-way UEFI platform. For the series:
Tested-by: Toshi Kani <toshi.kani-VXdhtT5mjnY@public.gmane.org>
Thanks,
-Toshi
^ permalink raw reply [flat|nested] 12+ messages in thread
* [PATCH v4 4/4 update] Passing efi related data via setup_data
[not found] ` <1387533947-18210-5-git-send-email-dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
@ 2013-12-30 7:16 ` Dave Young
[not found] ` <20131230071656.GB3827-je1gSBvt1TcFLmT5oZ11vB/sF2h8X+2i0E9HWUfgJXw@public.gmane.org>
0 siblings, 1 reply; 12+ messages in thread
From: Dave Young @ 2013-12-30 7:16 UTC (permalink / raw)
To: kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
Cc: mjg59-1xO5oi07KQx4cg9Nei1l7Q, linux-efi-u79uwXL29TY76Z2rM5mHXA,
toshi.kani-VXdhtT5mjnY, matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy,
greg-U8xfFu+wG4EAvxtiuMwx3w, x86-DgEjT+Ai2ygdnm+yROfE0A,
James.Bottomley-d9PhHud1JfjCXq6kfMZ53/egYHeGw8Jk,
horms-/R6kz+dDXgpPR4JQBCEnsQ, bp-Gina5bIWoIWzQB+pC5nmwQ,
ebiederm-aS9lmoZGLiVWk0Htik3J/w, hpa-YMNOUZJC4hwAvxtiuMwx3w,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA
For supporting efi runtime, several efi physical addresses
fw_vendor, runtime, config tables, smbios and the whole runtime
mapping info need to be used in kexec kernel. Thus introduce
setup_data struct for passing these data.
collect the varialbes from /sys/firmware/efi/systab and
/sys/firmware/efi/runtime-map
Tested on qemu+ovmf, dell laptop, lenovo laptop and HP workstation.
v1->v2:
HPA: use uint*_t instead of __uint*_t
Simon: indention fix; fix a memory leak
move offset change update to previous patch in setup header
only passing setup_data when the bzImage support efi boot
Vivek: export a value in bzImage probe so it can be used
to check if we should pass acpi_rsdp.
coding style
v2->v3:
code cleanup
bail out if efi mm desc_version != 1
bhe: define macro for SETUP_EFI
break loop if find matched string in systab.
v3->v4:
update memmap in efi_info to the saved runtime map
So kernel side can iterate them as normal boot.
v4->v5:
simplify function get_efi_value(), add error handling
realloc error handling
move map[0] out of efi_setup_data since memmap addr is set in efi_info
Signed-off-by: Dave Young <dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
---
kexec/arch/i386/x86-linux-setup.c | 218 +++++++++++++++++++++++++++++++++++++-
1 file changed, 215 insertions(+), 3 deletions(-)
diff --git a/kexec/arch/i386/x86-linux-setup.c b/kexec/arch/i386/x86-linux-setup.c
index 38bd9dd..5884f4d 100644
--- a/kexec/arch/i386/x86-linux-setup.c
+++ b/kexec/arch/i386/x86-linux-setup.c
@@ -36,6 +36,8 @@
#include "x86-linux-setup.h"
#include "../../kexec/kexec-syscall.h"
+#define SETUP_EFI 4
+
void init_linux_parameters(struct x86_linux_param_header *real_mode)
{
/* Fill in the values that are usually provided by the kernel. */
@@ -480,11 +482,221 @@ void setup_subarch(struct x86_linux_param_header *real_mode)
get_bootparam(&real_mode->hardware_subarch, offset, sizeof(uint32_t));
}
-static void setup_efi_info(struct x86_linux_param_header *real_mode)
+struct efi_mem_descriptor {
+ uint32_t type;
+ uint32_t pad;
+ uint64_t phys_addr;
+ uint64_t virt_addr;
+ uint64_t num_pages;
+ uint64_t attribute;
+};
+
+struct efi_setup_data {
+ uint64_t fw_vendor;
+ uint64_t runtime;
+ uint64_t tables;
+ uint64_t smbios;
+ uint64_t reserved[8];
+};
+
+struct setup_data {
+ uint64_t next;
+ uint32_t type;
+ uint32_t len;
+ uint8_t data[0];
+} __attribute__((packed));
+
+static int get_efi_value(const char *filename,
+ const char *pattern, uint64_t *val)
+{
+ FILE *fp;
+ char line[1024], *s, *end;
+
+ fp = fopen(filename, "r");
+ if (!fp)
+ return 1;
+
+ while (fgets(line, sizeof(line), fp) != 0) {
+ s = strstr(line, pattern);
+ if (!s)
+ continue;
+ *val = strtoull(s + strlen(pattern), &end, 16);
+ if (*val == ULLONG_MAX) {
+ fclose(fp);
+ return 2;
+ }
+ break;
+ }
+
+ fclose(fp);
+ return 0;
+}
+
+static int get_efi_values(struct efi_setup_data *esd)
+{
+ int ret = 0;
+
+ ret = get_efi_value("/sys/firmware/efi/systab", "SMBIOS=0x",
+ &esd->smbios);
+ ret |= get_efi_value("/sys/firmware/efi/fw_vendor", "0x",
+ &esd->fw_vendor);
+ ret |= get_efi_value("/sys/firmware/efi/runtime", "0x",
+ &esd->runtime);
+ ret |= get_efi_value("/sys/firmware/efi/config_table", "0x",
+ &esd->tables);
+ return ret;
+}
+
+static int get_efi_runtime_map(struct efi_mem_descriptor **map)
+{
+ DIR *dirp;
+ struct dirent *entry;
+ char filename[1024];
+ struct efi_mem_descriptor md, *p = NULL;
+ int nr_maps = 0;
+
+ dirp = opendir("/sys/firmware/efi/runtime-map");
+ if (!dirp)
+ return 0;
+ while ((entry = readdir(dirp)) != NULL) {
+ sprintf(filename,
+ "/sys/firmware/efi/runtime-map/%s",
+ (char *)entry->d_name);
+ if (*entry->d_name == '.')
+ continue;
+ file_scanf(filename, "type", "0x%x", (unsigned int *)&md.type);
+ file_scanf(filename, "phys_addr", "0x%llx",
+ (unsigned long long *)&md.phys_addr);
+ file_scanf(filename, "virt_addr", "0x%llx",
+ (unsigned long long *)&md.virt_addr);
+ file_scanf(filename, "num_pages", "0x%llx",
+ (unsigned long long *)&md.num_pages);
+ file_scanf(filename, "attribute", "0x%llx",
+ (unsigned long long *)&md.attribute);
+ p = realloc(p, (nr_maps + 1) * sizeof(md));
+ if (!p)
+ goto err_out;
+
+ *(p + nr_maps) = md;
+ *map = p;
+ nr_maps++;
+ }
+
+ closedir(dirp);
+ return nr_maps;
+err_out:
+ if (map)
+ free(map);
+ closedir(dirp);
+ return 0;
+}
+
+struct efi_info {
+ uint32_t efi_loader_signature;
+ uint32_t efi_systab;
+ uint32_t efi_memdesc_size;
+ uint32_t efi_memdesc_version;
+ uint32_t efi_memmap;
+ uint32_t efi_memmap_size;
+ uint32_t efi_systab_hi;
+ uint32_t efi_memmap_hi;
+};
+
+/*
+ * setup_efi_data will collect below data and pass them to 2nd kernel.
+ * 1) SMBIOS, fw_vendor, runtime, config_table, they are passed via x86
+ * setup_data.
+ * 2) runtime memory regions, set the memmap related fields in efi_info.
+ */
+static int setup_efi_data(struct kexec_info *info,
+ struct x86_linux_param_header *real_mode)
+{
+ int64_t setup_data_paddr, memmap_paddr;
+ struct setup_data *sd;
+ struct efi_setup_data *esd;
+ struct efi_mem_descriptor *maps;
+ int nr_maps, size, sdsize, ret = 0;
+ struct efi_info *ei = (struct efi_info *)real_mode->efi_info;
+
+ ret = access("/sys/firmware/efi/systab", F_OK);
+ if (ret < 0)
+ goto out;
+
+ esd = malloc(sizeof(struct efi_setup_data));
+ if (!esd) {
+ ret = 1;
+ goto out;
+ }
+ memset(esd, 0, sizeof(struct efi_setup_data));
+ ret = get_efi_values(esd);
+ if (ret)
+ goto free_esd;
+ nr_maps = get_efi_runtime_map(&maps);
+ if (!nr_maps) {
+ ret = 2;
+ goto free_esd;
+ }
+ sd = malloc(sizeof(struct setup_data) + sizeof(*esd));
+ if (!sd) {
+ ret = 3;
+ goto free_maps;
+ }
+
+ memset(sd, 0, sizeof(struct setup_data) + sizeof(*esd));
+ sd->next = 0;
+ sd->type = SETUP_EFI;
+ sd->len = sizeof(*esd);
+ memcpy(sd->data, esd, sizeof(*esd));
+ free(esd);
+ sdsize = sd->len + sizeof(struct setup_data);
+ setup_data_paddr = add_buffer(info, sd, sdsize, sdsize, getpagesize(),
+ 0x100000, ULONG_MAX, INT_MAX);
+ real_mode->setup_data = setup_data_paddr;
+
+ size = nr_maps * sizeof(struct efi_mem_descriptor);
+ memmap_paddr = add_buffer(info, maps, size, size, getpagesize(),
+ 0x100000, ULONG_MAX, INT_MAX);
+ ei->efi_memmap = memmap_paddr;
+ ei->efi_memmap_size = size;
+ ei->efi_memdesc_size = sizeof(struct efi_mem_descriptor);
+
+ return 0;
+free_maps:
+ free(maps);
+free_esd:
+ free(esd);
+out:
+ return ret;
+}
+
+static int
+get_efi_mem_desc_version(struct x86_linux_param_header *real_mode)
+{
+ struct efi_info *ei = (struct efi_info *)real_mode->efi_info;
+
+ return ei->efi_memdesc_version;
+}
+
+static void setup_efi_info(struct kexec_info *info,
+ struct x86_linux_param_header *real_mode)
{
+ int ret, desc_version;
off_t offset = offsetof(typeof(*real_mode), efi_info);
- get_bootparam(&real_mode->efi_info, offset, 32);
+ ret = get_bootparam(&real_mode->efi_info, offset, 32);
+ if (ret)
+ return;
+ desc_version = get_efi_mem_desc_version(real_mode);
+ if (desc_version != 1) {
+ fprintf(stderr,
+ "efi memory descriptor version %d is not supported!\n",
+ desc_version);
+ memset(&real_mode->efi_info, 0, 32);
+ return;
+ }
+ ret = setup_efi_data(info, real_mode);
+ if (ret)
+ memset(&real_mode->efi_info, 0, 32);
}
void setup_linux_system_parameters(struct kexec_info *info,
@@ -497,7 +709,7 @@ void setup_linux_system_parameters(struct kexec_info *info,
/* get subarch from running kernel */
setup_subarch(real_mode);
if (bzImage_support_efi_boot)
- setup_efi_info(real_mode);
+ setup_efi_info(info, real_mode);
/* Default screen size */
real_mode->orig_x = 0;
--
1.8.3.1
^ permalink raw reply related [flat|nested] 12+ messages in thread
* Re: [PATCH v4 4/4 update] Passing efi related data via setup_data
[not found] ` <20131230071656.GB3827-je1gSBvt1TcFLmT5oZ11vB/sF2h8X+2i0E9HWUfgJXw@public.gmane.org>
@ 2014-01-06 21:58 ` Toshi Kani
0 siblings, 0 replies; 12+ messages in thread
From: Toshi Kani @ 2014-01-06 21:58 UTC (permalink / raw)
To: Dave Young
Cc: kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
mjg59-1xO5oi07KQx4cg9Nei1l7Q, linux-efi-u79uwXL29TY76Z2rM5mHXA,
matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy,
greg-U8xfFu+wG4EAvxtiuMwx3w, x86-DgEjT+Ai2ygdnm+yROfE0A,
James.Bottomley-d9PhHud1JfjCXq6kfMZ53/egYHeGw8Jk,
horms-/R6kz+dDXgpPR4JQBCEnsQ, bp-Gina5bIWoIWzQB+pC5nmwQ,
ebiederm-aS9lmoZGLiVWk0Htik3J/w, hpa-YMNOUZJC4hwAvxtiuMwx3w,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA
On Mon, 2013-12-30 at 15:16 +0800, Dave Young wrote:
> For supporting efi runtime, several efi physical addresses
> fw_vendor, runtime, config tables, smbios and the whole runtime
> mapping info need to be used in kexec kernel. Thus introduce
> setup_data struct for passing these data.
>
> collect the varialbes from /sys/firmware/efi/systab and
> /sys/firmware/efi/runtime-map
>
> Tested on qemu+ovmf, dell laptop, lenovo laptop and HP workstation.
>
> v1->v2:
> HPA: use uint*_t instead of __uint*_t
> Simon: indention fix; fix a memory leak
> move offset change update to previous patch in setup header
> only passing setup_data when the bzImage support efi boot
> Vivek: export a value in bzImage probe so it can be used
> to check if we should pass acpi_rsdp.
> coding style
>
> v2->v3:
> code cleanup
> bail out if efi mm desc_version != 1
> bhe: define macro for SETUP_EFI
> break loop if find matched string in systab.
>
> v3->v4:
> update memmap in efi_info to the saved runtime map
> So kernel side can iterate them as normal boot.
>
> v4->v5:
> simplify function get_efi_value(), add error handling
> realloc error handling
> move map[0] out of efi_setup_data since memmap addr is set in efi_info
>
> Signed-off-by: Dave Young <dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
Tested-by: Toshi Kani <toshi.kani-VXdhtT5mjnY@public.gmane.org>
Thanks,
Toshi
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 0/4] kexec-tools: efi runtime support on kexec kernel
[not found] ` <1387533947-18210-1-git-send-email-dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
` (4 preceding siblings ...)
2013-12-20 17:58 ` [PATCH v4 0/4] kexec-tools: efi runtime support on kexec kernel Toshi Kani
@ 2014-01-21 2:55 ` Dave Young
[not found] ` <20140121025536.GA5544-je1gSBvt1TcFLmT5oZ11vB/sF2h8X+2i0E9HWUfgJXw@public.gmane.org>
5 siblings, 1 reply; 12+ messages in thread
From: Dave Young @ 2014-01-21 2:55 UTC (permalink / raw)
To: horms-/R6kz+dDXgpPR4JQBCEnsQ,
kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r
Cc: mjg59-1xO5oi07KQx4cg9Nei1l7Q, linux-efi-u79uwXL29TY76Z2rM5mHXA,
toshi.kani-VXdhtT5mjnY, matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy,
greg-U8xfFu+wG4EAvxtiuMwx3w, x86-DgEjT+Ai2ygdnm+yROfE0A,
ebiederm-aS9lmoZGLiVWk0Htik3J/w, hpa-YMNOUZJC4hwAvxtiuMwx3w,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA
Hi, Simon
The kernel patches has been merged into Linus tree, could you take a look
at these kexec-tools patches and merge them if there's no more comments?
Patch 4/4 was resended in a reply to original 4/4, the subject is:
[PATCH v4 4/4 update] Passing efi related data via setup_data
These patches has been tested by Toshi Kani <toshi.kani-VXdhtT5mjnY@public.gmane.org>
If you need I resend them please let me know.
Thanks
Dave
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 0/4] kexec-tools: efi runtime support on kexec kernel
[not found] ` <20140121025536.GA5544-je1gSBvt1TcFLmT5oZ11vB/sF2h8X+2i0E9HWUfgJXw@public.gmane.org>
@ 2014-01-21 5:07 ` Simon Horman
[not found] ` <20140121050729.GA5152-/R6kz+dDXgpPR4JQBCEnsQ@public.gmane.org>
0 siblings, 1 reply; 12+ messages in thread
From: Simon Horman @ 2014-01-21 5:07 UTC (permalink / raw)
To: Dave Young
Cc: kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
mjg59-1xO5oi07KQx4cg9Nei1l7Q, linux-efi-u79uwXL29TY76Z2rM5mHXA,
toshi.kani-VXdhtT5mjnY, matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy,
greg-U8xfFu+wG4EAvxtiuMwx3w, x86-DgEjT+Ai2ygdnm+yROfE0A,
ebiederm-aS9lmoZGLiVWk0Htik3J/w, hpa-YMNOUZJC4hwAvxtiuMwx3w,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA
On Tue, Jan 21, 2014 at 10:55:36AM +0800, Dave Young wrote:
> Hi, Simon
>
> The kernel patches has been merged into Linus tree, could you take a look
> at these kexec-tools patches and merge them if there's no more comments?
>
> Patch 4/4 was resended in a reply to original 4/4, the subject is:
> [PATCH v4 4/4 update] Passing efi related data via setup_data
> These patches has been tested by Toshi Kani <toshi.kani-VXdhtT5mjnY@public.gmane.org>
>
> If you need I resend them please let me know.
Thanks Dave,
I have applied the four patches.
Please double check to make sure that I got the correct version
of each patch.
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 0/4] kexec-tools: efi runtime support on kexec kernel
[not found] ` <20140121050729.GA5152-/R6kz+dDXgpPR4JQBCEnsQ@public.gmane.org>
@ 2014-01-21 6:13 ` Dave Young
[not found] ` <20140121061314.GC5890-je1gSBvt1TcFLmT5oZ11vB/sF2h8X+2i0E9HWUfgJXw@public.gmane.org>
0 siblings, 1 reply; 12+ messages in thread
From: Dave Young @ 2014-01-21 6:13 UTC (permalink / raw)
To: Simon Horman
Cc: mjg59-1xO5oi07KQx4cg9Nei1l7Q, linux-efi-u79uwXL29TY76Z2rM5mHXA,
toshi.kani-VXdhtT5mjnY, matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy,
greg-U8xfFu+wG4EAvxtiuMwx3w, x86-DgEjT+Ai2ygdnm+yROfE0A,
kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
ebiederm-aS9lmoZGLiVWk0Htik3J/w, hpa-YMNOUZJC4hwAvxtiuMwx3w,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA
On 01/21/14 at 02:07pm, Simon Horman wrote:
> On Tue, Jan 21, 2014 at 10:55:36AM +0800, Dave Young wrote:
> > Hi, Simon
> >
> > The kernel patches has been merged into Linus tree, could you take a look
> > at these kexec-tools patches and merge them if there's no more comments?
> >
> > Patch 4/4 was resended in a reply to original 4/4, the subject is:
> > [PATCH v4 4/4 update] Passing efi related data via setup_data
> > These patches has been tested by Toshi Kani <toshi.kani-VXdhtT5mjnY@public.gmane.org>
> >
> > If you need I resend them please let me know.
>
> Thanks Dave,
>
> I have applied the four patches.
> Please double check to make sure that I got the correct version
> of each patch.
Hi, Simon
Verified the patches and tested with qemu.
Thanks a lot
Dave
^ permalink raw reply [flat|nested] 12+ messages in thread
* Re: [PATCH v4 0/4] kexec-tools: efi runtime support on kexec kernel
[not found] ` <20140121061314.GC5890-je1gSBvt1TcFLmT5oZ11vB/sF2h8X+2i0E9HWUfgJXw@public.gmane.org>
@ 2014-01-21 6:31 ` Simon Horman
0 siblings, 0 replies; 12+ messages in thread
From: Simon Horman @ 2014-01-21 6:31 UTC (permalink / raw)
To: Dave Young
Cc: mjg59-1xO5oi07KQx4cg9Nei1l7Q, linux-efi-u79uwXL29TY76Z2rM5mHXA,
toshi.kani-VXdhtT5mjnY, matt-HNK1S37rvNbeXh+fF434Mdi2O/JbrIOy,
greg-U8xfFu+wG4EAvxtiuMwx3w, x86-DgEjT+Ai2ygdnm+yROfE0A,
kexec-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r,
ebiederm-aS9lmoZGLiVWk0Htik3J/w, hpa-YMNOUZJC4hwAvxtiuMwx3w,
vgoyal-H+wXaHxf7aLQT0dZR+AlfA
On Tue, Jan 21, 2014 at 02:13:14PM +0800, Dave Young wrote:
> On 01/21/14 at 02:07pm, Simon Horman wrote:
> > On Tue, Jan 21, 2014 at 10:55:36AM +0800, Dave Young wrote:
> > > Hi, Simon
> > >
> > > The kernel patches has been merged into Linus tree, could you take a look
> > > at these kexec-tools patches and merge them if there's no more comments?
> > >
> > > Patch 4/4 was resended in a reply to original 4/4, the subject is:
> > > [PATCH v4 4/4 update] Passing efi related data via setup_data
> > > These patches has been tested by Toshi Kani <toshi.kani-VXdhtT5mjnY@public.gmane.org>
> > >
> > > If you need I resend them please let me know.
> >
> > Thanks Dave,
> >
> > I have applied the four patches.
> > Please double check to make sure that I got the correct version
> > of each patch.
>
> Hi, Simon
>
> Verified the patches and tested with qemu.
Great, thanks.
^ permalink raw reply [flat|nested] 12+ messages in thread
end of thread, other threads:[~2014-01-21 6:31 UTC | newest]
Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-12-20 10:05 [PATCH v4 0/4] kexec-tools: efi runtime support on kexec kernel Dave Young
[not found] ` <1387533947-18210-1-git-send-email-dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-12-20 10:05 ` [PATCH v4 1/4] build fix: include x86-linux.h in x86-linux-setup.h Dave Young
2013-12-20 10:05 ` [PATCH v4 2/4] Add function get_bootparam Dave Young
2013-12-20 10:05 ` [PATCH v4 3/4] Add efi_info in x86 setup header Dave Young
2013-12-20 10:05 ` [PATCH v4 4/4] Passing efi related data via setup_data Dave Young
[not found] ` <1387533947-18210-5-git-send-email-dyoung-H+wXaHxf7aLQT0dZR+AlfA@public.gmane.org>
2013-12-30 7:16 ` [PATCH v4 4/4 update] " Dave Young
[not found] ` <20131230071656.GB3827-je1gSBvt1TcFLmT5oZ11vB/sF2h8X+2i0E9HWUfgJXw@public.gmane.org>
2014-01-06 21:58 ` Toshi Kani
2013-12-20 17:58 ` [PATCH v4 0/4] kexec-tools: efi runtime support on kexec kernel Toshi Kani
2014-01-21 2:55 ` Dave Young
[not found] ` <20140121025536.GA5544-je1gSBvt1TcFLmT5oZ11vB/sF2h8X+2i0E9HWUfgJXw@public.gmane.org>
2014-01-21 5:07 ` Simon Horman
[not found] ` <20140121050729.GA5152-/R6kz+dDXgpPR4JQBCEnsQ@public.gmane.org>
2014-01-21 6:13 ` Dave Young
[not found] ` <20140121061314.GC5890-je1gSBvt1TcFLmT5oZ11vB/sF2h8X+2i0E9HWUfgJXw@public.gmane.org>
2014-01-21 6:31 ` Simon Horman
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).