git: 41badad786f9 - stable/13 - bhyve: Allocate struct vm_exit on the stack in vm_loop.
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 26 Jan 2023 22:35:01 UTC
The branch stable/13 has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=41badad786f9f7576bead7e35d6265ce95e9b005 commit 41badad786f9f7576bead7e35d6265ce95e9b005 Author: John Baldwin <jhb@FreeBSD.org> AuthorDate: 2022-12-21 18:32:45 +0000 Commit: John Baldwin <jhb@FreeBSD.org> CommitDate: 2023-01-26 22:18:00 +0000 bhyve: Allocate struct vm_exit on the stack in vm_loop. The global vmexit[] array is no longer needed to smuggle the rip value from fbsdrun_addcpu() to vm_loop(). Reviewed by: corvink, markj Differential Revision: https://reviews.freebsd.org/D37644 (cherry picked from commit a20c00c60e1c022f77a7bc638f29d3d6d9456953) --- usr.sbin/bhyve/bhyverun.c | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/usr.sbin/bhyve/bhyverun.c b/usr.sbin/bhyve/bhyverun.c index e40229e79828..31cb7c2ceaf3 100644 --- a/usr.sbin/bhyve/bhyverun.c +++ b/usr.sbin/bhyve/bhyverun.c @@ -196,8 +196,6 @@ static cpuset_t cpumask; static void vm_loop(struct vmctx *ctx, int vcpu); -static struct vm_exit *vmexit; - static struct bhyvestats { uint64_t vmexit_bogus; uint64_t vmexit_reqidle; @@ -619,7 +617,7 @@ vmexit_inout(struct vmctx *ctx, struct vm_exit *vme, int *pvcpu) fprintf(stderr, "Unhandled %s%c 0x%04x at 0x%lx\n", in ? "in" : "out", bytes == 1 ? 'b' : (bytes == 2 ? 'w' : 'l'), - port, vmexit->rip); + port, vme->rip); return (VMEXIT_ABORT); } else { return (VMEXIT_CONTINUE); @@ -968,6 +966,7 @@ static vmexit_handler_t handler[VM_EXITCODE_MAX] = { static void vm_loop(struct vmctx *ctx, int vcpu) { + struct vm_exit vme; int error, rc; enum vm_exitcode exitcode; cpuset_t active_cpus; @@ -982,18 +981,18 @@ vm_loop(struct vmctx *ctx, int vcpu) assert(CPU_ISSET(vcpu, &active_cpus)); while (1) { - error = vm_run(ctx, vcpu, &vmexit[vcpu]); + error = vm_run(ctx, vcpu, &vme); if (error != 0) break; - exitcode = vmexit[vcpu].exitcode; + exitcode = vme.exitcode; if (exitcode >= VM_EXITCODE_MAX || handler[exitcode] == NULL) { fprintf(stderr, "vm_loop: unexpected exitcode 0x%x\n", exitcode); exit(4); } - rc = (*handler[exitcode])(ctx, &vmexit[vcpu], &vcpu); + rc = (*handler[exitcode])(ctx, &vme, &vcpu); switch (rc) { case VMEXIT_CONTINUE: @@ -1582,7 +1581,6 @@ main(int argc, char *argv[]) #endif /* Allocate per-VCPU resources. */ - vmexit = calloc(guest_ncpus, sizeof(*vmexit)); mt_vmm_info = calloc(guest_ncpus, sizeof(*mt_vmm_info)); /*