svn commit: r242385 - projects/bhyve/usr.sbin/bhyve
Peter Grehan
grehan at FreeBSD.org
Wed Oct 31 03:29:53 UTC 2012
Author: grehan
Date: Wed Oct 31 03:29:52 2012
New Revision: 242385
URL: http://svn.freebsd.org/changeset/base/242385
Log:
Exit if the requested num vCPUs exceeds the maximum rather
than waiting until AP bringup detects an out-of-range vCPU.
While here, fix all error output to use fprintf(stderr, ...
Reviewed by: neel
Reported by: @allanjude
Modified:
projects/bhyve/usr.sbin/bhyve/fbsdrun.c
Modified: projects/bhyve/usr.sbin/bhyve/fbsdrun.c
==============================================================================
--- projects/bhyve/usr.sbin/bhyve/fbsdrun.c Wed Oct 31 02:54:44 2012 (r242384)
+++ projects/bhyve/usr.sbin/bhyve/fbsdrun.c Wed Oct 31 03:29:52 2012 (r242385)
@@ -213,7 +213,8 @@ fbsdrun_addcpu(struct vmctx *ctx, int vc
int error;
if (cpumask & (1 << vcpu)) {
- printf("addcpu: attempting to add existing cpu %d\n", vcpu);
+ fprintf(stderr, "addcpu: attempting to add existing cpu %d\n",
+ vcpu);
exit(1);
}
@@ -325,7 +326,8 @@ vmexit_inout(struct vmctx *ctx, struct v
static int
vmexit_rdmsr(struct vmctx *ctx, struct vm_exit *vme, int *pvcpu)
{
- printf("vm exit rdmsr 0x%x, cpu %d\n", vme->u.msr.code, *pvcpu);
+ fprintf(stderr, "vm exit rdmsr 0x%x, cpu %d\n", vme->u.msr.code,
+ *pvcpu);
return (VMEXIT_ABORT);
}
@@ -366,13 +368,14 @@ static int
vmexit_vmx(struct vmctx *ctx, struct vm_exit *vmexit, int *pvcpu)
{
- printf("vm exit[%d]\n", *pvcpu);
- printf("\treason\t\tVMX\n");
- printf("\trip\t\t0x%016lx\n", vmexit->rip);
- printf("\tinst_length\t%d\n", vmexit->inst_length);
- printf("\terror\t\t%d\n", vmexit->u.vmx.error);
- printf("\texit_reason\t%u\n", vmexit->u.vmx.exit_reason);
- printf("\tqualification\t0x%016lx\n", vmexit->u.vmx.exit_qualification);
+ fprintf(stderr, "vm exit[%d]\n", *pvcpu);
+ fprintf(stderr, "\treason\t\tVMX\n");
+ fprintf(stderr, "\trip\t\t0x%016lx\n", vmexit->rip);
+ fprintf(stderr, "\tinst_length\t%d\n", vmexit->inst_length);
+ fprintf(stderr, "\terror\t\t%d\n", vmexit->u.vmx.error);
+ fprintf(stderr, "\texit_reason\t%u\n", vmexit->u.vmx.exit_reason);
+ fprintf(stderr, "\tqualification\t0x%016lx\n",
+ vmexit->u.vmx.exit_qualification);
return (VMEXIT_ABORT);
}
@@ -445,11 +448,12 @@ vmexit_paging(struct vmctx *ctx, struct
if (err) {
if (err == EINVAL) {
- printf("Failed to emulate instruction at 0x%lx\n",
- vmexit->rip);
+ fprintf(stderr,
+ "Failed to emulate instruction at 0x%lx\n",
+ vmexit->rip);
} else if (err == ESRCH) {
- printf("Unhandled memory access to 0x%lx\n",
- vmexit->u.paging.gpa);
+ fprintf(stderr, "Unhandled memory access to 0x%lx\n",
+ vmexit->u.paging.gpa);
}
return (VMEXIT_ABORT);
@@ -643,6 +647,12 @@ main(int argc, char *argv[])
if (guest_ncpus <= 1)
guest_vcpu_mux = 0;
+ if (guest_ncpus > VM_MAXCPU) {
+ fprintf(stderr, "%d vCPUs requested, max %d\n",
+ guest_ncpus, VM_MAXCPU);
+ exit(1);
+ }
+
/* vmexit on hlt if guest is muxed */
if (guest_vcpu_mux) {
guest_vmexit_on_hlt = 1;
@@ -660,7 +670,7 @@ main(int argc, char *argv[])
if (fbsdrun_vmexit_on_hlt()) {
err = vm_get_capability(ctx, BSP, VM_CAP_HALT_EXIT, &tmp);
if (err < 0) {
- printf("VM exit on HLT not supported\n");
+ fprintf(stderr, "VM exit on HLT not supported\n");
exit(1);
}
vm_set_capability(ctx, BSP, VM_CAP_HALT_EXIT, 1);
@@ -673,7 +683,8 @@ main(int argc, char *argv[])
*/
err = vm_get_capability(ctx, BSP, VM_CAP_PAUSE_EXIT, &tmp);
if (err < 0) {
- printf("SMP mux requested, no pause support\n");
+ fprintf(stderr,
+ "SMP mux requested, no pause support\n");
exit(1);
}
vm_set_capability(ctx, BSP, VM_CAP_PAUSE_EXIT, 1);
@@ -686,7 +697,7 @@ main(int argc, char *argv[])
err = vm_set_x2apic_state(ctx, BSP, X2APIC_ENABLED);
if (err) {
- printf("Unable to set x2apic state (%d)\n", err);
+ fprintf(stderr, "Unable to set x2apic state (%d)\n", err);
exit(1);
}
More information about the svn-src-projects
mailing list