Page MenuHomeFreeBSD

D14473.id39622.diff
No OneTemporary

D14473.id39622.diff

Index: stand/userboot/userboot.h
===================================================================
--- stand/userboot/userboot.h
+++ stand/userboot/userboot.h
@@ -41,6 +41,14 @@
*/
#define USERBOOT_VERSION_4 4
+/*
+ * Version 5 adds callbacks to set unrestricted guest
+ * capabilities and reset the vcpu state. The callback
+ * structure backward compatible (new callbacks have
+ * been added at the tail end).
+ */
+#define USERBOOT_VERSION_5 5
+
/*
* Exit codes from the loader
*/
@@ -210,4 +218,22 @@
int (*vm_set_register)(void *arg, int vcpu, int reg, uint64_t val);
int (*vm_set_desc)(void *arg, int vcpu, int reg, uint64_t base,
u_int limit, u_int access);
+
+ /*
+ * Version 5 additions.
+ *
+ * vm_get_unrestricted_guest checks support for the UNRESTRICTED_GUEST
+ * capability and if supported, sets 'retval'. If unsupported, an error
+ * code is returned.
+ *
+ * vm_set_unrestricted_guest sets the UNRESTRICTED_GUEST capability if
+ * supported, and returns an error code otherwise.
+ *
+ * vcpu_reset initializes the vCPU state as defined in
+ * Intel Vol 3a, Table 9.1. IA-32 Processor States Following Power-up,
+ * Reset or INIT
+ */
+ int (*vm_get_unrestricted_guest)(void* arg, int vcpu, int *retval);
+ int (*vm_set_unrestricted_guest)(void* arg, int vcpu, int val);
+ int (*vcpu_reset)(void* arg, int vcpu);
};
Index: usr.sbin/bhyveload/bhyveload.c
===================================================================
--- usr.sbin/bhyveload/bhyveload.c
+++ usr.sbin/bhyveload/bhyveload.c
@@ -560,6 +560,33 @@
return (vm_set_desc(ctx, vcpu, reg, base, limit, access));
}
+static int
+cb_vm_get_unrestricted_guest(void* arg, int vcpu, int *retval)
+{
+
+ return (vm_get_capability(ctx, vcpu,
+ VM_CAP_UNRESTRICTED_GUEST, retval));
+}
+
+static int
+cb_vm_set_unrestricted_guest(void* arg, int vcpu, int val)
+{
+ int error, tmp;
+
+ if ((error = cb_vm_get_unrestricted_guest(arg, vcpu, &tmp)))
+ return (error);
+
+ return (vm_set_capability(ctx, vcpu,
+ VM_CAP_UNRESTRICTED_GUEST, val));
+}
+
+static int
+cb_vcpu_reset(void* arg, int vcpu)
+{
+
+ return (vcpu_reset(ctx, vcpu));
+}
+
static struct loader_callbacks cb = {
.getc = cb_getc,
.putc = cb_putc,
@@ -593,6 +620,11 @@
/* Version 4 additions */
.vm_set_register = cb_vm_set_register,
.vm_set_desc = cb_vm_set_desc,
+
+ /* Version 5 additions */
+ .vm_set_unrestricted_guest = cb_vm_set_unrestricted_guest,
+ .vm_get_unrestricted_guest = cb_vm_get_unrestricted_guest,
+ .vcpu_reset = cb_vcpu_reset,
};
static int

File Metadata

Mime Type
text/plain
Expires
Tue, May 26, 12:38 PM (10 h, 22 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
33530642
Default Alt Text
D14473.id39622.diff (2 KB)

Event Timeline