summaryrefslogtreecommitdiff
path: root/usr/src/lib
diff options
context:
space:
mode:
authorJerry Jelinek <jerry.jelinek@joyent.com>2020-06-24 11:27:37 +0000
committerJerry Jelinek <jerry.jelinek@joyent.com>2020-06-24 11:27:37 +0000
commit2a60785665a571597ad245604f125a60b3d1277e (patch)
tree92e63dcff5cd0c5509a3e60e44c9cd31427ab2ed /usr/src/lib
parent220080cf98234dae4756754274ff9d34f5ea7668 (diff)
parent2ca761b0b92364bea5ec829f3ac6187c20057a0a (diff)
downloadillumos-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-vers2
-rw-r--r--usr/src/lib/libvmmapi/common/vmmapi.c22
-rw-r--r--usr/src/lib/libvmmapi/common/vmmapi.h22
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);