diff options
author | grehan <grehan@FreeBSD.org> | 2013-10-04 23:29:07 +0000 |
---|---|---|
committer | grehan <grehan@FreeBSD.org> | 2013-10-04 23:29:07 +0000 |
commit | 26b6c9487afc3a61ddbfb5e0f5392ff4587fff45 (patch) | |
tree | 1a4cba1dbe257f758f42df0e24f7dd6def3ac10d /usr.sbin/bhyve/bhyverun.c | |
parent | 677c1f8ce94e86a14e9a4e83af5746dad45ff36e (diff) | |
download | FreeBSD-src-26b6c9487afc3a61ddbfb5e0f5392ff4587fff45.zip FreeBSD-src-26b6c9487afc3a61ddbfb5e0f5392ff4587fff45.tar.gz |
Remove obsolete cmd-line options and code associated with
these.
The mux-vcpus option may return at some point, given it's utility
in finding bhyve (and FreeBSD) bugs.
Approved by: re@ (blanket)
Discussed with: neel@
Diffstat (limited to 'usr.sbin/bhyve/bhyverun.c')
-rw-r--r-- | usr.sbin/bhyve/bhyverun.c | 176 |
1 files changed, 26 insertions, 150 deletions
diff --git a/usr.sbin/bhyve/bhyverun.c b/usr.sbin/bhyve/bhyverun.c index 43eea98..5550f77 100644 --- a/usr.sbin/bhyve/bhyverun.c +++ b/usr.sbin/bhyve/bhyverun.c @@ -41,7 +41,6 @@ __FBSDID("$FreeBSD$"); #include <unistd.h> #include <assert.h> #include <errno.h> -#include <signal.h> #include <pthread.h> #include <pthread_np.h> @@ -61,9 +60,6 @@ __FBSDID("$FreeBSD$"); #include "spinup_ap.h" #include "rtc.h" -#define DEFAULT_GUEST_HZ 100 -#define DEFAULT_GUEST_TSLICE 200 - #define GUEST_NIO_PORT 0x488 /* guest upcalls via i/o port */ #define VMEXIT_SWITCH 0 /* force vcpu switch in mux mode */ @@ -77,14 +73,11 @@ __FBSDID("$FreeBSD$"); typedef int (*vmexit_handler_t)(struct vmctx *, struct vm_exit *, int *vcpu); -int guest_tslice = DEFAULT_GUEST_TSLICE; -int guest_hz = DEFAULT_GUEST_HZ; char *vmname; int guest_ncpus; static int pincpu = -1; -static int guest_vcpu_mux; static int guest_vmexit_on_hlt, guest_vmexit_on_pause, disable_x2apic; static int foundcpus; @@ -102,7 +95,7 @@ static void vm_loop(struct vmctx *ctx, int vcpu, uint64_t rip); struct vm_exit vmexit[VM_MAXCPU]; -struct fbsdstats { +struct bhyvestats { uint64_t vmexit_bogus; uint64_t vmexit_bogus_switch; uint64_t vmexit_hlt; @@ -125,28 +118,24 @@ usage(int code) { fprintf(stderr, - "Usage: %s [-aehABHIP][-g <gdb port>][-z <hz>][-s <pci>]" - "[-S <pci>][-p pincpu][-n <pci>][-m lowmem][-M highmem]" + "Usage: %s [-aehAHIP][-g <gdb port>][-s <pci>][-S <pci>]" + "[-c vcpus][-p pincpu][-m mem]" " <vmname>\n" " -a: local apic is in XAPIC mode (default is X2APIC)\n" " -A: create an ACPI table\n" " -g: gdb port (default is %d and 0 means don't open)\n" " -c: # cpus (default 1)\n" " -p: pin vcpu 'n' to host cpu 'pincpu + n'\n" - " -B: inject breakpoint exception on vm entry\n" " -H: vmexit from the guest on hlt\n" " -I: present an ioapic to the guest\n" " -P: vmexit from the guest on pause\n" " -e: exit on unhandled i/o access\n" " -h: help\n" - " -z: guest hz (default is %d)\n" " -s: <slot,driver,configinfo> PCI slot config\n" " -S: <slot,driver,configinfo> legacy PCI slot config\n" - " -m: memory size in MB\n" - " -x: mux vcpus to 1 hcpu\n" - " -t: mux vcpu timeslice hz (default %d)\n", - progname, DEFAULT_GDB_PORT, DEFAULT_GUEST_HZ, - DEFAULT_GUEST_TSLICE); + " -m: memory size in MB\n", + progname, DEFAULT_GDB_PORT); + exit(code); } @@ -178,13 +167,6 @@ fbsdrun_vmexit_on_hlt(void) return (guest_vmexit_on_hlt); } -int -fbsdrun_muxed(void) -{ - - return (guest_vcpu_mux); -} - static void * fbsdrun_start_thread(void *param) { @@ -226,7 +208,7 @@ fbsdrun_addcpu(struct vmctx *ctx, int vcpu, uint64_t rip) vmexit[vcpu].rip = rip; vmexit[vcpu].inst_length = 0; - if (vcpu == BSP || !guest_vcpu_mux){ + if (vcpu == BSP) { mt_vmm_info[vcpu].mt_ctx = ctx; mt_vmm_info[vcpu].mt_vcpu = vcpu; @@ -264,17 +246,10 @@ static int vmexit_handle_notify(struct vmctx *ctx, struct vm_exit *vme, int *pvcpu, uint32_t eax) { -#if PG_DEBUG /* put all types of debug here */ - if (eax == 0) { - pause_noswitch = 1; - } else if (eax == 1) { - pause_noswitch = 0; - } else { - pause_noswitch = 0; - if (eax == 5) { - vm_set_capability(ctx, *pvcpu, VM_CAP_MTRAP_EXIT, 1); - } - } +#if BHYVE_DEBUG + /* + * put guest-driven debug here + */ #endif return (VMEXIT_CONTINUE); } @@ -337,11 +312,6 @@ vmexit_wrmsr(struct vmctx *ctx, struct vm_exit *vme, int *pvcpu) newcpu = emulate_wrmsr(ctx, *pvcpu, vme->u.msr.code,vme->u.msr.wval); - if (guest_vcpu_mux && *pvcpu != newcpu) { - retval = VMEXIT_SWITCH; - *pvcpu = newcpu; - } - return (retval); } @@ -354,11 +324,6 @@ vmexit_spinup_ap(struct vmctx *ctx, struct vm_exit *vme, int *pvcpu) newcpu = spinup_ap(ctx, *pvcpu, vme->u.spinup_ap.vcpu, vme->u.spinup_ap.rip); - if (guest_vcpu_mux && *pvcpu != newcpu) { - retval = VMEXIT_SWITCH; - *pvcpu = newcpu; - } - return (retval); } @@ -378,58 +343,42 @@ vmexit_vmx(struct vmctx *ctx, struct vm_exit *vmexit, int *pvcpu) return (VMEXIT_ABORT); } -static int bogus_noswitch = 1; - static int vmexit_bogus(struct vmctx *ctx, struct vm_exit *vmexit, int *pvcpu) { + stats.vmexit_bogus++; - if (!guest_vcpu_mux || guest_ncpus == 1 || bogus_noswitch) { - return (VMEXIT_RESTART); - } else { - stats.vmexit_bogus_switch++; - vmexit->inst_length = 0; - *pvcpu = -1; - return (VMEXIT_SWITCH); - } + return (VMEXIT_RESTART); } static int vmexit_hlt(struct vmctx *ctx, struct vm_exit *vmexit, int *pvcpu) { + stats.vmexit_hlt++; - if (fbsdrun_muxed()) { - *pvcpu = -1; - return (VMEXIT_SWITCH); - } else { - /* - * Just continue execution with the next instruction. We use - * the HLT VM exit as a way to be friendly with the host - * scheduler. - */ - return (VMEXIT_CONTINUE); - } -} -static int pause_noswitch; + /* + * Just continue execution with the next instruction. We use + * the HLT VM exit as a way to be friendly with the host + * scheduler. + */ + return (VMEXIT_CONTINUE); +} static int vmexit_pause(struct vmctx *ctx, struct vm_exit *vmexit, int *pvcpu) { + stats.vmexit_pause++; - if (fbsdrun_muxed() && !pause_noswitch) { - *pvcpu = -1; - return (VMEXIT_SWITCH); - } else { - return (VMEXIT_CONTINUE); - } + return (VMEXIT_CONTINUE); } static int vmexit_mtrap(struct vmctx *ctx, struct vm_exit *vmexit, int *pvcpu) { + stats.vmexit_mtrap++; return (VMEXIT_RESTART); @@ -460,39 +409,6 @@ vmexit_paging(struct vmctx *ctx, struct vm_exit *vmexit, int *pvcpu) return (VMEXIT_CONTINUE); } -static void -sigalrm(int sig) -{ - return; -} - -static void -setup_timeslice(void) -{ - struct sigaction sa; - struct itimerval itv; - int error; - - /* - * Setup a realtime timer to generate a SIGALRM at a - * frequency of 'guest_tslice' ticks per second. - */ - sigemptyset(&sa.sa_mask); - sa.sa_flags = 0; - sa.sa_handler = sigalrm; - - error = sigaction(SIGALRM, &sa, NULL); - assert(error == 0); - - itv.it_interval.tv_sec = 0; - itv.it_interval.tv_usec = 1000000 / guest_tslice; - itv.it_value.tv_sec = 0; - itv.it_value.tv_usec = 1000000 / guest_tslice; - - error = setitimer(ITIMER_REAL, &itv, NULL); - assert(error == 0); -} - static vmexit_handler_t handler[VM_EXITCODE_MAX] = { [VM_EXITCODE_INOUT] = vmexit_inout, [VM_EXITCODE_VMX] = vmexit_vmx, @@ -511,9 +427,6 @@ vm_loop(struct vmctx *ctx, int vcpu, uint64_t rip) int error, rc, prevcpu; enum vm_exitcode exitcode; - if (guest_vcpu_mux) - setup_timeslice(); - if (pincpu >= 0) { CPU_ZERO(&mask); CPU_SET(pincpu + vcpu, &mask); @@ -550,15 +463,6 @@ vm_loop(struct vmctx *ctx, int vcpu, uint64_t rip) rc = (*handler[exitcode])(ctx, &vmexit[vcpu], &vcpu); switch (rc) { - case VMEXIT_SWITCH: - assert(guest_vcpu_mux); - if (vcpu == -1) { - stats.cpu_switch_rotate++; - vcpu = fbsdrun_get_next_cpu(prevcpu); - } else { - stats.cpu_switch_direct++; - } - /* fall through */ case VMEXIT_CONTINUE: rip = vmexit[vcpu].rip + vmexit[vcpu].inst_length; break; @@ -594,21 +498,20 @@ num_vcpus_allowed(struct vmctx *ctx) int main(int argc, char *argv[]) { - int c, error, gdb_port, inject_bkpt, tmp, err, ioapic, bvmcons; + int c, error, gdb_port, tmp, err, ioapic, bvmcons; int max_vcpus; struct vmctx *ctx; uint64_t rip; size_t memsize; bvmcons = 0; - inject_bkpt = 0; progname = basename(argv[0]); gdb_port = DEFAULT_GDB_PORT; guest_ncpus = 1; ioapic = 0; memsize = 256 * MB; - while ((c = getopt(argc, argv, "abehABHIPxp:g:c:z:s:S:n:m:")) != -1) { + while ((c = getopt(argc, argv, "abehAHIPp:g:c:s:S:m:")) != -1) { switch (c) { case 'a': disable_x2apic = 1; @@ -619,12 +522,6 @@ main(int argc, char *argv[]) case 'b': bvmcons = 1; break; - case 'B': - inject_bkpt = 1; - break; - case 'x': - guest_vcpu_mux = 1; - break; case 'p': pincpu = atoi(optarg); break; @@ -634,12 +531,6 @@ main(int argc, char *argv[]) case 'g': gdb_port = atoi(optarg); break; - case 'z': - guest_hz = atoi(optarg); - break; - case 't': - guest_tslice = atoi(optarg); - break; case 's': if (pci_parse_slot(optarg, 0) != 0) exit(1); @@ -677,16 +568,6 @@ main(int argc, char *argv[]) if (argc != 1) usage(1); - /* No need to mux if guest is uni-processor */ - if (guest_ncpus <= 1) - guest_vcpu_mux = 0; - - /* vmexit on hlt if guest is muxed */ - if (guest_vcpu_mux) { - guest_vmexit_on_hlt = 1; - guest_vmexit_on_pause = 1; - } - vmname = argv[0]; ctx = vm_open(vmname); @@ -765,11 +646,6 @@ main(int argc, char *argv[]) error = vm_get_register(ctx, BSP, VM_REG_GUEST_RIP, &rip); assert(error == 0); - if (inject_bkpt) { - error = vm_inject_event(ctx, BSP, VM_HW_EXCEPTION, IDT_BP); - assert(error == 0); - } - /* * build the guest tables, MP etc. */ |