linux-efi.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [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).