From: "Huang, Ying" <ying.huang@intel.com>
To: Pavel Machek <pavel@ucw.cz>
Cc: david@lang.hm, nigel@nigel.suspend2.net,
Kexec Mailing List <kexec@lists.infradead.org>,
linux-kernel@vger.kernel.org,
"Eric W. Biederman" <ebiederm@xmission.com>,
Andrew Morton <akpm@linux-foundation.org>,
linux-pm@lists.linux-foundation.org,
Jeremy Maitin-Shepard <jbms@cmu.edu>
Subject: Re: [linux-pm] Re: [PATH 1/1] Kexec jump - v2 - kexec jump
Date: Fri, 17 Aug 2007 14:15:49 +0800 [thread overview]
Message-ID: <1187331349.28497.9.camel@caritas-dev.intel.com> (raw)
In-Reply-To: <20070816102635.GA2039@elf.ucw.cz>
Hi, Pavel,
On Thu, 2007-08-16 at 12:26 +0200, Pavel Machek wrote:
> Ping... is there some next version?
>
> I'm stuck at the tools side currently. kexec-1.101 just won't load the
> kernel properly, and kexec-testing from git does not know -j option. I
> tried hand-patching it, but got lots of scary rejects.
>
> Is there chance for a patch against kexec-testing?
I have some other work to do recently. So the next version will delay
for some while. :(
But now, I have a patch against kexec-tools-testing.
Best Regards,
Huang Ying
Index: kexec-tools/kexec/arch/i386/crashdump-x86.c
===================================================================
--- kexec-tools.orig/kexec/arch/i386/crashdump-x86.c 2007-08-17 13:48:51.000000000 +0800
+++ kexec-tools/kexec/arch/i386/crashdump-x86.c 2007-08-17 13:49:50.000000000 +0800
@@ -428,6 +428,29 @@
return 0;
}
+/* Adds the kexec_backup= command line parameter to command line. */
+static int cmdline_add_backup(char *cmdline, unsigned long addr)
+{
+ int cmdlen, len, align = 1024;
+ char str[30], *ptr;
+
+ /* Passing in kexec_backup=xxxK format. Saves space required
+ * in cmdline. Ensure 1K alignment*/
+ if (addr%align)
+ return -1;
+ addr = addr/align;
+ ptr = str;
+ strcpy(str, " kexec_backup=");
+ ptr += strlen(str);
+ ultoa(addr, ptr);
+ strcat(str, "K");
+ len = strlen(str);
+ cmdlen = strlen(cmdline) + len;
+ if (cmdlen > (COMMAND_LINE_SIZE - 1))
+ die("Command line overflow\n");
+ strcat(cmdline, str);
+ return 0;
+}
/*
* This routine is specific to i386 architecture to maintain the
@@ -575,6 +598,7 @@
return -1;
cmdline_add_memmap(mod_cmdline, memmap_p);
cmdline_add_elfcorehdr(mod_cmdline, elfcorehdr);
+ cmdline_add_backup(mod_cmdline, info->backup_start);
return 0;
}
Index: kexec-tools/kexec/kexec-syscall.h
===================================================================
--- kexec-tools.orig/kexec/kexec-syscall.h 2007-08-17 13:48:51.000000000 +0800
+++ kexec-tools/kexec/kexec-syscall.h 2007-08-17 13:49:50.000000000 +0800
@@ -21,6 +21,7 @@
#define LINUX_REBOOT_CMD_KEXEC_OLD 0x81726354
#define LINUX_REBOOT_CMD_KEXEC_OLD2 0x18263645
#define LINUX_REBOOT_CMD_KEXEC 0x45584543
+#define LINUX_REBOOT_CMD_KJUMP 0x3928A5FD
#ifdef __i386__
#define __NR_kexec_load 283
@@ -63,6 +64,10 @@
return (long) syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_KEXEC, 0);
}
+static inline long kexec_jump(void)
+{
+ return (long) syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_KJUMP, 0);
+}
#define KEXEC_ON_CRASH 0x00000001
#define KEXEC_ARCH_MASK 0xffff0000
Index: kexec-tools/kexec/kexec.c
===================================================================
--- kexec-tools.orig/kexec/kexec.c 2007-08-17 13:48:51.000000000 +0800
+++ kexec-tools/kexec/kexec.c 2007-08-17 13:49:50.000000000 +0800
@@ -716,6 +716,17 @@
return -1;
}
+/*
+ * Jump to the new kernel
+ */
+static int my_jump(void)
+{
+ int result;
+
+ result = kexec_jump();
+ return result;
+}
+
static void version(void)
{
printf(PACKAGE " " VERSION " released " RELEASE_DATE "\n");
@@ -743,6 +754,7 @@
" If capture kernel is being unloaded\n"
" specify -p with -u.\n"
" -e, --exec Execute a currently loaded kernel.\n"
+ " -j, --jump Jump to a currently loaded kernel or jump back to the previous kernel.\n"
" -t, --type=TYPE Specify the new kernel is of this type.\n"
" --mem-min=<addr> Specify the lowest memory address to\n"
" load code into.\n"
@@ -803,6 +815,7 @@
{
int do_load = 1;
int do_exec = 0;
+ int do_jump = 0;
int do_shutdown = 1;
int do_sync = 1;
int do_ifdown = 0;
@@ -858,6 +871,14 @@
do_ifdown = 1;
do_exec = 1;
break;
+ case OPT_JUMP:
+ do_load = 0;
+ do_shutdown = 0;
+ do_sync = 1;
+ do_ifdown = 0;
+ do_exec = 0;
+ do_jump = 1;
+ break;
case OPT_TYPE:
type = optarg;
break;
@@ -949,6 +970,9 @@
if ((result == 0) && do_exec) {
result = my_exec();
}
+ if ((result == 0) && do_jump) {
+ result = my_jump();
+ }
fflush(stdout);
fflush(stderr);
Index: kexec-tools/kexec/kexec.h
===================================================================
--- kexec-tools.orig/kexec/kexec.h 2007-08-17 13:48:51.000000000 +0800
+++ kexec-tools/kexec/kexec.h 2007-08-17 13:49:50.000000000 +0800
@@ -156,6 +156,7 @@
#define OPT_FORCE 'f'
#define OPT_NOIFDOWN 'x'
#define OPT_EXEC 'e'
+#define OPT_JUMP 'j'
#define OPT_LOAD 'l'
#define OPT_UNLOAD 'u'
#define OPT_TYPE 't'
@@ -172,13 +173,14 @@
{ "load", 0, 0, OPT_LOAD }, \
{ "unload", 0, 0, OPT_UNLOAD }, \
{ "exec", 0, 0, OPT_EXEC }, \
+ { "jump", 0, 0, OPT_JUMP }, \
{ "type", 1, 0, OPT_TYPE }, \
{ "load-panic", 0, 0, OPT_PANIC }, \
{ "mem-min", 1, 0, OPT_MEM_MIN }, \
{ "mem-max", 1, 0, OPT_MEM_MAX }, \
{ "reuseinitrd", 0, 0, OPT_REUSE_INITRD }, \
-#define KEXEC_OPT_STR "hvdfxluet:p"
+#define KEXEC_OPT_STR "hvdfxluejt:p"
extern void die(char *fmt, ...);
extern void *xmalloc(size_t size);
_______________________________________________
kexec mailing list
kexec@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/kexec
WARNING: multiple messages have this Message-ID (diff)
From: "Huang, Ying" <ying.huang@intel.com>
To: Pavel Machek <pavel@ucw.cz>
Cc: david@lang.hm, nigel@nigel.suspend2.net,
Kexec Mailing List <kexec@lists.infradead.org>,
linux-kernel@vger.kernel.org,
"Eric W. Biederman" <ebiederm@xmission.com>,
Andrew Morton <akpm@linux-foundation.org>,
linux-pm@lists.linux-foundation.org,
Jeremy Maitin-Shepard <jbms@cmu.edu>
Subject: Re: [linux-pm] Re: [PATH 1/1] Kexec jump - v2 - kexec jump
Date: Fri, 17 Aug 2007 14:15:49 +0800 [thread overview]
Message-ID: <1187331349.28497.9.camel@caritas-dev.intel.com> (raw)
In-Reply-To: <20070816102635.GA2039@elf.ucw.cz>
Hi, Pavel,
On Thu, 2007-08-16 at 12:26 +0200, Pavel Machek wrote:
> Ping... is there some next version?
>
> I'm stuck at the tools side currently. kexec-1.101 just won't load the
> kernel properly, and kexec-testing from git does not know -j option. I
> tried hand-patching it, but got lots of scary rejects.
>
> Is there chance for a patch against kexec-testing?
I have some other work to do recently. So the next version will delay
for some while. :(
But now, I have a patch against kexec-tools-testing.
Best Regards,
Huang Ying
Index: kexec-tools/kexec/arch/i386/crashdump-x86.c
===================================================================
--- kexec-tools.orig/kexec/arch/i386/crashdump-x86.c 2007-08-17 13:48:51.000000000 +0800
+++ kexec-tools/kexec/arch/i386/crashdump-x86.c 2007-08-17 13:49:50.000000000 +0800
@@ -428,6 +428,29 @@
return 0;
}
+/* Adds the kexec_backup= command line parameter to command line. */
+static int cmdline_add_backup(char *cmdline, unsigned long addr)
+{
+ int cmdlen, len, align = 1024;
+ char str[30], *ptr;
+
+ /* Passing in kexec_backup=xxxK format. Saves space required
+ * in cmdline. Ensure 1K alignment*/
+ if (addr%align)
+ return -1;
+ addr = addr/align;
+ ptr = str;
+ strcpy(str, " kexec_backup=");
+ ptr += strlen(str);
+ ultoa(addr, ptr);
+ strcat(str, "K");
+ len = strlen(str);
+ cmdlen = strlen(cmdline) + len;
+ if (cmdlen > (COMMAND_LINE_SIZE - 1))
+ die("Command line overflow\n");
+ strcat(cmdline, str);
+ return 0;
+}
/*
* This routine is specific to i386 architecture to maintain the
@@ -575,6 +598,7 @@
return -1;
cmdline_add_memmap(mod_cmdline, memmap_p);
cmdline_add_elfcorehdr(mod_cmdline, elfcorehdr);
+ cmdline_add_backup(mod_cmdline, info->backup_start);
return 0;
}
Index: kexec-tools/kexec/kexec-syscall.h
===================================================================
--- kexec-tools.orig/kexec/kexec-syscall.h 2007-08-17 13:48:51.000000000 +0800
+++ kexec-tools/kexec/kexec-syscall.h 2007-08-17 13:49:50.000000000 +0800
@@ -21,6 +21,7 @@
#define LINUX_REBOOT_CMD_KEXEC_OLD 0x81726354
#define LINUX_REBOOT_CMD_KEXEC_OLD2 0x18263645
#define LINUX_REBOOT_CMD_KEXEC 0x45584543
+#define LINUX_REBOOT_CMD_KJUMP 0x3928A5FD
#ifdef __i386__
#define __NR_kexec_load 283
@@ -63,6 +64,10 @@
return (long) syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_KEXEC, 0);
}
+static inline long kexec_jump(void)
+{
+ return (long) syscall(__NR_reboot, LINUX_REBOOT_MAGIC1, LINUX_REBOOT_MAGIC2, LINUX_REBOOT_CMD_KJUMP, 0);
+}
#define KEXEC_ON_CRASH 0x00000001
#define KEXEC_ARCH_MASK 0xffff0000
Index: kexec-tools/kexec/kexec.c
===================================================================
--- kexec-tools.orig/kexec/kexec.c 2007-08-17 13:48:51.000000000 +0800
+++ kexec-tools/kexec/kexec.c 2007-08-17 13:49:50.000000000 +0800
@@ -716,6 +716,17 @@
return -1;
}
+/*
+ * Jump to the new kernel
+ */
+static int my_jump(void)
+{
+ int result;
+
+ result = kexec_jump();
+ return result;
+}
+
static void version(void)
{
printf(PACKAGE " " VERSION " released " RELEASE_DATE "\n");
@@ -743,6 +754,7 @@
" If capture kernel is being unloaded\n"
" specify -p with -u.\n"
" -e, --exec Execute a currently loaded kernel.\n"
+ " -j, --jump Jump to a currently loaded kernel or jump back to the previous kernel.\n"
" -t, --type=TYPE Specify the new kernel is of this type.\n"
" --mem-min=<addr> Specify the lowest memory address to\n"
" load code into.\n"
@@ -803,6 +815,7 @@
{
int do_load = 1;
int do_exec = 0;
+ int do_jump = 0;
int do_shutdown = 1;
int do_sync = 1;
int do_ifdown = 0;
@@ -858,6 +871,14 @@
do_ifdown = 1;
do_exec = 1;
break;
+ case OPT_JUMP:
+ do_load = 0;
+ do_shutdown = 0;
+ do_sync = 1;
+ do_ifdown = 0;
+ do_exec = 0;
+ do_jump = 1;
+ break;
case OPT_TYPE:
type = optarg;
break;
@@ -949,6 +970,9 @@
if ((result == 0) && do_exec) {
result = my_exec();
}
+ if ((result == 0) && do_jump) {
+ result = my_jump();
+ }
fflush(stdout);
fflush(stderr);
Index: kexec-tools/kexec/kexec.h
===================================================================
--- kexec-tools.orig/kexec/kexec.h 2007-08-17 13:48:51.000000000 +0800
+++ kexec-tools/kexec/kexec.h 2007-08-17 13:49:50.000000000 +0800
@@ -156,6 +156,7 @@
#define OPT_FORCE 'f'
#define OPT_NOIFDOWN 'x'
#define OPT_EXEC 'e'
+#define OPT_JUMP 'j'
#define OPT_LOAD 'l'
#define OPT_UNLOAD 'u'
#define OPT_TYPE 't'
@@ -172,13 +173,14 @@
{ "load", 0, 0, OPT_LOAD }, \
{ "unload", 0, 0, OPT_UNLOAD }, \
{ "exec", 0, 0, OPT_EXEC }, \
+ { "jump", 0, 0, OPT_JUMP }, \
{ "type", 1, 0, OPT_TYPE }, \
{ "load-panic", 0, 0, OPT_PANIC }, \
{ "mem-min", 1, 0, OPT_MEM_MIN }, \
{ "mem-max", 1, 0, OPT_MEM_MAX }, \
{ "reuseinitrd", 0, 0, OPT_REUSE_INITRD }, \
-#define KEXEC_OPT_STR "hvdfxluet:p"
+#define KEXEC_OPT_STR "hvdfxluejt:p"
extern void die(char *fmt, ...);
extern void *xmalloc(size_t size);
next prev parent reply other threads:[~2007-08-17 6:15 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-07-15 7:13 [PATH 1/1] Kexec jump - v2 - kexec jump Huang, Ying
2007-07-15 7:13 ` Huang, Ying
2007-07-31 9:51 ` Pavel Machek
2007-07-31 9:51 ` Pavel Machek
2007-07-31 9:51 ` Pavel Machek
2007-08-01 7:56 ` Huang, Ying
2007-08-01 7:56 ` Huang, Ying
2007-08-01 7:56 ` Huang, Ying
2007-08-05 18:50 ` Pavel Machek
2007-08-05 18:50 ` Pavel Machek
2007-08-05 18:50 ` Pavel Machek
2007-08-16 10:26 ` [linux-pm] " Pavel Machek
2007-08-16 10:26 ` Pavel Machek
2007-08-17 6:15 ` Huang, Ying
2007-08-17 6:15 ` Huang, Ying [this message]
2007-08-17 6:15 ` [linux-pm] " Huang, Ying
2007-08-21 10:14 ` Pavel Machek
2007-08-21 10:14 ` Pavel Machek
2007-08-22 6:51 ` Huang, Ying
2007-08-22 6:51 ` Huang, Ying
2007-08-22 6:51 ` Huang, Ying
2007-08-21 10:14 ` Pavel Machek
2007-08-16 10:26 ` Pavel Machek
2007-08-15 18:44 ` Lombard, David N
2007-08-16 10:24 ` Pavel Machek
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=1187331349.28497.9.camel@caritas-dev.intel.com \
--to=ying.huang@intel.com \
--cc=akpm@linux-foundation.org \
--cc=david@lang.hm \
--cc=ebiederm@xmission.com \
--cc=jbms@cmu.edu \
--cc=kexec@lists.infradead.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-pm@lists.linux-foundation.org \
--cc=nigel@nigel.suspend2.net \
--cc=pavel@ucw.cz \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.