LKML Archive on
help / color / mirror / Atom feed
From: "Michael Kerrisk (man-pages)" <>
To: Vivek Goyal <>
Cc:, lkml <>,
	"" <>,, Andy Lutomirski <>,
	Dave Young <>, "H. Peter Anvin" <>,
	Borislav Petkov <>,
	"Eric W. Biederman" <>
Subject: Edited kexec_load(2) [kexec_file_load()] man page for review
Date: Sun, 09 Nov 2014 20:17:49 +0100	[thread overview]
Message-ID: <> (raw)

Hello Vivek (and all),

Thanks for the kexec_file_load() patch [for the kexec_load(2) man page]
that you quite some time ago sent. I have merged it and done some
substantial editing as well. Could you please take a look at the 
draft below, and check that the kexec_file_load() material is okay.
Please could you especially pay attention to the pieces marked
"FIXME(kexec_file_load)", since those are pieces about which i
had questions or doubts.



.\" Copyright (C) 2010 Intel Corporation, Author: Andi Kleen
.\" and Copyright 2014, Vivek Goyal <>
.\" Permission is granted to make and distribute verbatim copies of this
.\" manual provided the copyright notice and this permission notice are
.\" preserved on all copies.
.\" Permission is granted to copy and distribute modified versions of this
.\" manual under the conditions for verbatim copying, provided that the
.\" entire resulting derived work is distributed under the terms of a
.\" permission notice identical to this one.
.\" Since the Linux kernel and libraries are constantly changing, this
.\" manual page may be incorrect or out-of-date.  The author(s) assume no
.\" responsibility for errors or omissions, or for damages resulting from
.\" the use of the information contained herein.  The author(s) may not
.\" have taken the same level of care in the production of this manual,
.\" which is licensed free of charge, as they might when working
.\" professionally.
.\" Formatted or processed versions of this manual, if unaccompanied by
.\" the source, must acknowledge the copyright and authors of this work.
.TH KEXEC_LOAD 2 2014-08-19 "Linux" "Linux Programmer's Manual"
kexec_load, kexec_file_load \- load a new kernel for later execution
.B #include <linux/kexec.h>

.BI "long kexec_load(unsigned long " entry ", unsigned long " nr_segments ","
.BI "                struct kexec_segment *" segments \
", unsigned long " flags ");"

.\" FIXME(kexec_file_load):
.\"     Why are the return types of kexec_load() and kexec_file_load()
.\"     different?
.BI "int kexec_file_load(int " kernel_fd ", int " initrd_fd ","
.BI "                    unsigned long " cmdline_len  \
", const char *" cmdline ","
.BI "                    unsigned long " flags ");"

.IR Note :
There are no glibc wrappers for these system calls; see NOTES.
.BR kexec_load ()
system call loads a new kernel that can be executed later by
.BR reboot (2).
.I flags
argument is a bit mask that controls the operation of the call.
The following values can be specified in
.IR flags :
.BR KEXEC_ON_CRASH " (since Linux 2.6.13)"
Execute the new kernel automatically on a system crash.
.\" FIXME Explain in more detail how KEXEC_ON_CRASH is actually used
.BR KEXEC_PRESERVE_CONTEXT " (since Linux 2.6.27)"
Preserve the system hardware and
software states before executing the new kernel.
This could be used for system suspend.
This flag is available only if the kernel was configured with
and is effective only if
.I nr_segments
is greater than 0.
The high-order bits (corresponding to the mask 0xffff0000) of
.I flags
contain the architecture of the to-be-executed kernel.
Specify (OR) the constant
to use the current architecture,
or one of the following architecture constants
The architecture must be executable on the CPU of the system.

.I entry
argument is the physical entry address in the kernel image.
.I nr_segments
argument is the number of segments pointed to by the
.I segments
the kernel imposes an (arbitrary) limit of 16 on the number of segments.
.I segments
argument is an array of
.I kexec_segment
structures which define the kernel layout:
.in +4n

