diff options
author | Jerry Jelinek <jerry.jelinek@joyent.com> | 2020-06-24 11:27:37 +0000 |
---|---|---|
committer | Jerry Jelinek <jerry.jelinek@joyent.com> | 2020-06-24 11:27:37 +0000 |
commit | 2a60785665a571597ad245604f125a60b3d1277e (patch) | |
tree | 92e63dcff5cd0c5509a3e60e44c9cd31427ab2ed /usr/src/lib | |
parent | 220080cf98234dae4756754274ff9d34f5ea7668 (diff) | |
parent | 2ca761b0b92364bea5ec829f3ac6187c20057a0a (diff) | |
download | illumos-joyent-2a60785665a571597ad245604f125a60b3d1277e.tar.gz |
[illumos-gate merge]
commit 2ca761b0b92364bea5ec829f3ac6187c20057a0a
12880 sparc: pkglint errors
commit e386029b3dc09ced91c6806c9767572be25b584b
12879 sparc: unresolved dependencies
commit e156a47b6ebcf79f0515365c32a22c7ed38dc19b
12871 bhyve ioctls needn't the struct size
commit b58b977e8fdb738e19dfe72999e4f57a62e9d05f
12869 bhyve kernel/user split should be clearer
Diffstat (limited to 'usr/src/lib')
-rw-r--r-- | usr/src/lib/libvmmapi/common/mapfile-vers | 2 | ||||
-rw-r--r-- | usr/src/lib/libvmmapi/common/vmmapi.c | 22 | ||||
-rw-r--r-- | usr/src/lib/libvmmapi/common/vmmapi.h | 22 |
3 files changed, 43 insertions, 3 deletions
diff --git a/usr/src/lib/libvmmapi/common/mapfile-vers b/usr/src/lib/libvmmapi/common/mapfile-vers index f8fe636386..56eb5a7b95 100644 --- a/usr/src/lib/libvmmapi/common/mapfile-vers +++ b/usr/src/lib/libvmmapi/common/mapfile-vers @@ -12,6 +12,7 @@ # # Copyright 2013 Pluribus Networks Inc. # Copyright 2019 Joyent, Inc. +# Copyright 2020 Oxide Computer Company # # @@ -74,6 +75,7 @@ SYMBOL_VERSION ILLUMOSprivate { vm_gla2gpa; vm_gla2gpa_nofault; vm_inject_exception; + vm_inject_fault; vm_inject_nmi; vm_isa_assert_irq; vm_isa_deassert_irq; diff --git a/usr/src/lib/libvmmapi/common/vmmapi.c b/usr/src/lib/libvmmapi/common/vmmapi.c index b4c96d5455..9589d09ae1 100644 --- a/usr/src/lib/libvmmapi/common/vmmapi.c +++ b/usr/src/lib/libvmmapi/common/vmmapi.c @@ -70,9 +70,6 @@ __FBSDID("$FreeBSD$"); #include <machine/vmm.h> #include <machine/vmm_dev.h> -#ifndef __FreeBSD__ -#include <sys/vmm_impl.h> -#endif #include "vmmapi.h" @@ -819,6 +816,25 @@ vm_inject_exception(struct vmctx *ctx, int vcpu, int vector, int errcode_valid, return (ioctl(ctx->fd, VM_INJECT_EXCEPTION, &exc)); } +#ifndef __FreeBSD__ +void +vm_inject_fault(struct vmctx *ctx, int vcpu, int vector, int errcode_valid, + int errcode) +{ + int error; + struct vm_exception exc; + + exc.cpuid = vcpu; + exc.vector = vector; + exc.error_code = errcode; + exc.error_code_valid = errcode_valid; + exc.restart_instruction = 1; + error = ioctl(ctx->fd, VM_INJECT_EXCEPTION, &exc); + + assert(error == 0); +} +#endif /* __FreeBSD__ */ + int vm_apicid2vcpu(struct vmctx *ctx, int apicid) { diff --git a/usr/src/lib/libvmmapi/common/vmmapi.h b/usr/src/lib/libvmmapi/common/vmmapi.h index f7a8731c9a..997267b8cc 100644 --- a/usr/src/lib/libvmmapi/common/vmmapi.h +++ b/usr/src/lib/libvmmapi/common/vmmapi.h @@ -46,6 +46,7 @@ #include <sys/param.h> #include <sys/cpuset.h> +#include <x86/segments.h> #include <stdbool.h> @@ -170,6 +171,27 @@ int vm_reinit(struct vmctx *ctx); int vm_apicid2vcpu(struct vmctx *ctx, int apicid); int vm_inject_exception(struct vmctx *ctx, int vcpu, int vector, int errcode_valid, uint32_t errcode, int restart_instruction); +#ifndef __FreeBSD__ +void vm_inject_fault(struct vmctx *ctx, int vcpu, int vector, + int errcode_valid, int errcode); + +static __inline void +vm_inject_gp(struct vmctx *ctx, int vcpuid) +{ + vm_inject_fault(ctx, vcpuid, IDT_GP, 1, 0); +} + +static __inline void +vm_inject_ac(struct vmctx *ctx, int vcpuid, int errcode) +{ + vm_inject_fault(ctx, vcpuid, IDT_AC, 1, errcode); +} +static __inline void +vm_inject_ss(struct vmctx *ctx, int vcpuid, int errcode) +{ + vm_inject_fault(ctx, vcpuid, IDT_SS, 1, errcode); +} +#endif int vm_lapic_irq(struct vmctx *ctx, int vcpu, int vector); int vm_lapic_local_irq(struct vmctx *ctx, int vcpu, int vector); int vm_lapic_msi(struct vmctx *ctx, uint64_t addr, uint64_t msg); |