mirror of
https://github.com/freebsd/freebsd-src.git
synced 2026-10-28 11:25:21 +01:00
120 lines
2.4 KiB
Plaintext
120 lines
2.4 KiB
Plaintext
.\"
|
|
.\" SPDX-License-Identifier: BSD-3-Clause
|
|
.\"
|
|
.\" Copyright (c) 2025 Juniper Networks, Inc.
|
|
.\"
|
|
.Dd October 29, 2025
|
|
.Dt KEXEC_LOAD 2
|
|
.Os
|
|
.Sh NAME
|
|
.Nm kexec_load
|
|
.Nd prepare new kernel to reboot into
|
|
.Sh SYNOPSIS
|
|
.Lb libc
|
|
.In sys/kexec.h
|
|
.Ft int
|
|
.Fn kexec_load "uint64_t entry" "unsigned long count" \
|
|
"struct kexec_segment *segments" "unsigned long flags"
|
|
.Sh DESCRIPTION
|
|
The
|
|
.Fn kexec_load
|
|
system call loads a new kernel that can be executed later by
|
|
.Xr reboot 2 .
|
|
Subsequent calls will replace previously loaded images.
|
|
.Pp
|
|
The
|
|
.Fa flags
|
|
argument is a bitmask of flags that control the operation of the call.
|
|
This argument is present for compatibility with Linux, although it is currently
|
|
unused and must be 0.
|
|
.Pp
|
|
The
|
|
.Fa entry
|
|
argument is the physical address of the entry point of the new kernel image.
|
|
.Pp
|
|
The
|
|
.Fa count
|
|
argument is the number of segments in the image, currently limited to 16.
|
|
A value of 0 will unload the currently staged image, if one exists, without
|
|
staging a new image.
|
|
.Pp
|
|
The
|
|
.Fa segments
|
|
argument is an array of
|
|
.Fa count
|
|
members of the following structure:
|
|
.Bd -literal -offset indent
|
|
struct kexec_segment {
|
|
void *buf;
|
|
size_t bufsz;
|
|
vm_paddr_t mem;
|
|
vm_size_t memsz;
|
|
};
|
|
.Ed
|
|
.Pp
|
|
The
|
|
.Va buf
|
|
and
|
|
.Va bufsz
|
|
members specify a memory region in the caller's address space containing the
|
|
source of the segment.
|
|
The
|
|
.Va mem
|
|
and
|
|
.Va memsz
|
|
members specify the target physical region of the segment.
|
|
.Va bufsz
|
|
must be less than or equal to
|
|
.Va memsz ,
|
|
and
|
|
.Va mem
|
|
and
|
|
.Va memsz
|
|
must be page aligned.
|
|
The region covered by
|
|
.Va mem
|
|
must be in the list covered by the
|
|
.Va vm.phys_segs
|
|
sysctl.
|
|
.Pp
|
|
The
|
|
.Fn kexec_load
|
|
system call stages the kernel image in safe memory along with all
|
|
machine-dependent image data until
|
|
.Xr reboot 2
|
|
is called with the
|
|
.Va RB_KEXEC
|
|
flag to load the image and execute the new kernel.
|
|
.Sh RETURN VALUES
|
|
The
|
|
.Fn kexec_load
|
|
system call returns 0 on success.
|
|
On failure, -1 is returned, and
|
|
.Va errno
|
|
is set to indicate the error.
|
|
On success any previously loaded image is unloaded and replaced with the new
|
|
image.
|
|
On failure, the previously loaded image is unchanged.
|
|
.Sh ERRORS
|
|
The following errors may be returned:
|
|
.Bl -tag -width Er
|
|
.It Bq Er EINVAL
|
|
Too many segments in image.
|
|
.It Bq Er EINVAL
|
|
The value of
|
|
.Va bufsz
|
|
is larger than
|
|
.Va memsz
|
|
in one or more segments.
|
|
.It Bq Er EINVAL
|
|
Machine-dependent load error.
|
|
.It Bq Er EBUSY
|
|
Another
|
|
.Fn kexec_load
|
|
call is in progress.
|
|
.Sh HISTORY
|
|
The
|
|
.Nm
|
|
system call appeared in
|
|
.Fx 16.0 .
|