sync with OpenBSD -current
This commit is contained in:
parent
0a783d275f
commit
0fd478b49f
@ -1,4 +1,4 @@
|
|||||||
dnl $OpenBSD: features,v 1.4 2023/10/05 11:58:34 kn Exp $
|
dnl $OpenBSD: features,v 1.5 2024/09/17 10:13:50 jsg Exp $
|
||||||
dnl
|
dnl
|
||||||
dnl This file lists almost all the conditional features of this port,
|
dnl This file lists almost all the conditional features of this port,
|
||||||
dnl which are used to provide accurate installation notes.
|
dnl which are used to provide accurate installation notes.
|
||||||
@ -6,7 +6,7 @@ dnl
|
|||||||
dnl Information about the installer script features should be in sync with
|
dnl Information about the installer script features should be in sync with
|
||||||
dnl src/distrib/amd64/common/install.md
|
dnl src/distrib/amd64/common/install.md
|
||||||
dnl and the list files in
|
dnl and the list files in
|
||||||
dnl src/distrib/amd64/{common/list,ramdisk_cd/list.local}
|
dnl src/distrib/amd64/{ramdiskA,ramdisk_cd}/list
|
||||||
dnl
|
dnl
|
||||||
dnl ====
|
dnl ====
|
||||||
dnl
|
dnl
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
dnl $OpenBSD: features,v 1.4 2023/10/05 11:58:34 kn Exp $
|
dnl $OpenBSD: features,v 1.5 2024/09/17 10:13:50 jsg Exp $
|
||||||
dnl
|
dnl
|
||||||
dnl This file lists almost all the conditional features of this port,
|
dnl This file lists almost all the conditional features of this port,
|
||||||
dnl which are used to provide accurate installation notes.
|
dnl which are used to provide accurate installation notes.
|
||||||
@ -6,7 +6,7 @@ dnl
|
|||||||
dnl Information about the installer script features should be in sync with
|
dnl Information about the installer script features should be in sync with
|
||||||
dnl src/distrib/i386/common/install.md
|
dnl src/distrib/i386/common/install.md
|
||||||
dnl and the list files in
|
dnl and the list files in
|
||||||
dnl src/distrib/i386/{common/list,ramdiskC/list.local,ramdisk_cd/list.local}
|
dnl src/distrib/i386/{ramdisk,ramdisk_cd}/list
|
||||||
dnl
|
dnl
|
||||||
dnl ====
|
dnl ====
|
||||||
dnl
|
dnl
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.\" $OpenBSD: pledge.2,v 1.69 2023/10/30 06:11:04 jmc Exp $
|
.\" $OpenBSD: pledge.2,v 1.70 2024/09/17 12:53:15 deraadt Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2015 Nicholas Marriott <nicm@openbsd.org>
|
.\" Copyright (c) 2015 Nicholas Marriott <nicm@openbsd.org>
|
||||||
.\"
|
.\"
|
||||||
@ -14,7 +14,7 @@
|
|||||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: October 30 2023 $
|
.Dd $Mdocdate: September 17 2024 $
|
||||||
.Dt PLEDGE 2
|
.Dt PLEDGE 2
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -174,7 +174,6 @@ As a result, all the expected functionalities of libc stdio work.
|
|||||||
.Xr fstat 2 ,
|
.Xr fstat 2 ,
|
||||||
.Xr fsync 2 ,
|
.Xr fsync 2 ,
|
||||||
.Xr ftruncate 2 ,
|
.Xr ftruncate 2 ,
|
||||||
.Xr getdents 2 ,
|
|
||||||
.Xr getdtablecount 2 ,
|
.Xr getdtablecount 2 ,
|
||||||
.Xr getegid 2 ,
|
.Xr getegid 2 ,
|
||||||
.Xr getentropy 2 ,
|
.Xr getentropy 2 ,
|
||||||
@ -236,10 +235,11 @@ As a result, all the expected functionalities of libc stdio work.
|
|||||||
.Xr writev 2
|
.Xr writev 2
|
||||||
.It Cm rpath
|
.It Cm rpath
|
||||||
A number of system calls are allowed if they only cause
|
A number of system calls are allowed if they only cause
|
||||||
read-only effects on the filesystem:
|
read-only effects on the filesystem, or expose filenames to programs:
|
||||||
.Pp
|
.Pp
|
||||||
.Xr chdir 2 ,
|
.Xr chdir 2 ,
|
||||||
.Xr getcwd 3 ,
|
.Xr getcwd 3 ,
|
||||||
|
.Xr getdents 2 ,
|
||||||
.Xr openat 2 ,
|
.Xr openat 2 ,
|
||||||
.Xr fstatat 2 ,
|
.Xr fstatat 2 ,
|
||||||
.Xr faccessat 2 ,
|
.Xr faccessat 2 ,
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $OpenBSD: Makefile,v 1.2 2023/12/17 08:32:26 tb Exp $
|
# $OpenBSD: Makefile,v 1.3 2024/09/17 06:12:06 tb Exp $
|
||||||
|
|
||||||
C2SP_TESTVECTORS = /usr/local/share/c2sp-testvectors/
|
C2SP_TESTVECTORS = /usr/local/share/c2sp-testvectors/
|
||||||
|
|
||||||
@ -18,7 +18,7 @@ cctv: cctv.go
|
|||||||
OSSL_LIB = /usr/local/lib/eopenssl
|
OSSL_LIB = /usr/local/lib/eopenssl
|
||||||
OSSL_INC = /usr/local/include/eopenssl
|
OSSL_INC = /usr/local/include/eopenssl
|
||||||
|
|
||||||
. for V in 11 31 32
|
. for V in 11 32 33
|
||||||
. if exists(/usr/local/bin/eopenssl$V)
|
. if exists(/usr/local/bin/eopenssl$V)
|
||||||
PROGS += cctv-openssl$V
|
PROGS += cctv-openssl$V
|
||||||
SRCS_cctv-openssl$V =
|
SRCS_cctv-openssl$V =
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $OpenBSD: Makefile,v 1.6 2022/07/18 09:17:44 tb Exp $
|
# $OpenBSD: Makefile,v 1.7 2024/09/17 08:47:37 tb Exp $
|
||||||
|
|
||||||
.if !exists(/usr/local/share/tlsfuzzer)
|
.if !exists(/usr/local/share/tlsfuzzer)
|
||||||
regress:
|
regress:
|
||||||
@ -14,6 +14,10 @@ localhost.key localhost.crt:
|
|||||||
|
|
||||||
certs: localhost.key localhost.crt
|
certs: localhost.key localhost.crt
|
||||||
|
|
||||||
|
start-server: certs
|
||||||
|
openssl s_server -accept 4433 -groups X25519:P-256:P-521:P-384 \
|
||||||
|
-key localhost.key -cert localhost.crt -www
|
||||||
|
|
||||||
CLEANFILES += localhost.key localhost.crt
|
CLEANFILES += localhost.key localhost.crt
|
||||||
|
|
||||||
PORT ?= 4433
|
PORT ?= 4433
|
||||||
@ -40,7 +44,7 @@ list-failing:
|
|||||||
missing:
|
missing:
|
||||||
@python3 ${.CURDIR}/tlsfuzzer.py -m
|
@python3 ${.CURDIR}/tlsfuzzer.py -m
|
||||||
|
|
||||||
.PHONY: all certs failing list list-failing missing port
|
.PHONY: all certs failing list list-failing missing port start-server
|
||||||
|
|
||||||
.endif
|
.endif
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.\" $OpenBSD: psp.4,v 1.2 2024/09/04 14:24:10 jsg Exp $
|
.\" $OpenBSD: psp.4,v 1.4 2024/09/17 04:12:57 jsg Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2024 Jonathan Gray <jsg@openbsd.org>
|
.\" Copyright (c) 2024 Jonathan Gray <jsg@openbsd.org>
|
||||||
.\"
|
.\"
|
||||||
@ -14,7 +14,7 @@
|
|||||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: September 4 2024 $
|
.Dd $Mdocdate: September 17 2024 $
|
||||||
.Dt PSP 4
|
.Dt PSP 4
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -26,11 +26,330 @@
|
|||||||
The
|
The
|
||||||
.Nm
|
.Nm
|
||||||
driver provides an interface to the AMD Platform Security Processor.
|
driver provides an interface to the AMD Platform Security Processor.
|
||||||
|
The interface can be accessed through the
|
||||||
|
.Xr ioctl 2
|
||||||
|
interface exposed by
|
||||||
|
.Pa /dev/psp .
|
||||||
|
.Pp
|
||||||
|
.Xr vmd 8
|
||||||
|
uses
|
||||||
|
.Nm
|
||||||
|
to configure and launch SEV-enabled guests.
|
||||||
|
.Sh IOCTL INTERFACE
|
||||||
|
The
|
||||||
|
.Xr ioctl 2
|
||||||
|
command codes below are defined in
|
||||||
|
.In dev/ic/pspvar.h .
|
||||||
|
.Bl -tag -width xxxxxx
|
||||||
|
.It Dv PSP_IOC_GET_PSTATUS Fa "struct psp_platform_status *pspst"
|
||||||
|
Collect the current status of the platform.
|
||||||
|
.Bd -literal
|
||||||
|
struct psp_platform_status {
|
||||||
|
/* Output parameters from PSP_CMD_PLATFORMSTATUS */
|
||||||
|
uint8_t api_major;
|
||||||
|
uint8_t api_minor;
|
||||||
|
uint8_t state;
|
||||||
|
uint8_t owner;
|
||||||
|
uint32_t cfges_build;
|
||||||
|
uint32_t guest_count;
|
||||||
|
} __packed;
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
.Va api_major
|
||||||
|
and
|
||||||
|
.Va api_minor
|
||||||
|
indicate the PSP firmware version.
|
||||||
|
.Pp
|
||||||
|
The current platform state is indicated by
|
||||||
|
.Va state .
|
||||||
|
The following values are defined:
|
||||||
|
.Bl -tag -width PSP_PSTATE_WORKING -compact
|
||||||
|
.It PSP_PSTATE_UNINIT
|
||||||
|
The platform is uninitialized.
|
||||||
|
.It PSP_PSTATE_INIT
|
||||||
|
The platform is initialized but not managing any guests.
|
||||||
|
.It PSP_PSTATE_WORKING
|
||||||
|
The platform is initialized and currently managing guests.
|
||||||
|
.El
|
||||||
|
.Pp
|
||||||
|
.Va owner
|
||||||
|
indicates whether the platform is self-owned or externally owned.
|
||||||
|
.Pp
|
||||||
|
Bit 0 of
|
||||||
|
.Va cfgs_build
|
||||||
|
indicates whether SEV-ES is configured on the platform or not.
|
||||||
|
Bits 31:24 indicate the firmware build ID.
|
||||||
|
.Pp
|
||||||
|
.Va guest_count
|
||||||
|
indicates the number of valid guests currently maintained by the
|
||||||
|
firmware.
|
||||||
|
.It Dv PSP_IOC_DF_FLUSH
|
||||||
|
This command flushes all write buffers of the CPU's data fabric.
|
||||||
|
It must be invoked after deactivating one or more guests with
|
||||||
|
.Dv PSP_IOC_DEACTIVATE .
|
||||||
|
.It Dv PSP_IOC_DECOMMISSION Fa "struct psp_decommission *pspdec"
|
||||||
|
Deletes all guest context of the guest identified by
|
||||||
|
.Va handle .
|
||||||
|
.Bd -literal
|
||||||
|
struct psp_decommission {
|
||||||
|
/* Input parameter for PSP_CMD_DECOMMISSION */
|
||||||
|
uint32_t handle;
|
||||||
|
} __packed;
|
||||||
|
.Ed
|
||||||
|
.It Dv PSP_IOC_GET_GSTATUS
|
||||||
|
Retrieves status information about an SEV-enabled guest identified by
|
||||||
|
.Va handle .
|
||||||
|
.Bd -literal
|
||||||
|
struct psp_guest_status {
|
||||||
|
/* Input parameter for PSP_CMD_GUESTSTATUS */
|
||||||
|
uint32_t handle;
|
||||||
|
|
||||||
|
/* Output parameters from PSP_CMD_GUESTSTATUS */
|
||||||
|
uint32_t policy;
|
||||||
|
uint32_t asid;
|
||||||
|
uint8_t state;
|
||||||
|
} __packed;
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
.Va policy
|
||||||
|
indicates the policy used for this guest.
|
||||||
|
.Va asid
|
||||||
|
indicates the guest's address space identifier (ASID).
|
||||||
|
.Pp
|
||||||
|
The state of the guest is indicated by
|
||||||
|
.Va state .
|
||||||
|
The following values are defined:
|
||||||
|
.Bl -tag -width PSP_GSTATE_RUNNING -compact
|
||||||
|
.It PSP_GSTATE_UNINIT
|
||||||
|
The guest is uninitialized.
|
||||||
|
.It PSP_GSTATE_LUPDATE
|
||||||
|
The guest is currently being launched and plaintext data is imported.
|
||||||
|
.It PSP_GSTATE_LSECRET
|
||||||
|
The guest is currently being launched and ciphertext data is imported.
|
||||||
|
.It PSP_GSTATE_RUNNING
|
||||||
|
The guest is fully launched.
|
||||||
|
.It PSP_GSTATE_SUPDATE
|
||||||
|
The guest is migrated to another machine.
|
||||||
|
.It PSP_GSTATE_RUPDATE
|
||||||
|
The guest is migrated from another machine.
|
||||||
|
.It PSP_GSTATE_SENT
|
||||||
|
Thee guest has bin migrated to another machine.
|
||||||
|
.El
|
||||||
|
.It Dv PSP_IOC_LAUNCH_START
|
||||||
|
This command encrypts a guest's memory.
|
||||||
|
.Bd -literal
|
||||||
|
struct psp_launch_start {
|
||||||
|
/* Input/Output parameter for PSP_CMD_LAUNCH_START */
|
||||||
|
uint32_t handle;
|
||||||
|
|
||||||
|
/* Input parameters for PSP_CMD_LAUNCH_START */
|
||||||
|
uint32_t policy;
|
||||||
|
|
||||||
|
/* The following input parameters are not used yet */
|
||||||
|
uint64_t dh_cert_paddr;
|
||||||
|
uint32_t dh_cert_len;
|
||||||
|
uint32_t reserved;
|
||||||
|
uint64_t session_paddr;
|
||||||
|
uint32_t session_len;
|
||||||
|
} __packed;
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
If
|
||||||
|
.Va handle
|
||||||
|
is zero, a new key is created.
|
||||||
|
A unique handle is assigned to the guest and returned in
|
||||||
|
.Va handle .
|
||||||
|
.Pp
|
||||||
|
.Va policy
|
||||||
|
specifies the policy used for that guest.
|
||||||
|
.Pp
|
||||||
|
.Va dh_cert_paddr ,
|
||||||
|
.Va dh_cert len ,
|
||||||
|
.Va session_paddr
|
||||||
|
and
|
||||||
|
.Va session_len
|
||||||
|
are currently not used.
|
||||||
|
.It Dv PSP_IOC_LAUNCH_UPDATE_DATA
|
||||||
|
This command encrypts data of the guest identified by
|
||||||
|
.Va handle .
|
||||||
|
.Bd -literal
|
||||||
|
struct psp_launch_update_data {
|
||||||
|
/* Input parameters for PSP_CMD_LAUNCH_UPDATE_DATA */
|
||||||
|
uint32_t handle;
|
||||||
|
uint32_t reserved;
|
||||||
|
uint64_t paddr;
|
||||||
|
uint32_t length;
|
||||||
|
} __packed;
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
.Va paddr
|
||||||
|
and
|
||||||
|
.Va length
|
||||||
|
specify the address and length of the data to be encrypted.
|
||||||
|
Both values must be a multiple of 16 bytes.
|
||||||
|
.It Dv PSP_IOC_LAUNCH_MEASURE
|
||||||
|
This commands generates a measurement of the guest's memory.
|
||||||
|
The guest is identified by
|
||||||
|
.Va handle .
|
||||||
|
.Bd -literal
|
||||||
|
struct psp_measure {
|
||||||
|
/* Output buffer for PSP_CMD_LAUNCH_MEASURE */
|
||||||
|
uint8_t measure[32];
|
||||||
|
uint8_t measure_nonce[16];
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
struct psp_launch_measure {
|
||||||
|
/* Input parameters for PSP_CMD_LAUNCH_MEASURE */
|
||||||
|
uint32_t handle;
|
||||||
|
uint32_t reserved;
|
||||||
|
uint64_t measure_paddr;
|
||||||
|
|
||||||
|
/* Input/output parameter for PSP_CMD_LAUNCH_MEASURE */
|
||||||
|
uint32_t measure_len;
|
||||||
|
uint32_t padding;
|
||||||
|
|
||||||
|
/* Output buffer from PSP_CMD_LAUNCH_MEASURE */
|
||||||
|
struct psp_measure psp_measure; /* 64bit aligned */
|
||||||
|
#define measure psp_measure.measure
|
||||||
|
#define measure_nonce psp_measure.measure_nonce
|
||||||
|
} __packed;
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
.Va measure_paddr
|
||||||
|
is currently not used and
|
||||||
|
.Va measure_len
|
||||||
|
must always be
|
||||||
|
.Li sizeof(struct psp_measure) .
|
||||||
|
.Pp
|
||||||
|
.Va psp_measure
|
||||||
|
contains the buffers
|
||||||
|
.Va measure
|
||||||
|
and
|
||||||
|
.Va measure_nonce .
|
||||||
|
These contain the measurement and nonce generated by the PSP.
|
||||||
|
.It Dv PSP_IOC_LAUNCH_FINISH
|
||||||
|
This command finalizes the launch of the guest identified by
|
||||||
|
.Va handle .
|
||||||
|
.Bd -literal
|
||||||
|
struct psp_launch_finish {
|
||||||
|
/* Input parameter for PSP_CMD_LAUNCH_FINISH */
|
||||||
|
uint32_t handle;
|
||||||
|
} __packed;
|
||||||
|
.Ed
|
||||||
|
.It Dv PSP_IOC_ATTESTATION
|
||||||
|
This command generates an attestation report signed by the PSP with
|
||||||
|
a platform specific key.
|
||||||
|
.Bd -literal
|
||||||
|
struct psp_report {
|
||||||
|
/* Output buffer for PSP_CMD_ATTESTATION */
|
||||||
|
uint8_t report_nonce[16];
|
||||||
|
uint8_t report_launch_digest[32];
|
||||||
|
uint32_t report_policy;
|
||||||
|
uint32_t report_sig_usage;
|
||||||
|
uint32_t report_sig_algo;
|
||||||
|
uint32_t reserved2;
|
||||||
|
uint8_t report_sig1[144];
|
||||||
|
} __packed;
|
||||||
|
|
||||||
|
struct psp_attestation {
|
||||||
|
/* Input parameters for PSP_CMD_ATTESTATION */
|
||||||
|
uint32_t handle;
|
||||||
|
uint32_t reserved;
|
||||||
|
uint64_t attest_paddr;
|
||||||
|
uint8_t attest_nonce[16];
|
||||||
|
|
||||||
|
/* Input/output parameter from PSP_CMD_ATTESTATION */
|
||||||
|
uint32_t attest_len;
|
||||||
|
uint32_t padding;
|
||||||
|
|
||||||
|
/* Output parameter from PSP_CMD_ATTESTATION */
|
||||||
|
struct psp_report psp_report; /* 64bit aligned */
|
||||||
|
#define report_nonce psp_report.report_nonce
|
||||||
|
#define report_launch_digest psp_report.report_launch_digest
|
||||||
|
#define report_policy psp_report.report_policy
|
||||||
|
#define report_sig_usage psp_report.report_sig_usage;
|
||||||
|
#define report_report_sig_alg psp_report.report_sig_algo;
|
||||||
|
#define report_report_sig1 psp_report.report_sig1;
|
||||||
|
} __packed;
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
.Va handle
|
||||||
|
identifies the guest.
|
||||||
|
.Va attest_paddr
|
||||||
|
is currently not used.
|
||||||
|
.Va attest_nonce
|
||||||
|
is the nonce returned by a previous
|
||||||
|
.Dv PSP_IOC_LAUNCH_MEASURE
|
||||||
|
command.
|
||||||
|
.Va attest_len
|
||||||
|
must always be
|
||||||
|
.Li sizeof(struct psp_report) .
|
||||||
|
.Pp
|
||||||
|
The attestation report is returned in
|
||||||
|
.Va psp_report .
|
||||||
|
The format of the report is defined by
|
||||||
|
.Li struct psp_report .
|
||||||
|
.It Dv PSP_IOC_ACTIVATE
|
||||||
|
This commands associates the context of the guest identified by
|
||||||
|
.Va handle
|
||||||
|
with the address space identifier provided in
|
||||||
|
.Va asid .
|
||||||
|
.Bd -literal
|
||||||
|
struct psp_activate {
|
||||||
|
/* Input parameters for PSP_CMD_ACTIVATE */
|
||||||
|
uint32_t handle;
|
||||||
|
uint32_t asid;
|
||||||
|
} __packed;
|
||||||
|
.Ed
|
||||||
|
.It Dv PSP_IOC_DEACTIVATE
|
||||||
|
This command dissociates the context of the guest identified by
|
||||||
|
.Va handle
|
||||||
|
from its current the address space identifier.
|
||||||
|
.Bd -literal
|
||||||
|
struct psp_deactivate {
|
||||||
|
/* Input parameter for PSP_CMD_DEACTIVATE */
|
||||||
|
uint32_t handle;
|
||||||
|
} __packed;
|
||||||
|
.Ed
|
||||||
|
.It Dv PSP_IOC_SNP_GET_PSTATUS
|
||||||
|
This command returns the state of a SEV-SNP enabled platform.
|
||||||
|
.Bd -literal
|
||||||
|
struct psp_snp_platform_status {
|
||||||
|
uint8_t api_major;
|
||||||
|
uint8_t api_minor;
|
||||||
|
uint8_t state;
|
||||||
|
uint8_t is_rmp_init;
|
||||||
|
uint32_t build;
|
||||||
|
uint32_t features;
|
||||||
|
uint32_t guest_count;
|
||||||
|
uint64_t current_tcb;
|
||||||
|
uint64_t reported_tcb;
|
||||||
|
} __packed;
|
||||||
|
.Ed
|
||||||
|
.It Dv PSP_IOC_GUEST_SHUTDOWN
|
||||||
|
This command shuts down a guest identified by
|
||||||
|
.Va handle .
|
||||||
|
.Bd -literal
|
||||||
|
struct psp_guest_shutdown {
|
||||||
|
/* Input parameter for PSP_CMD_GUEST_SHUTDOWN */
|
||||||
|
uint32_t handle;
|
||||||
|
} __packed;
|
||||||
|
.Ed
|
||||||
|
.Pp
|
||||||
|
The command combines
|
||||||
|
.Dv PSP_IOC_DEACTIVATE
|
||||||
|
and
|
||||||
|
.Dv PSP_IOC_DECOMMISSION
|
||||||
|
in a single
|
||||||
|
.Xr ioctl 2
|
||||||
|
call.
|
||||||
|
.El
|
||||||
.Sh FILES
|
.Sh FILES
|
||||||
.Bl -tag -width /dev/psp
|
.Bl -tag -width /dev/psp
|
||||||
.It Pa /dev/psp
|
.It Pa /dev/psp
|
||||||
.El
|
.El
|
||||||
.Sh SEE ALSO
|
.Sh SEE ALSO
|
||||||
|
.Xr ioctl 2 ,
|
||||||
.Xr ccp 4 ,
|
.Xr ccp 4 ,
|
||||||
.Xr vmd 8
|
.Xr vmd 8
|
||||||
.Rs
|
.Rs
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
# $OpenBSD: GENERIC,v 1.297 2024/08/31 04:17:14 dlg Exp $
|
# $OpenBSD: GENERIC,v 1.298 2024/09/17 13:45:49 jsg Exp $
|
||||||
#
|
#
|
||||||
# Machine-independent option; used by all architectures for their
|
# Machine-independent option; used by all architectures for their
|
||||||
# GENERIC kernel
|
# GENERIC kernel
|
||||||
@ -16,7 +16,7 @@ option KMEMSTATS # collect malloc(9) statistics
|
|||||||
option PTRACE # ptrace(2) system call
|
option PTRACE # ptrace(2) system call
|
||||||
|
|
||||||
#option KVA_GUARDPAGES # slow virtual address recycling (+ guarding)
|
#option KVA_GUARDPAGES # slow virtual address recycling (+ guarding)
|
||||||
option POOL_DEBUG # pool corruption detection
|
#option POOL_DEBUG # pool corruption detection
|
||||||
#option VFSLCKDEBUG # VFS locking checks
|
#option VFSLCKDEBUG # VFS locking checks
|
||||||
|
|
||||||
option CRYPTO # Cryptographic framework
|
option CRYPTO # Cryptographic framework
|
||||||
|
@ -1,6 +1,6 @@
|
|||||||
#!/bin/sh -
|
#!/bin/sh -
|
||||||
#
|
#
|
||||||
# $OpenBSD: newvers.sh,v 1.204 2024/08/07 15:59:24 deraadt Exp $
|
# $OpenBSD: newvers.sh,v 1.205 2024/09/17 13:39:17 deraadt Exp $
|
||||||
# $NetBSD: newvers.sh,v 1.17.2.1 1995/10/12 05:17:11 jtc Exp $
|
# $NetBSD: newvers.sh,v 1.17.2.1 1995/10/12 05:17:11 jtc Exp $
|
||||||
#
|
#
|
||||||
# Copyright (c) 1984, 1986, 1990, 1993
|
# Copyright (c) 1984, 1986, 1990, 1993
|
||||||
@ -71,9 +71,9 @@ ost="SecBSD"
|
|||||||
osr="1.6"
|
osr="1.6"
|
||||||
|
|
||||||
cat >vers.c <<eof
|
cat >vers.c <<eof
|
||||||
#define STATUS "-beta" /* just before a release */
|
|
||||||
#if 0
|
|
||||||
#define STATUS "" /* release */
|
#define STATUS "" /* release */
|
||||||
|
#if 0
|
||||||
|
#define STATUS "-beta" /* just before a release */
|
||||||
#define STATUS "-current" /* just after a release */
|
#define STATUS "-current" /* just after a release */
|
||||||
#define STATUS "-stable" /* stable branch */
|
#define STATUS "-stable" /* stable branch */
|
||||||
#endif
|
#endif
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: nvme_pci.c,v 1.11 2024/05/24 06:02:58 jsg Exp $ */
|
/* $OpenBSD: nvme_pci.c,v 1.12 2024/09/18 00:03:19 jmatthew Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2014 David Gwynne <dlg@openbsd.org>
|
* Copyright (c) 2014 David Gwynne <dlg@openbsd.org>
|
||||||
@ -73,10 +73,6 @@ nvme_pci_match(struct device *parent, void *match, void *aux)
|
|||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
static const struct pci_matchid nvme_msi_blacklist[] = {
|
|
||||||
{ PCI_VENDOR_INTEL, PCI_PRODUCT_INTEL_OPTANE },
|
|
||||||
};
|
|
||||||
|
|
||||||
void
|
void
|
||||||
nvme_pci_attach(struct device *parent, struct device *self, void *aux)
|
nvme_pci_attach(struct device *parent, struct device *self, void *aux)
|
||||||
{
|
{
|
||||||
@ -92,9 +88,6 @@ nvme_pci_attach(struct device *parent, struct device *self, void *aux)
|
|||||||
|
|
||||||
printf(": ");
|
printf(": ");
|
||||||
|
|
||||||
if (pci_matchbyid(pa, nvme_msi_blacklist, nitems(nvme_msi_blacklist)))
|
|
||||||
CLR(pa->pa_flags, PCI_FLAGS_MSI_ENABLED);
|
|
||||||
|
|
||||||
maptype = pci_mapreg_type(pa->pa_pc, pa->pa_tag, NVME_PCI_BAR);
|
maptype = pci_mapreg_type(pa->pa_pc, pa->pa_tag, NVME_PCI_BAR);
|
||||||
if (pci_mapreg_map(pa, NVME_PCI_BAR, maptype, 0,
|
if (pci_mapreg_map(pa, NVME_PCI_BAR, maptype, 0,
|
||||||
&sc->sc_iot, &sc->sc_ioh, NULL, &sc->sc_ios, 0) != 0) {
|
&sc->sc_iot, &sc->sc_ioh, NULL, &sc->sc_ios, 0) != 0) {
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: if_vio.c,v 1.54 2024/09/04 09:12:55 sf Exp $ */
|
/* $OpenBSD: if_vio.c,v 1.55 2024/09/17 09:00:14 sf Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2012 Stefan Fritsch, Alexander Fiveg.
|
* Copyright (c) 2012 Stefan Fritsch, Alexander Fiveg.
|
||||||
@ -317,8 +317,9 @@ void vio_iff(struct vio_softc *);
|
|||||||
int vio_media_change(struct ifnet *);
|
int vio_media_change(struct ifnet *);
|
||||||
void vio_media_status(struct ifnet *, struct ifmediareq *);
|
void vio_media_status(struct ifnet *, struct ifmediareq *);
|
||||||
int vio_ctrleof(struct virtqueue *);
|
int vio_ctrleof(struct virtqueue *);
|
||||||
int vio_wait_ctrl(struct vio_softc *sc);
|
int vio_ctrl_start(struct vio_softc *, uint8_t, uint8_t, int, int *);
|
||||||
int vio_wait_ctrl_done(struct vio_softc *sc);
|
int vio_ctrl_submit(struct vio_softc *, int);
|
||||||
|
void vio_ctrl_finish(struct vio_softc *);
|
||||||
void vio_ctrl_wakeup(struct vio_softc *, enum vio_ctrl_state);
|
void vio_ctrl_wakeup(struct vio_softc *, enum vio_ctrl_state);
|
||||||
int vio_alloc_mem(struct vio_softc *);
|
int vio_alloc_mem(struct vio_softc *);
|
||||||
int vio_alloc_dmamem(struct vio_softc *);
|
int vio_alloc_dmamem(struct vio_softc *);
|
||||||
@ -1483,6 +1484,111 @@ vio_tx_drain(struct vio_softc *sc)
|
|||||||
/*
|
/*
|
||||||
* Control vq
|
* Control vq
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Lock the control queue and the sc_ctrl_* structs and prepare a request.
|
||||||
|
*
|
||||||
|
* If this function succeeds, the caller must also call either
|
||||||
|
* vio_ctrl_submit() or virtio_enqueue_abort(), in both cases followed by
|
||||||
|
* vio_ctrl_finish().
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
vio_ctrl_start(struct vio_softc *sc, uint8_t class, uint8_t cmd, int nslots,
|
||||||
|
int *slotp)
|
||||||
|
{
|
||||||
|
struct virtio_softc *vsc = sc->sc_virtio;
|
||||||
|
struct virtqueue *vq = sc->sc_ctl_vq;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
splassert(IPL_NET);
|
||||||
|
|
||||||
|
while (sc->sc_ctrl_inuse != FREE) {
|
||||||
|
if (sc->sc_ctrl_inuse == RESET || vio_needs_reset(sc))
|
||||||
|
return ENXIO;
|
||||||
|
r = tsleep_nsec(&sc->sc_ctrl_inuse, PRIBIO, "viowait", INFSLP);
|
||||||
|
if (r != 0)
|
||||||
|
return r;
|
||||||
|
}
|
||||||
|
sc->sc_ctrl_inuse = INUSE;
|
||||||
|
|
||||||
|
sc->sc_ctrl_cmd->class = class;
|
||||||
|
sc->sc_ctrl_cmd->command = cmd;
|
||||||
|
|
||||||
|
r = virtio_enqueue_prep(vq, slotp);
|
||||||
|
if (r != 0)
|
||||||
|
panic("%s: %s virtio_enqueue_prep: control vq busy",
|
||||||
|
sc->sc_dev.dv_xname, __func__);
|
||||||
|
r = virtio_enqueue_reserve(vq, *slotp, nslots + 2);
|
||||||
|
if (r != 0)
|
||||||
|
panic("%s: %s virtio_enqueue_reserve: control vq busy",
|
||||||
|
sc->sc_dev.dv_xname, __func__);
|
||||||
|
|
||||||
|
vio_dmamem_enqueue(vsc, sc, vq, *slotp, sc->sc_ctrl_cmd,
|
||||||
|
sizeof(*sc->sc_ctrl_cmd), 1);
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Submit a control queue request and wait for the result.
|
||||||
|
*
|
||||||
|
* vio_ctrl_start() must have been called successfully.
|
||||||
|
* After vio_ctrl_submit(), the caller may inspect the
|
||||||
|
* data returned from the hypervisor. Afterwards, the caller
|
||||||
|
* must always call vio_ctrl_finish().
|
||||||
|
*/
|
||||||
|
int
|
||||||
|
vio_ctrl_submit(struct vio_softc *sc, int slot)
|
||||||
|
{
|
||||||
|
struct virtio_softc *vsc = sc->sc_virtio;
|
||||||
|
struct virtqueue *vq = sc->sc_ctl_vq;
|
||||||
|
int r;
|
||||||
|
|
||||||
|
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_status,
|
||||||
|
sizeof(*sc->sc_ctrl_status), 0);
|
||||||
|
|
||||||
|
virtio_enqueue_commit(vsc, vq, slot, 1);
|
||||||
|
|
||||||
|
while (sc->sc_ctrl_inuse != DONE) {
|
||||||
|
if (sc->sc_ctrl_inuse == RESET || vio_needs_reset(sc))
|
||||||
|
return ENXIO;
|
||||||
|
r = tsleep_nsec(&sc->sc_ctrl_inuse, PRIBIO, "viodone",
|
||||||
|
VIRTIO_NET_CTRL_TIMEOUT);
|
||||||
|
if (r != 0) {
|
||||||
|
if (r == EWOULDBLOCK)
|
||||||
|
printf("%s: ctrl queue timeout\n",
|
||||||
|
sc->sc_dev.dv_xname);
|
||||||
|
vio_ctrl_wakeup(sc, RESET);
|
||||||
|
return ENXIO;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_cmd,
|
||||||
|
sizeof(*sc->sc_ctrl_cmd), BUS_DMASYNC_POSTWRITE);
|
||||||
|
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_status,
|
||||||
|
sizeof(*sc->sc_ctrl_status), BUS_DMASYNC_POSTREAD);
|
||||||
|
|
||||||
|
if (sc->sc_ctrl_status->ack != VIRTIO_NET_OK)
|
||||||
|
return EIO;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* Unlock the control queue and the sc_ctrl_* structs.
|
||||||
|
*
|
||||||
|
* It is ok to call this function if the control queue is marked dead
|
||||||
|
* due to a fatal error.
|
||||||
|
*/
|
||||||
|
void
|
||||||
|
vio_ctrl_finish(struct vio_softc *sc)
|
||||||
|
{
|
||||||
|
if (sc->sc_ctrl_inuse == RESET)
|
||||||
|
return;
|
||||||
|
|
||||||
|
vio_ctrl_wakeup(sc, FREE);
|
||||||
|
}
|
||||||
|
|
||||||
/* issue a VIRTIO_NET_CTRL_RX class command and wait for completion */
|
/* issue a VIRTIO_NET_CTRL_RX class command and wait for completion */
|
||||||
int
|
int
|
||||||
vio_ctrl_rx(struct vio_softc *sc, int cmd, int onoff)
|
vio_ctrl_rx(struct vio_softc *sc, int cmd, int onoff)
|
||||||
@ -1491,51 +1597,24 @@ vio_ctrl_rx(struct vio_softc *sc, int cmd, int onoff)
|
|||||||
struct virtqueue *vq = sc->sc_ctl_vq;
|
struct virtqueue *vq = sc->sc_ctl_vq;
|
||||||
int r, slot;
|
int r, slot;
|
||||||
|
|
||||||
splassert(IPL_NET);
|
r = vio_ctrl_start(sc, VIRTIO_NET_CTRL_RX, cmd, 1, &slot);
|
||||||
|
if (r != 0)
|
||||||
if ((r = vio_wait_ctrl(sc)) != 0)
|
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
sc->sc_ctrl_cmd->class = VIRTIO_NET_CTRL_RX;
|
|
||||||
sc->sc_ctrl_cmd->command = cmd;
|
|
||||||
sc->sc_ctrl_rx->onoff = onoff;
|
sc->sc_ctrl_rx->onoff = onoff;
|
||||||
|
|
||||||
r = virtio_enqueue_prep(vq, &slot);
|
|
||||||
if (r != 0)
|
|
||||||
panic("%s: %s virtio_enqueue_prep: control vq busy",
|
|
||||||
sc->sc_dev.dv_xname, __func__);
|
|
||||||
r = virtio_enqueue_reserve(vq, slot, 3);
|
|
||||||
if (r != 0)
|
|
||||||
panic("%s: %s virtio_enqueue_reserve: control vq busy",
|
|
||||||
sc->sc_dev.dv_xname, __func__);
|
|
||||||
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_cmd,
|
|
||||||
sizeof(*sc->sc_ctrl_cmd), 1);
|
|
||||||
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_rx,
|
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_rx,
|
||||||
sizeof(*sc->sc_ctrl_rx), 1);
|
sizeof(*sc->sc_ctrl_rx), 1);
|
||||||
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_status,
|
|
||||||
sizeof(*sc->sc_ctrl_status), 0);
|
|
||||||
virtio_enqueue_commit(vsc, vq, slot, 1);
|
|
||||||
|
|
||||||
if ((r = vio_wait_ctrl_done(sc)) != 0)
|
r = vio_ctrl_submit(sc, slot);
|
||||||
goto out;
|
|
||||||
|
|
||||||
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_cmd,
|
|
||||||
sizeof(*sc->sc_ctrl_cmd), BUS_DMASYNC_POSTWRITE);
|
|
||||||
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_rx,
|
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_rx,
|
||||||
sizeof(*sc->sc_ctrl_rx), BUS_DMASYNC_POSTWRITE);
|
sizeof(*sc->sc_ctrl_rx), BUS_DMASYNC_POSTWRITE);
|
||||||
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_status,
|
if (r != 0)
|
||||||
sizeof(*sc->sc_ctrl_status), BUS_DMASYNC_POSTREAD);
|
|
||||||
|
|
||||||
if (sc->sc_ctrl_status->ack == VIRTIO_NET_OK) {
|
|
||||||
r = 0;
|
|
||||||
} else {
|
|
||||||
printf("%s: ctrl cmd %d failed\n", sc->sc_dev.dv_xname, cmd);
|
printf("%s: ctrl cmd %d failed\n", sc->sc_dev.dv_xname, cmd);
|
||||||
r = EIO;
|
|
||||||
}
|
|
||||||
|
|
||||||
DPRINTF("%s: cmd %d %d: %d\n", __func__, cmd, onoff, r);
|
DPRINTF("%s: cmd %d %d: %d\n", __func__, cmd, onoff, r);
|
||||||
out:
|
|
||||||
vio_ctrl_wakeup(sc, FREE);
|
vio_ctrl_finish(sc);
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1546,87 +1625,29 @@ vio_ctrl_guest_offloads(struct vio_softc *sc, uint64_t features)
|
|||||||
struct virtqueue *vq = sc->sc_ctl_vq;
|
struct virtqueue *vq = sc->sc_ctl_vq;
|
||||||
int r, slot;
|
int r, slot;
|
||||||
|
|
||||||
splassert(IPL_NET);
|
r = vio_ctrl_start(sc, VIRTIO_NET_CTRL_GUEST_OFFLOADS,
|
||||||
|
VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET, 1, &slot);
|
||||||
if ((r = vio_wait_ctrl(sc)) != 0)
|
if (r != 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
sc->sc_ctrl_cmd->class = VIRTIO_NET_CTRL_GUEST_OFFLOADS;
|
|
||||||
sc->sc_ctrl_cmd->command = VIRTIO_NET_CTRL_GUEST_OFFLOADS_SET;
|
|
||||||
sc->sc_ctrl_guest_offloads->offloads = features;
|
sc->sc_ctrl_guest_offloads->offloads = features;
|
||||||
|
|
||||||
r = virtio_enqueue_prep(vq, &slot);
|
|
||||||
if (r != 0)
|
|
||||||
panic("%s: %s virtio_enqueue_prep: control vq busy",
|
|
||||||
sc->sc_dev.dv_xname, __func__);
|
|
||||||
r = virtio_enqueue_reserve(vq, slot, 3);
|
|
||||||
if (r != 0)
|
|
||||||
panic("%s: %s virtio_enqueue_reserve: control vq busy",
|
|
||||||
sc->sc_dev.dv_xname, __func__);
|
|
||||||
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_cmd,
|
|
||||||
sizeof(*sc->sc_ctrl_cmd), 1);
|
|
||||||
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_guest_offloads,
|
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_guest_offloads,
|
||||||
sizeof(*sc->sc_ctrl_guest_offloads), 1);
|
sizeof(*sc->sc_ctrl_guest_offloads), 1);
|
||||||
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_status,
|
|
||||||
sizeof(*sc->sc_ctrl_status), 0);
|
|
||||||
virtio_enqueue_commit(vsc, vq, slot, 1);
|
|
||||||
|
|
||||||
if ((r = vio_wait_ctrl_done(sc)) != 0)
|
r = vio_ctrl_submit(sc, slot);
|
||||||
goto out;
|
|
||||||
|
|
||||||
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_cmd,
|
|
||||||
sizeof(*sc->sc_ctrl_cmd), BUS_DMASYNC_POSTWRITE);
|
|
||||||
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_guest_offloads,
|
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_guest_offloads,
|
||||||
sizeof(*sc->sc_ctrl_guest_offloads), BUS_DMASYNC_POSTWRITE);
|
sizeof(*sc->sc_ctrl_guest_offloads), BUS_DMASYNC_POSTWRITE);
|
||||||
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_status,
|
|
||||||
sizeof(*sc->sc_ctrl_status), BUS_DMASYNC_POSTREAD);
|
|
||||||
|
|
||||||
if (sc->sc_ctrl_status->ack == VIRTIO_NET_OK) {
|
if (r != 0) {
|
||||||
r = 0;
|
|
||||||
} else {
|
|
||||||
printf("%s: offload features 0x%llx failed\n",
|
printf("%s: offload features 0x%llx failed\n",
|
||||||
sc->sc_dev.dv_xname, features);
|
sc->sc_dev.dv_xname, features);
|
||||||
r = EIO;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
DPRINTF("%s: features 0x%llx: %d\n", __func__, features, r);
|
DPRINTF("%s: offload features 0x%llx: %d\n", __func__, features, r);
|
||||||
out:
|
|
||||||
vio_ctrl_wakeup(sc, FREE);
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
vio_ctrl_finish(sc);
|
||||||
vio_wait_ctrl(struct vio_softc *sc)
|
|
||||||
{
|
|
||||||
int r = 0;
|
|
||||||
|
|
||||||
while (sc->sc_ctrl_inuse != FREE) {
|
|
||||||
if (sc->sc_ctrl_inuse == RESET || vio_needs_reset(sc))
|
|
||||||
return ENXIO;
|
|
||||||
r = tsleep_nsec(&sc->sc_ctrl_inuse, PRIBIO, "viowait", INFSLP);
|
|
||||||
}
|
|
||||||
sc->sc_ctrl_inuse = INUSE;
|
|
||||||
|
|
||||||
return r;
|
|
||||||
}
|
|
||||||
|
|
||||||
int
|
|
||||||
vio_wait_ctrl_done(struct vio_softc *sc)
|
|
||||||
{
|
|
||||||
int r = 0;
|
|
||||||
|
|
||||||
while (sc->sc_ctrl_inuse != DONE) {
|
|
||||||
if (sc->sc_ctrl_inuse == RESET || vio_needs_reset(sc))
|
|
||||||
return ENXIO;
|
|
||||||
r = tsleep_nsec(&sc->sc_ctrl_inuse, PRIBIO, "viodone",
|
|
||||||
VIRTIO_NET_CTRL_TIMEOUT);
|
|
||||||
if (r == EWOULDBLOCK) {
|
|
||||||
printf("%s: ctrl queue timeout\n",
|
|
||||||
sc->sc_dev.dv_xname);
|
|
||||||
vio_ctrl_wakeup(sc, RESET);
|
|
||||||
return ENXIO;
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1665,55 +1686,35 @@ vio_set_rx_filter(struct vio_softc *sc)
|
|||||||
struct virtio_softc *vsc = sc->sc_virtio;
|
struct virtio_softc *vsc = sc->sc_virtio;
|
||||||
struct virtqueue *vq = sc->sc_ctl_vq;
|
struct virtqueue *vq = sc->sc_ctl_vq;
|
||||||
int r, slot;
|
int r, slot;
|
||||||
|
size_t len_uc, len_mc;
|
||||||
|
|
||||||
splassert(IPL_NET);
|
|
||||||
|
|
||||||
if ((r = vio_wait_ctrl(sc)) != 0)
|
r = vio_ctrl_start(sc, VIRTIO_NET_CTRL_MAC,
|
||||||
|
VIRTIO_NET_CTRL_MAC_TABLE_SET, 2, &slot);
|
||||||
|
if (r != 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
sc->sc_ctrl_cmd->class = VIRTIO_NET_CTRL_MAC;
|
len_uc = sizeof(*sc->sc_ctrl_mac_tbl_uc) +
|
||||||
sc->sc_ctrl_cmd->command = VIRTIO_NET_CTRL_MAC_TABLE_SET;
|
sc->sc_ctrl_mac_tbl_uc->nentries * ETHER_ADDR_LEN;
|
||||||
|
len_mc = sizeof(*sc->sc_ctrl_mac_tbl_mc) +
|
||||||
|
sc->sc_ctrl_mac_tbl_mc->nentries * ETHER_ADDR_LEN;
|
||||||
|
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_mac_tbl_uc, len_uc,
|
||||||
|
1);
|
||||||
|
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_mac_tbl_mc, len_mc,
|
||||||
|
1);
|
||||||
|
|
||||||
r = virtio_enqueue_prep(vq, &slot);
|
r = vio_ctrl_submit(sc, slot);
|
||||||
if (r != 0)
|
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_mac_tbl_uc, len_uc,
|
||||||
panic("%s: %s virtio_enqueue_prep: control vq busy",
|
BUS_DMASYNC_POSTWRITE);
|
||||||
sc->sc_dev.dv_xname, __func__);
|
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_mac_tbl_mc, len_mc,
|
||||||
r = virtio_enqueue_reserve(vq, slot, 4);
|
BUS_DMASYNC_POSTWRITE);
|
||||||
if (r != 0)
|
|
||||||
panic("%s: %s virtio_enqueue_reserve: control vq busy",
|
|
||||||
sc->sc_dev.dv_xname, __func__);
|
|
||||||
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_cmd,
|
|
||||||
sizeof(*sc->sc_ctrl_cmd), 1);
|
|
||||||
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_mac_tbl_uc,
|
|
||||||
sizeof(*sc->sc_ctrl_mac_tbl_uc) +
|
|
||||||
sc->sc_ctrl_mac_tbl_uc->nentries * ETHER_ADDR_LEN, 1);
|
|
||||||
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_mac_tbl_mc,
|
|
||||||
sizeof(*sc->sc_ctrl_mac_tbl_mc) +
|
|
||||||
sc->sc_ctrl_mac_tbl_mc->nentries * ETHER_ADDR_LEN, 1);
|
|
||||||
vio_dmamem_enqueue(vsc, sc, vq, slot, sc->sc_ctrl_status,
|
|
||||||
sizeof(*sc->sc_ctrl_status), 0);
|
|
||||||
virtio_enqueue_commit(vsc, vq, slot, 1);
|
|
||||||
|
|
||||||
if ((r = vio_wait_ctrl_done(sc)) != 0)
|
if (r != 0) {
|
||||||
goto out;
|
|
||||||
|
|
||||||
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_cmd,
|
|
||||||
sizeof(*sc->sc_ctrl_cmd), BUS_DMASYNC_POSTWRITE);
|
|
||||||
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_mac_info,
|
|
||||||
VIO_CTRL_MAC_INFO_SIZE, BUS_DMASYNC_POSTWRITE);
|
|
||||||
VIO_DMAMEM_SYNC(vsc, sc, sc->sc_ctrl_status,
|
|
||||||
sizeof(*sc->sc_ctrl_status), BUS_DMASYNC_POSTREAD);
|
|
||||||
|
|
||||||
if (sc->sc_ctrl_status->ack == VIRTIO_NET_OK) {
|
|
||||||
r = 0;
|
|
||||||
} else {
|
|
||||||
/* The host's filter table is not large enough */
|
/* The host's filter table is not large enough */
|
||||||
printf("%s: failed setting rx filter\n", sc->sc_dev.dv_xname);
|
printf("%s: failed setting rx filter\n", sc->sc_dev.dv_xname);
|
||||||
r = EIO;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
out:
|
vio_ctrl_finish(sc);
|
||||||
vio_ctrl_wakeup(sc, FREE);
|
|
||||||
return r;
|
return r;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: nfs_bio.c,v 1.86 2024/05/01 13:15:59 jsg Exp $ */
|
/* $OpenBSD: nfs_bio.c,v 1.87 2024/09/18 05:21:19 jsg Exp $ */
|
||||||
/* $NetBSD: nfs_bio.c,v 1.25.4.2 1996/07/08 20:47:04 jtc Exp $ */
|
/* $NetBSD: nfs_bio.c,v 1.25.4.2 1996/07/08 20:47:04 jtc Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -616,7 +616,7 @@ nfs_doio(struct buf *bp, struct proc *p)
|
|||||||
default:
|
default:
|
||||||
panic("nfs_doio: type %x unexpected", vp->v_type);
|
panic("nfs_doio: type %x unexpected", vp->v_type);
|
||||||
break;
|
break;
|
||||||
};
|
}
|
||||||
if (error) {
|
if (error) {
|
||||||
bp->b_flags |= B_ERROR;
|
bp->b_flags |= B_ERROR;
|
||||||
bp->b_error = error;
|
bp->b_error = error;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: nfs_serv.c,v 1.129 2024/09/11 12:22:34 claudio Exp $ */
|
/* $OpenBSD: nfs_serv.c,v 1.130 2024/09/18 05:21:19 jsg Exp $ */
|
||||||
/* $NetBSD: nfs_serv.c,v 1.34 1997/05/12 23:37:12 fvdl Exp $ */
|
/* $NetBSD: nfs_serv.c,v 1.34 1997/05/12 23:37:12 fvdl Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1110,7 +1110,7 @@ nfsrv_create(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
|
|||||||
if (nd.ni_vp == NULL)
|
if (nd.ni_vp == NULL)
|
||||||
va.va_mode = 0;
|
va.va_mode = 0;
|
||||||
break;
|
break;
|
||||||
};
|
}
|
||||||
va.va_type = VREG;
|
va.va_type = VREG;
|
||||||
} else {
|
} else {
|
||||||
sp = (struct nfsv2_sattr *)nfsm_dissect(&info, NFSX_V2SATTR);
|
sp = (struct nfsv2_sattr *)nfsm_dissect(&info, NFSX_V2SATTR);
|
||||||
@ -1133,7 +1133,7 @@ nfsrv_create(struct nfsrv_descript *nfsd, struct nfssvc_sock *slp,
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: nfs_socket.c,v 1.153 2024/09/11 12:22:34 claudio Exp $ */
|
/* $OpenBSD: nfs_socket.c,v 1.154 2024/09/18 05:21:19 jsg Exp $ */
|
||||||
/* $NetBSD: nfs_socket.c,v 1.27 1996/04/15 20:20:00 thorpej Exp $ */
|
/* $NetBSD: nfs_socket.c,v 1.27 1996/04/15 20:20:00 thorpej Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -1125,7 +1125,7 @@ nfs_rephead(int siz, struct nfsrv_descript *nd, struct nfssvc_sock *slp,
|
|||||||
*tl = 0;
|
*tl = 0;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
};
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
*mrq = mreq;
|
*mrq = mreq;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: nfs_srvcache.c,v 1.31 2024/05/01 13:15:59 jsg Exp $ */
|
/* $OpenBSD: nfs_srvcache.c,v 1.32 2024/09/18 05:21:19 jsg Exp $ */
|
||||||
/* $NetBSD: nfs_srvcache.c,v 1.12 1996/02/18 11:53:49 fvdl Exp $ */
|
/* $NetBSD: nfs_srvcache.c,v 1.12 1996/02/18 11:53:49 fvdl Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -204,7 +204,7 @@ nfsrv_getcache(struct nfsrv_descript *nd, struct nfssvc_sock *slp,
|
|||||||
rp->rc_flag |= RC_NAM;
|
rp->rc_flag |= RC_NAM;
|
||||||
rp->rc_nam = m_copym(nd->nd_nam, 0, M_COPYALL, M_WAIT);
|
rp->rc_nam = m_copym(nd->nd_nam, 0, M_COPYALL, M_WAIT);
|
||||||
break;
|
break;
|
||||||
};
|
}
|
||||||
rp->rc_proc = nd->nd_procnum;
|
rp->rc_proc = nd->nd_procnum;
|
||||||
hash = NFSRCHASH(nd->nd_retxid);
|
hash = NFSRCHASH(nd->nd_retxid);
|
||||||
LIST_INSERT_HEAD(hash, rp, rc_hash);
|
LIST_INSERT_HEAD(hash, rp, rc_hash);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: nfs_srvsubs.c,v 1.1 2024/09/09 03:50:14 jsg Exp $ */
|
/* $OpenBSD: nfs_srvsubs.c,v 1.2 2024/09/18 05:21:19 jsg Exp $ */
|
||||||
/* $NetBSD: nfs_subs.c,v 1.27.4.3 1996/07/08 20:34:24 jtc Exp $ */
|
/* $NetBSD: nfs_subs.c,v 1.27.4.3 1996/07/08 20:34:24 jtc Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -389,7 +389,7 @@ netaddr_match(int family, union nethostaddr *haddr, struct mbuf *nam)
|
|||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
break;
|
break;
|
||||||
};
|
}
|
||||||
return (0);
|
return (0);
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -462,7 +462,7 @@ nfsm_srvsattr(struct mbuf **mp, struct vattr *va, struct mbuf *mrep,
|
|||||||
va->va_vaflags |= VA_UTIMES_CHANGE;
|
va->va_vaflags |= VA_UTIMES_CHANGE;
|
||||||
getnanotime(&va->va_atime);
|
getnanotime(&va->va_atime);
|
||||||
break;
|
break;
|
||||||
};
|
}
|
||||||
|
|
||||||
tl = (uint32_t *)nfsm_dissect(&info, NFSX_UNSIGNED);
|
tl = (uint32_t *)nfsm_dissect(&info, NFSX_UNSIGNED);
|
||||||
if (tl == NULL)
|
if (tl == NULL)
|
||||||
@ -480,7 +480,7 @@ nfsm_srvsattr(struct mbuf **mp, struct vattr *va, struct mbuf *mrep,
|
|||||||
va->va_vaflags |= VA_UTIMES_CHANGE;
|
va->va_vaflags |= VA_UTIMES_CHANGE;
|
||||||
getnanotime(&va->va_mtime);
|
getnanotime(&va->va_mtime);
|
||||||
break;
|
break;
|
||||||
};
|
}
|
||||||
|
|
||||||
*dposp = info.nmi_dpos;
|
*dposp = info.nmi_dpos;
|
||||||
*mp = info.nmi_md;
|
*mp = info.nmi_md;
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: nfs_syscalls.c,v 1.127 2024/06/26 01:40:49 jsg Exp $ */
|
/* $OpenBSD: nfs_syscalls.c,v 1.128 2024/09/18 05:21:19 jsg Exp $ */
|
||||||
/* $NetBSD: nfs_syscalls.c,v 1.19 1996/02/18 11:53:52 fvdl Exp $ */
|
/* $NetBSD: nfs_syscalls.c,v 1.19 1996/02/18 11:53:52 fvdl Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -469,7 +469,7 @@ loop:
|
|||||||
m_freem(nd->nd_mrep);
|
m_freem(nd->nd_mrep);
|
||||||
m_freem(nd->nd_nam2);
|
m_freem(nd->nd_nam2);
|
||||||
break;
|
break;
|
||||||
};
|
}
|
||||||
|
|
||||||
if (nd) {
|
if (nd) {
|
||||||
pool_put(&nfsrv_descript_pl, nd);
|
pool_put(&nfsrv_descript_pl, nd);
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: nfs_vnops.c,v 1.203 2024/09/12 09:04:51 claudio Exp $ */
|
/* $OpenBSD: nfs_vnops.c,v 1.204 2024/09/18 05:21:19 jsg Exp $ */
|
||||||
/* $NetBSD: nfs_vnops.c,v 1.62.4.1 1996/07/08 20:26:52 jtc Exp $ */
|
/* $NetBSD: nfs_vnops.c,v 1.62.4.1 1996/07/08 20:26:52 jtc Exp $ */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
@ -653,7 +653,7 @@ nfs_setattr(void *v)
|
|||||||
tsize = np->n_size;
|
tsize = np->n_size;
|
||||||
np->n_size = np->n_vattr.va_size = vap->va_size;
|
np->n_size = np->n_vattr.va_size = vap->va_size;
|
||||||
uvm_vnp_setsize(vp, np->n_size);
|
uvm_vnp_setsize(vp, np->n_size);
|
||||||
};
|
}
|
||||||
} else if ((vap->va_mtime.tv_nsec != VNOVAL ||
|
} else if ((vap->va_mtime.tv_nsec != VNOVAL ||
|
||||||
vap->va_atime.tv_nsec != VNOVAL) &&
|
vap->va_atime.tv_nsec != VNOVAL) &&
|
||||||
vp->v_type == VREG &&
|
vp->v_type == VREG &&
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
/* $OpenBSD: blocks.c,v 1.23 2024/02/28 09:36:11 claudio Exp $ */
|
/* $OpenBSD: blocks.c,v 1.24 2024/09/18 10:22:36 job Exp $ */
|
||||||
/*
|
/*
|
||||||
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
|
* Copyright (c) 2019 Kristaps Dzonsons <kristaps@bsd.lv>
|
||||||
*
|
*
|
||||||
@ -121,7 +121,7 @@ blkhash_set(struct blktab *p, const struct blkset *bset)
|
|||||||
void
|
void
|
||||||
blkhash_free(struct blktab *p)
|
blkhash_free(struct blktab *p)
|
||||||
{
|
{
|
||||||
|
free(p->q);
|
||||||
free(p->blks);
|
free(p->blks);
|
||||||
free(p);
|
free(p);
|
||||||
}
|
}
|
||||||
|
@ -1,4 +1,4 @@
|
|||||||
.\" $OpenBSD: vm.conf.5,v 1.64 2024/09/11 15:42:52 bluhm Exp $
|
.\" $OpenBSD: vm.conf.5,v 1.65 2024/09/16 22:30:01 bluhm Exp $
|
||||||
.\"
|
.\"
|
||||||
.\" Copyright (c) 2015 Mike Larkin <mlarkin@openbsd.org>
|
.\" Copyright (c) 2015 Mike Larkin <mlarkin@openbsd.org>
|
||||||
.\" Copyright (c) 2015 Reyk Floeter <reyk@openbsd.org>
|
.\" Copyright (c) 2015 Reyk Floeter <reyk@openbsd.org>
|
||||||
@ -15,7 +15,7 @@
|
|||||||
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
.\" ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
|
||||||
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
.\" OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
|
||||||
.\"
|
.\"
|
||||||
.Dd $Mdocdate: September 11 2024 $
|
.Dd $Mdocdate: September 16 2024 $
|
||||||
.Dt VM.CONF 5
|
.Dt VM.CONF 5
|
||||||
.Os
|
.Os
|
||||||
.Sh NAME
|
.Sh NAME
|
||||||
@ -324,7 +324,11 @@ If only
|
|||||||
is given,
|
is given,
|
||||||
only the group is set.
|
only the group is set.
|
||||||
.It Ic sev
|
.It Ic sev
|
||||||
Enables SEV for guest.
|
Enables AMD Secure Encrypted Virtualization for guest.
|
||||||
|
.Xr vmd 8
|
||||||
|
uses
|
||||||
|
.Xr psp 4
|
||||||
|
to configure the guest for SEV.
|
||||||
.El
|
.El
|
||||||
.Sh VM INSTANCES
|
.Sh VM INSTANCES
|
||||||
It is possible to use configured or running VMs as a template for
|
It is possible to use configured or running VMs as a template for
|
||||||
|
Loading…
Reference in New Issue
Block a user