From: Li Zhengyu <lizhengyu3@huawei.com>
To: <palmer@dabbelt.com>, <liaochang1@huawei.com>
Cc: <alex@ghiti.fr>, <aou@eecs.berkeley.edu>, <bjorn.topel@gmail.com>,
<ebiederm@xmission.com>, <guoren@linux.alibaba.com>,
<jszhang@kernel.org>, <kexec@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <linux-riscv@lists.infradead.org>,
<mick@ics.forth.gr>, <paul.walmsley@sifive.com>,
<penberg@kernel.org>, <sunnanyong@huawei.com>,
<wangkefeng.wang@huawei.com>
Subject: [PATCH v3 -next 0/6] riscv: kexec: add kexec_file_load() support
Date: Fri, 8 Apr 2022 18:09:08 +0800 [thread overview]
Message-ID: <20220408100914.150110-1-lizhengyu3@huawei.com> (raw)
This patchset implement kexec_file_load() support on riscv, Most of the
code is based on the kexec-tool-patch repo developed by Nick Kossifids.
This patch series enables us to load the riscv vmlinux by specifying
its file decriptor, instead of user-filled buffer via kexec_file_load()
syscall.
``
Contrary to kexec_load() system call, we reuse the dt blob of the first
kernel to the 2nd explicitly.
To use kexec_file_load() system call, instead of kexec_load(), at kexec
command, '-s' options must be specified. The patch for kexec_tools has
to be apply to riscv architecture source like this:
int elf_riscv_load(int argc, char **argv, const char *buf, off_t len,
...
if (info->file_mode) {
return prepare_kexec_file_options(info);
}
...
Add following routine to prepare cmdline_ptr, cmdline_len and initrd_fd
for syscall kexec_file_load:
int prepare_kexec_file_options(struct kexec_info *info)
{
int fd;
ssize_t result;
struct stat stats;
if (arch_options.cmdline) {
info->command_line = (char *)arch_options.cmdline;
info->command_line_len = strlen(info->command_line) + 1;
}
if (!arch_options.initrd_path) {
info->initrd_fd = -1;
return 0;
}
fd = open(arch_options.initrd_path, O_RDONLY | _O_BINARY);
if (fd < 0) {
fprintf(stderr, "Cannot open `%s': %s\n", arch_options.initrd_path,
strerror(errno));
return -EINVAL;
}
result = fstat(fd, &stats);
if (result < 0) {
close(fd);
fprintf(stderr, "Cannot stat: %s: %s\n", arch_options.initrd_path,
strerror(errno));
return -EINVAL;
}
info->initrd_fd = fd;
return 0;
}
The basic usage of kexec_file is:
1) Reload capture kernel image:
$ kexec -s -l <riscv-vmlinux> --reuse-cmdline
2) Startup capture kernel:
$ kexec -e
For kdump:
1) Reload capture kernel image:
$ kexec -s -p <riscv-vmlinux> --reuse-cmdline
2) Do something to crash, like:
$ echo c > /proc/sysrq-trigger
v3:
* Rebase on v5.18-rc1
* Workaround for -Wmissing-prototypes
v2:
* Support kdump
* Support purgatory
* Minor cleanups
Li Zhengyu (3):
RISC-V: Support for kexec_file on panic
RISC-V: Add purgatory
RISC-V: Load purgatory in kexec_file
Liao Chang (3):
kexec_file: Fix kexec_file.c build error for riscv platform
RISC-V: use memcpy for kexec_file mode
RISC-V: Add kexec_file support
arch/riscv/Kbuild | 2 +
arch/riscv/Kconfig | 17 +
arch/riscv/include/asm/kexec.h | 4 +
arch/riscv/kernel/Makefile | 1 +
arch/riscv/kernel/elf_kexec.c | 448 +++++++++++++++++++++++++
arch/riscv/kernel/machine_kexec.c | 4 +-
arch/riscv/kernel/machine_kexec_file.c | 14 +
arch/riscv/purgatory/.gitignore | 4 +
arch/riscv/purgatory/Makefile | 95 ++++++
arch/riscv/purgatory/entry.S | 47 +++
arch/riscv/purgatory/purgatory.c | 45 +++
include/linux/kexec.h | 2 +-
kernel/kexec_file.c | 4 +-
13 files changed, 683 insertions(+), 4 deletions(-)
create mode 100644 arch/riscv/kernel/elf_kexec.c
create mode 100644 arch/riscv/kernel/machine_kexec_file.c
create mode 100644 arch/riscv/purgatory/.gitignore
create mode 100644 arch/riscv/purgatory/Makefile
create mode 100644 arch/riscv/purgatory/entry.S
create mode 100644 arch/riscv/purgatory/purgatory.c
--
2.17.1
WARNING: multiple messages have this Message-ID (diff)
From: Li Zhengyu <lizhengyu3@huawei.com>
To: <palmer@dabbelt.com>, <liaochang1@huawei.com>
Cc: <alex@ghiti.fr>, <aou@eecs.berkeley.edu>, <bjorn.topel@gmail.com>,
<ebiederm@xmission.com>, <guoren@linux.alibaba.com>,
<jszhang@kernel.org>, <kexec@lists.infradead.org>,
<linux-kernel@vger.kernel.org>, <linux-riscv@lists.infradead.org>,
<mick@ics.forth.gr>, <paul.walmsley@sifive.com>,
<penberg@kernel.org>, <sunnanyong@huawei.com>,
<wangkefeng.wang@huawei.com>
Subject: [PATCH v3 -next 0/6] riscv: kexec: add kexec_file_load() support
Date: Fri, 8 Apr 2022 18:09:08 +0800 [thread overview]
Message-ID: <20220408100914.150110-1-lizhengyu3@huawei.com> (raw)
This patchset implement kexec_file_load() support on riscv, Most of the
code is based on the kexec-tool-patch repo developed by Nick Kossifids.
This patch series enables us to load the riscv vmlinux by specifying
its file decriptor, instead of user-filled buffer via kexec_file_load()
syscall.
``
Contrary to kexec_load() system call, we reuse the dt blob of the first
kernel to the 2nd explicitly.
To use kexec_file_load() system call, instead of kexec_load(), at kexec
command, '-s' options must be specified. The patch for kexec_tools has
to be apply to riscv architecture source like this:
int elf_riscv_load(int argc, char **argv, const char *buf, off_t len,
...
if (info->file_mode) {
return prepare_kexec_file_options(info);
}
...
Add following routine to prepare cmdline_ptr, cmdline_len and initrd_fd
for syscall kexec_file_load:
int prepare_kexec_file_options(struct kexec_info *info)
{
int fd;
ssize_t result;
struct stat stats;
if (arch_options.cmdline) {
info->command_line = (char *)arch_options.cmdline;
info->command_line_len = strlen(info->command_line) + 1;
}
if (!arch_options.initrd_path) {
info->initrd_fd = -1;
return 0;
}
fd = open(arch_options.initrd_path, O_RDONLY | _O_BINARY);
if (fd < 0) {
fprintf(stderr, "Cannot open `%s': %s\n", arch_options.initrd_path,
strerror(errno));
return -EINVAL;
}
result = fstat(fd, &stats);
if (result < 0) {
close(fd);
fprintf(stderr, "Cannot stat: %s: %s\n", arch_options.initrd_path,
strerror(errno));
return -EINVAL;
}
info->initrd_fd = fd;
return 0;
}
The basic usage of kexec_file is:
1) Reload capture kernel image:
$ kexec -s -l <riscv-vmlinux> --reuse-cmdline
2) Startup capture kernel:
$ kexec -e
For kdump:
1) Reload capture kernel image:
$ kexec -s -p <riscv-vmlinux> --reuse-cmdline
2) Do something to crash, like:
$ echo c > /proc/sysrq-trigger
v3:
* Rebase on v5.18-rc1
* Workaround for -Wmissing-prototypes
v2:
* Support kdump
* Support purgatory
* Minor cleanups
Li Zhengyu (3):
RISC-V: Support for kexec_file on panic
RISC-V: Add purgatory
RISC-V: Load purgatory in kexec_file
Liao Chang (3):
kexec_file: Fix kexec_file.c build error for riscv platform
RISC-V: use memcpy for kexec_file mode
RISC-V: Add kexec_file support
arch/riscv/Kbuild | 2 +
arch/riscv/Kconfig | 17 +
arch/riscv/include/asm/kexec.h | 4 +
arch/riscv/kernel/Makefile | 1 +
arch/riscv/kernel/elf_kexec.c | 448 +++++++++++++++++++++++++
arch/riscv/kernel/machine_kexec.c | 4 +-
arch/riscv/kernel/machine_kexec_file.c | 14 +
arch/riscv/purgatory/.gitignore | 4 +
arch/riscv/purgatory/Makefile | 95 ++++++
arch/riscv/purgatory/entry.S | 47 +++
arch/riscv/purgatory/purgatory.c | 45 +++
include/linux/kexec.h | 2 +-
kernel/kexec_file.c | 4 +-
13 files changed, 683 insertions(+), 4 deletions(-)
create mode 100644 arch/riscv/kernel/elf_kexec.c
create mode 100644 arch/riscv/kernel/machine_kexec_file.c
create mode 100644 arch/riscv/purgatory/.gitignore
create mode 100644 arch/riscv/purgatory/Makefile
create mode 100644 arch/riscv/purgatory/entry.S
create mode 100644 arch/riscv/purgatory/purgatory.c
--
2.17.1
_______________________________________________
linux-riscv mailing list
linux-riscv@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/linux-riscv
WARNING: multiple messages have this Message-ID (diff)
From: Li Zhengyu <lizhengyu3@huawei.com>
To: kexec@lists.infradead.org
Subject: [PATCH v3 -next 0/6] riscv: kexec: add kexec_file_load() support
Date: Fri, 8 Apr 2022 18:09:08 +0800 [thread overview]
Message-ID: <20220408100914.150110-1-lizhengyu3@huawei.com> (raw)
This patchset implement kexec_file_load() support on riscv, Most of the
code is based on the kexec-tool-patch repo developed by Nick Kossifids.
This patch series enables us to load the riscv vmlinux by specifying
its file decriptor, instead of user-filled buffer via kexec_file_load()
syscall.
``
Contrary to kexec_load() system call, we reuse the dt blob of the first
kernel to the 2nd explicitly.
To use kexec_file_load() system call, instead of kexec_load(), at kexec
command, '-s' options must be specified. The patch for kexec_tools has
to be apply to riscv architecture source like this:
int elf_riscv_load(int argc, char **argv, const char *buf, off_t len,
...
if (info->file_mode) {
return prepare_kexec_file_options(info);
}
...
Add following routine to prepare cmdline_ptr, cmdline_len and initrd_fd
for syscall kexec_file_load:
int prepare_kexec_file_options(struct kexec_info *info)
{
int fd;
ssize_t result;
struct stat stats;
if (arch_options.cmdline) {
info->command_line = (char *)arch_options.cmdline;
info->command_line_len = strlen(info->command_line) + 1;
}
if (!arch_options.initrd_path) {
info->initrd_fd = -1;
return 0;
}
fd = open(arch_options.initrd_path, O_RDONLY | _O_BINARY);
if (fd < 0) {
fprintf(stderr, "Cannot open `%s': %s\n", arch_options.initrd_path,
strerror(errno));
return -EINVAL;
}
result = fstat(fd, &stats);
if (result < 0) {
close(fd);
fprintf(stderr, "Cannot stat: %s: %s\n", arch_options.initrd_path,
strerror(errno));
return -EINVAL;
}
info->initrd_fd = fd;
return 0;
}
The basic usage of kexec_file is:
1) Reload capture kernel image:
$ kexec -s -l <riscv-vmlinux> --reuse-cmdline
2) Startup capture kernel:
$ kexec -e
For kdump:
1) Reload capture kernel image:
$ kexec -s -p <riscv-vmlinux> --reuse-cmdline
2) Do something to crash, like:
$ echo c > /proc/sysrq-trigger
v3:
* Rebase on v5.18-rc1
* Workaround for -Wmissing-prototypes
v2:
* Support kdump
* Support purgatory
* Minor cleanups
Li Zhengyu (3):
RISC-V: Support for kexec_file on panic
RISC-V: Add purgatory
RISC-V: Load purgatory in kexec_file
Liao Chang (3):
kexec_file: Fix kexec_file.c build error for riscv platform
RISC-V: use memcpy for kexec_file mode
RISC-V: Add kexec_file support
arch/riscv/Kbuild | 2 +
arch/riscv/Kconfig | 17 +
arch/riscv/include/asm/kexec.h | 4 +
arch/riscv/kernel/Makefile | 1 +
arch/riscv/kernel/elf_kexec.c | 448 +++++++++++++++++++++++++
arch/riscv/kernel/machine_kexec.c | 4 +-
arch/riscv/kernel/machine_kexec_file.c | 14 +
arch/riscv/purgatory/.gitignore | 4 +
arch/riscv/purgatory/Makefile | 95 ++++++
arch/riscv/purgatory/entry.S | 47 +++
arch/riscv/purgatory/purgatory.c | 45 +++
include/linux/kexec.h | 2 +-
kernel/kexec_file.c | 4 +-
13 files changed, 683 insertions(+), 4 deletions(-)
create mode 100644 arch/riscv/kernel/elf_kexec.c
create mode 100644 arch/riscv/kernel/machine_kexec_file.c
create mode 100644 arch/riscv/purgatory/.gitignore
create mode 100644 arch/riscv/purgatory/Makefile
create mode 100644 arch/riscv/purgatory/entry.S
create mode 100644 arch/riscv/purgatory/purgatory.c
--
2.17.1
next reply other threads:[~2022-04-08 10:10 UTC|newest]
Thread overview: 36+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-04-08 10:09 Li Zhengyu [this message]
2022-04-08 10:09 ` [PATCH v3 -next 0/6] riscv: kexec: add kexec_file_load() support Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-04-08 10:09 ` [PATCH v3 -next 1/6] kexec_file: Fix kexec_file.c build error for riscv platform Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-05-20 15:45 ` Palmer Dabbelt
2022-05-20 15:45 ` Palmer Dabbelt
2022-05-20 15:45 ` Palmer Dabbelt
2022-05-22 3:07 ` Baoquan He
2022-05-22 3:07 ` Baoquan He
2022-05-22 3:07 ` Baoquan He
2022-04-08 10:09 ` [PATCH v3 -next 2/6] RISC-V: use memcpy for kexec_file mode Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-04-08 10:09 ` [PATCH v3 -next 3/6] RISC-V: Add kexec_file support Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-04-08 10:09 ` [PATCH v3 -next 4/6] RISC-V: Support for kexec_file on panic Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-04-08 10:09 ` [PATCH v3 -next 5/6] RISC-V: Add purgatory Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-04-08 10:09 ` [PATCH v3 -next 6/6] RISC-V: Load purgatory in kexec_file Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-04-08 10:09 ` Li Zhengyu
2022-04-21 3:15 ` [PATCH v3 -next 0/6] riscv: kexec: add kexec_file_load() support lizhengyu (E)
2022-04-21 3:15 ` lizhengyu
2022-04-21 3:15 ` lizhengyu (E)
2022-05-19 8:26 ` lizhengyu (E)
2022-05-19 8:26 ` lizhengyu
2022-05-19 8:26 ` lizhengyu (E)
2022-05-20 15:45 ` Palmer Dabbelt
2022-05-20 15:45 ` Palmer Dabbelt
2022-05-20 15:45 ` Palmer Dabbelt
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=20220408100914.150110-1-lizhengyu3@huawei.com \
--to=lizhengyu3@huawei.com \
--cc=alex@ghiti.fr \
--cc=aou@eecs.berkeley.edu \
--cc=bjorn.topel@gmail.com \
--cc=ebiederm@xmission.com \
--cc=guoren@linux.alibaba.com \
--cc=jszhang@kernel.org \
--cc=kexec@lists.infradead.org \
--cc=liaochang1@huawei.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-riscv@lists.infradead.org \
--cc=mick@ics.forth.gr \
--cc=palmer@dabbelt.com \
--cc=paul.walmsley@sifive.com \
--cc=penberg@kernel.org \
--cc=sunnanyong@huawei.com \
--cc=wangkefeng.wang@huawei.com \
/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.