struct kexec_segment {
    void   *buf;        /* Buffer in user space */
    size_t  bufsz;      /* Buffer length in user space */
    void   *mem;        /* Physical address of kernel */
    size_t  memsz;      /* Physical address length */
.\" FIXME Explain the details of how the kernel image defined by segments
.\" is copied from the calling process into previously reserved memory.
The kernel image defined by
.I segments
is copied from the calling process into previously reserved memory.
.SS kexec_file_load()
.BR kexec_file_load ()
system call is similar to
.BR kexec_load (),
but it takes a different set of arguments.
It reads the kernel to be loaded from the file referred to by the descriptor
.IR kernel_fd ,
and the initrd (initial RAM disk)
to be loaded from file referred to by the descriptor
.IR initrd_fd .
.IR cmdline
argument is a pointer to a string containing the command line
for the new kernel; the
.IR cmdline_len
argument specifies the length of the string in
.IR cmdline .

.IR flags
argument is a bit mask which modifies the behavior of the call.
The following values can be specified in
.IR flags :
Unload the currently loaded kernel.
Load the new kernel in the memory region reserved for the crash kernel.
This kernel is booted if the currently running kernel crashes.
Loading initrd/initramfs is optional.
Specify this flag if no initramfs is being loaded.
If this flag is set, the value passed in
.IR initrd_fd
is ignored.
On success, these system calls returns 0.
On error, \-1 is returned and
.I errno
is set to indicate the error.
Another crash kernel is already being loaded
or a crash kernel is already in use.
.I flags
is invalid; or
.IR nr_segments
is too large
.I kernel_fd
does not refer to an open file, or the kernel can't load this file.
The caller does not have the
.BR kexec_load ()
system call first appeared in Linux 2.6.13.
.BR kexec_file_load ()
system call first appeared in Linux 3.17.
These system calls are Linux-specific.
Currently, there is no glibc support for these system calls.
Call them using
.BR syscall (2).
The required constants are in the Linux kernel source file
.IR linux/kexec.h ,
which is not currently exported to glibc.
Therefore, these constants must be defined manually.

.\" FIXME(kexec_file_load):
.\" Is the following rationale accurate? Does it need expanding?
.BR kexec_file_load ()
.\" See also
system call was added to provide support for systems
where "kexec" loading should be restricted to
only kernels that are signed.

.BR kexec_load ()
system call is available only if the kernel was configured with
.BR kexec_file_load ()
system call is available only if the kernel was configured with
.\" FIXME(kexec_file_load):
.\"     Does kexec_file_load() need any other CONFIG_* options to be defined?
.BR reboot (2),
.BR syscall (2),
.BR kexec (8)

Michael Kerrisk
Linux man-pages maintainer;
Linux/UNIX System Programming Training:

             reply	other threads:[~2014-11-09 19:18 UTC|newest]

Thread overview: 19+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2014-11-09 19:17 Michael Kerrisk (man-pages) [this message]
2014-11-11 21:30 ` Vivek Goyal
2015-01-07 21:17   ` Michael Kerrisk (man-pages)
2015-01-12 22:16     ` Vivek Goyal
2015-01-16 13:30       ` Michael Kerrisk (man-pages)
2015-01-27  8:07         ` Michael Kerrisk (man-pages)
2015-01-27 14:24         ` Vivek Goyal
2015-01-28  8:04           ` Michael Kerrisk (man-pages)
2015-01-28 14:48             ` Vivek Goyal
2015-01-28 15:49               ` Michael Kerrisk (man-pages)
2015-01-28 20:34                 ` Vivek Goyal
2015-01-28 21:14                   ` Scot Doyle
2015-01-28 21:31                     ` Vivek Goyal
2015-01-28 22:10                       ` Scot Doyle
2015-01-28 22:25                         ` Vivek Goyal
2015-01-29  1:27                           ` Scot Doyle
2015-01-29  5:39                             ` Michael Kerrisk (man-pages)
2015-01-29 16:06                               ` Scot Doyle
2015-01-30 15:25                                 ` Michael Kerrisk (man-pages)

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:

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \ \ \ \ \ \ \ \ \ \ \ \
    --subject='Re: Edited kexec_load(2) [kexec_file_load()] man page for review' \

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link

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).