Print this page
13275 bhyve needs richer INIT/SIPI support
Reviewed by: Robert Mustacchi <rm@fingolfin.org>
Approved by: Gordon Ross <gordon.w.ross@gmail.com>

*** 1300,1309 **** --- 1300,1321 ---- error = ioctl(ctx->fd, VM_SET_X2APIC_STATE, &x2apic); return (error); } + #ifndef __FreeBSD__ + int + vcpu_reset(struct vmctx *vmctx, int vcpu) + { + struct vm_vcpu_reset vvr; + + vvr.vcpuid = vcpu; + vvr.kind = VRK_RESET; + + return (ioctl(vmctx->fd, VM_RESET_CPU, &vvr)); + } + #else /* __FreeBSD__ */ /* * From Intel Vol 3a: * Table 9-1. IA-32 Processor States Following Power-up, Reset or INIT */ int
*** 1456,1465 **** --- 1468,1478 ---- error = 0; done: return (error); } + #endif /* __FreeBSD__ */ int vm_get_gpa_pmap(struct vmctx *ctx, uint64_t gpa, uint64_t *pte, int *num) { int error, i;
*** 1837,1846 **** --- 1850,1892 ---- if (ioctl(ctx->fd, VM_WRLOCK_CYCLE, 0) != 0) { return (errno); } return (0); } + + int + vm_get_run_state(struct vmctx *ctx, int vcpu, enum vcpu_run_state *state, + uint8_t *sipi_vector) + { + struct vm_run_state data; + + data.vcpuid = vcpu; + if (ioctl(ctx->fd, VM_GET_RUN_STATE, &data) != 0) { + return (errno); + } + + *state = data.state; + *sipi_vector = data.sipi_vector; + return (0); + } + + int + vm_set_run_state(struct vmctx *ctx, int vcpu, enum vcpu_run_state state, + uint8_t sipi_vector) + { + struct vm_run_state data; + + data.vcpuid = vcpu; + data.state = state; + data.sipi_vector = sipi_vector; + if (ioctl(ctx->fd, VM_SET_RUN_STATE, &data) != 0) { + return (errno); + } + + return (0); + } + #endif /* __FreeBSD__ */ #ifdef __FreeBSD__ const cap_ioctl_t * vm_get_ioctls(size_t *len)