git: 756fa1c09673 - main - vmm: Unify implementations of vcpu_cleanup()

From: Mark Johnston <markj_at_FreeBSD.org>
Date: Fri, 10 Oct 2025 13:24:40 UTC
The branch main has been updated by markj:

URL: https://cgit.FreeBSD.org/src/commit/?id=756fa1c09673ba555f603574af5943f455daff90

commit 756fa1c09673ba555f603574af5943f455daff90
Author:     Mark Johnston <markj@FreeBSD.org>
AuthorDate: 2025-10-10 13:16:45 +0000
Commit:     Mark Johnston <markj@FreeBSD.org>
CommitDate: 2025-10-10 13:22:40 +0000

    vmm: Unify implementations of vcpu_cleanup()
    
    Different vmm implementations were freeing the per-vCPU structure in
    different places.  Make the implementations consistent.  No functional
    change intended.
    
    Reviewed by:    corvink
    MFC after:      2 weeks
    Sponsored by:   The FreeBSD Foundation
    Sponsored by:   Klara, Inc.
    Differential Revision:  https://reviews.freebsd.org/D53010
---
 sys/arm64/vmm/vmm.c | 3 +--
 sys/riscv/vmm/vmm.c | 3 +--
 2 files changed, 2 insertions(+), 4 deletions(-)

diff --git a/sys/arm64/vmm/vmm.c b/sys/arm64/vmm/vmm.c
index a551a2807183..5a0b627b2fe2 100644
--- a/sys/arm64/vmm/vmm.c
+++ b/sys/arm64/vmm/vmm.c
@@ -274,6 +274,7 @@ vcpu_cleanup(struct vcpu *vcpu, bool destroy)
 		vmm_stat_free(vcpu->stats);
 		fpu_save_area_free(vcpu->guestfpu);
 		vcpu_lock_destroy(vcpu);
+		free(vcpu, M_VMM);
 	}
 }
 
@@ -585,8 +586,6 @@ vm_cleanup(struct vm *vm, bool destroy)
 		vmmops_vmspace_free(vm->vmspace);
 		vm->vmspace = NULL;
 
-		for (i = 0; i < vm->maxcpus; i++)
-			free(vm->vcpu[i], M_VMM);
 		free(vm->vcpu, M_VMM);
 		sx_destroy(&vm->vcpus_init_lock);
 	}
diff --git a/sys/riscv/vmm/vmm.c b/sys/riscv/vmm/vmm.c
index ec4514f70fa6..b1e5c0e52ac8 100644
--- a/sys/riscv/vmm/vmm.c
+++ b/sys/riscv/vmm/vmm.c
@@ -174,6 +174,7 @@ vcpu_cleanup(struct vcpu *vcpu, bool destroy)
 		vmm_stat_free(vcpu->stats);
 		fpu_save_area_free(vcpu->guestfpu);
 		vcpu_lock_destroy(vcpu);
+		free(vcpu, M_VMM);
 	}
 }
 
@@ -453,8 +454,6 @@ vm_cleanup(struct vm *vm, bool destroy)
 		vmmops_vmspace_free(vm->vmspace);
 		vm->vmspace = NULL;
 
-		for (i = 0; i < vm->maxcpus; i++)
-			free(vm->vcpu[i], M_VMM);
 		free(vm->vcpu, M_VMM);
 		sx_destroy(&vm->vcpus_init_lock);
 	}