From nobody Thu Jan 26 22:11:59 2023 X-Original-To: dev-commits-src-branches@mlmmj.nyi.freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2610:1c1:1:606c::19:1]) by mlmmj.nyi.freebsd.org (Postfix) with ESMTP id 4P2w0w0X7Gz3c8KX; Thu, 26 Jan 2023 22:12:00 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from mxrelay.nyi.freebsd.org (mxrelay.nyi.freebsd.org [IPv6:2610:1c1:1:606c::19:3]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256 client-signature RSA-PSS (4096 bits) client-digest SHA256) (Client CN "mxrelay.nyi.freebsd.org", Issuer "R3" (verified OK)) by mx1.freebsd.org (Postfix) with ESMTPS id 4P2w0v63Lbz3vtt; Thu, 26 Jan 2023 22:11:59 +0000 (UTC) (envelope-from git@FreeBSD.org) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1674771119; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=mK8clAXT6fg+JeyUkp+8pKys+BRl3+ysRwNWM6YIMpc=; b=wq2QUrNubvrpGBTq85ePCXnoXrPikeFlBrQFVNI53dixoAAGP0zsAOe9UyjkjbsA7usvk/ Xt4KLT24DbmCxVXJlDegRzGwd6yjb3wAWzWTiTDGXVD5jB/4abj8T3b+94uoWQKDTYcSHd 1FIDOVhP9W8qcRvVoj/DLQKbDI5P/9l0OW5yq9h83FpvyKFCZl8hLUlOIWoFMgg6yJJrw2 mHmPV0eFfcjPVt9OZ8ZAuc+7oU1EGvVz0ho2D+kaNC8cBoEmAjC56R4t2YrMl/OEZq2/YL ft26gW//odl1dRwZ1eIhKwv+fFWvRptlBIIlOEdsASjFOt6NG/2IQXUcrPzS5g== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=freebsd.org; s=dkim; t=1674771119; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding; bh=mK8clAXT6fg+JeyUkp+8pKys+BRl3+ysRwNWM6YIMpc=; b=WHbwbXZmunQdwz/K52/rXH5XbFyfhEuATJkt/NljJPKdx4nKSllRq8blOQQhrW3BqZGhuD gdEvGGEN9ociT19ZJyjBNufG6EdI1bT8sJ6WLoA7II+zuUG5syTRY2jR4maQSuQlzc38YK YgowSk4FugXzJMyJqaXanRxhuv0XLAtLcd48MCdJIjG1fC8CQyRA6VrIrd8GFjaUwcPkWW aj9u/ftovD1TOddqdPQDE5mRVmGuEfkgYJoK801kyre86XbQSTWCq+BeWMgbed1UKMBpXE 18Ffeag7UZ0v/mDDTHFghr0R6mfqUVg7Oe1JwSIw/QOwxEce8jZVqF7VpSe7qw== ARC-Authentication-Results: i=1; mx1.freebsd.org; none ARC-Seal: i=1; s=dkim; d=freebsd.org; t=1674771119; a=rsa-sha256; cv=none; b=t5OuwURWTtuiBEPKeu05401Ct9Rti6svv8bProUnRiUZ7pL5j1A2iSYKSd+kp2vZx7R284 2gmwGHWKh2X6i7AXGY0nsD2o43UAKUaQpqb9WWQ81noUbkHCghrzGJ1eT+z/2Bpo6zszWD Kusb5tj+O0E99JLqFDBgucb4DnBk7oOAFgMrLZpweyVn8kX0mjFM9Yldjj0wEFyuJ7iKnE LNyPa2OE42phcCh3R8daSyrnQZWLytBXTLO1rzlh+jLVReq8PTHBV3mdW0HLV3Jto22zoI eNAIf4dvuFS9isUcg4PkmtqJzvguxz9bo8hSTzoKUdiH2HGliumvI4KT8+9D3g== Received: from gitrepo.freebsd.org (gitrepo.freebsd.org [IPv6:2610:1c1:1:6068::e6a:5]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (Client did not present a certificate) by mxrelay.nyi.freebsd.org (Postfix) with ESMTPS id 4P2w0v4hTPzm5d; Thu, 26 Jan 2023 22:11:59 +0000 (UTC) (envelope-from git@FreeBSD.org) Received: from gitrepo.freebsd.org ([127.0.1.44]) by gitrepo.freebsd.org (8.16.1/8.16.1) with ESMTP id 30QMBxsN022079; Thu, 26 Jan 2023 22:11:59 GMT (envelope-from git@gitrepo.freebsd.org) Received: (from git@localhost) by gitrepo.freebsd.org (8.16.1/8.16.1/Submit) id 30QMBxKp022078; Thu, 26 Jan 2023 22:11:59 GMT (envelope-from git) Date: Thu, 26 Jan 2023 22:11:59 GMT Message-Id: <202301262211.30QMBxKp022078@gitrepo.freebsd.org> To: src-committers@FreeBSD.org, dev-commits-src-all@FreeBSD.org, dev-commits-src-branches@FreeBSD.org From: John Baldwin Subject: git: 67ade508ce0a - stable/13 - vmm: Use struct vcpu in the rendezvous code. List-Id: Commits to the stable branches of the FreeBSD src repository List-Archive: https://lists.freebsd.org/archives/dev-commits-src-branches List-Help: List-Post: List-Subscribe: List-Unsubscribe: Sender: owner-dev-commits-src-branches@freebsd.org X-BeenThere: dev-commits-src-branches@freebsd.org MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 8bit X-Git-Committer: jhb X-Git-Repository: src X-Git-Refname: refs/heads/stable/13 X-Git-Reftype: branch X-Git-Commit: 67ade508ce0a64692dcf7a37b7fd3fb4dd25970e Auto-Submitted: auto-generated X-ThisMailContainsUnwantedMimeParts: N The branch stable/13 has been updated by jhb: URL: https://cgit.FreeBSD.org/src/commit/?id=67ade508ce0a64692dcf7a37b7fd3fb4dd25970e commit 67ade508ce0a64692dcf7a37b7fd3fb4dd25970e Author: John Baldwin AuthorDate: 2022-11-18 18:03:34 +0000 Commit: John Baldwin CommitDate: 2023-01-26 22:02:21 +0000 vmm: Use struct vcpu in the rendezvous code. Reviewed by: corvink, markj Differential Revision: https://reviews.freebsd.org/D37165 (cherry picked from commit d8be3d523dd50a17f48957c1bb2e0cd7bbf02cab) --- sys/amd64/include/vmm.h | 4 ++-- sys/amd64/vmm/io/vioapic.c | 11 +++++------ sys/amd64/vmm/io/vlapic.c | 10 +++++----- sys/amd64/vmm/io/vlapic.h | 2 +- sys/amd64/vmm/vmm.c | 36 +++++++++++++++++------------------- 5 files changed, 30 insertions(+), 33 deletions(-) diff --git a/sys/amd64/include/vmm.h b/sys/amd64/include/vmm.h index dd1bae47fc41..b8f641910e4f 100644 --- a/sys/amd64/include/vmm.h +++ b/sys/amd64/include/vmm.h @@ -313,8 +313,8 @@ int vm_restore_time(struct vm *vm); * by 'dest' to be stalled. The caller should not rely on any vcpus making * forward progress when the rendezvous is in progress. */ -typedef void (*vm_rendezvous_func_t)(struct vm *vm, int vcpuid, void *arg); -int vm_smp_rendezvous(struct vm *vm, int vcpuid, cpuset_t dest, +typedef void (*vm_rendezvous_func_t)(struct vcpu *vcpu, void *arg); +int vm_smp_rendezvous(struct vcpu *vcpu, cpuset_t dest, vm_rendezvous_func_t func, void *arg); cpuset_t vm_active_cpus(struct vm *vm); cpuset_t vm_debug_cpus(struct vm *vm); diff --git a/sys/amd64/vmm/io/vioapic.c b/sys/amd64/vmm/io/vioapic.c index 66a394af0d00..aee58849dd7d 100644 --- a/sys/amd64/vmm/io/vioapic.c +++ b/sys/amd64/vmm/io/vioapic.c @@ -237,7 +237,7 @@ vioapic_pulse_irq(struct vm *vm, int irq) * configuration. */ static void -vioapic_update_tmr(struct vm *vm, int vcpuid, void *arg) +vioapic_update_tmr(struct vcpu *vcpu, void *arg) { struct vioapic *vioapic; struct vlapic *vlapic; @@ -245,8 +245,8 @@ vioapic_update_tmr(struct vm *vm, int vcpuid, void *arg) int delmode, pin, vector; bool level, phys; - vlapic = vm_lapic(vm_vcpu(vm, vcpuid)); - vioapic = vm_ioapic(vm); + vlapic = vm_lapic(vcpu); + vioapic = vm_ioapic(vcpu_vm(vcpu)); VIOAPIC_LOCK(vioapic); /* @@ -317,10 +317,9 @@ vioapic_write(struct vioapic *vioapic, struct vcpu *vcpu, uint32_t addr, { uint64_t data64, mask64; uint64_t last, changed; - int regnum, pin, lshift, vcpuid; + int regnum, pin, lshift; cpuset_t allvcpus; - vcpuid = vcpu_vcpuid(vcpu); regnum = addr & 0xff; switch (regnum) { case IOAPIC_ID: @@ -374,7 +373,7 @@ vioapic_write(struct vioapic *vioapic, struct vcpu *vcpu, uint32_t addr, "vlapic trigger-mode register", pin); VIOAPIC_UNLOCK(vioapic); allvcpus = vm_active_cpus(vioapic->vm); - (void)vm_smp_rendezvous(vioapic->vm, vcpuid, allvcpus, + (void)vm_smp_rendezvous(vcpu, allvcpus, vioapic_update_tmr, NULL); VIOAPIC_LOCK(vioapic); } diff --git a/sys/amd64/vmm/io/vlapic.c b/sys/amd64/vmm/io/vlapic.c index 5075336e54bf..67a09401efb1 100644 --- a/sys/amd64/vmm/io/vlapic.c +++ b/sys/amd64/vmm/io/vlapic.c @@ -1200,9 +1200,9 @@ vlapic_icrlo_write_handler(struct vlapic *vlapic, bool *retu) } static void -vlapic_handle_init(struct vm *vm, int vcpuid, void *arg) +vlapic_handle_init(struct vcpu *vcpu, void *arg) { - struct vlapic *vlapic = vm_lapic(vm_vcpu(vm, vcpuid)); + struct vlapic *vlapic = vm_lapic(vcpu); vlapic_reset(vlapic); @@ -1211,13 +1211,13 @@ vlapic_handle_init(struct vm *vm, int vcpuid, void *arg) } int -vm_handle_ipi(struct vm *vm, int vcpuid, struct vm_exit *vme, bool *retu) +vm_handle_ipi(struct vcpu *vcpu, struct vm_exit *vme, bool *retu) { *retu = true; switch (vme->u.ipi.mode) { case APIC_DELMODE_INIT: - vm_smp_rendezvous(vm, vcpuid, vme->u.ipi.dmask, - vlapic_handle_init, NULL); + vm_smp_rendezvous(vcpu, vme->u.ipi.dmask, vlapic_handle_init, + NULL); break; case APIC_DELMODE_STARTUP: break; diff --git a/sys/amd64/vmm/io/vlapic.h b/sys/amd64/vmm/io/vlapic.h index f8ac42fc7514..f6dd9493a5eb 100644 --- a/sys/amd64/vmm/io/vlapic.h +++ b/sys/amd64/vmm/io/vlapic.h @@ -115,6 +115,6 @@ void vlapic_self_ipi_handler(struct vlapic *vlapic, uint64_t val); int vlapic_snapshot(struct vm *vm, struct vm_snapshot_meta *meta); #endif -int vm_handle_ipi(struct vm *vm, int vcpuid, struct vm_exit *vme, bool *retu); +int vm_handle_ipi(struct vcpu *vcpu, struct vm_exit *vme, bool *retu); #endif /* _VLAPIC_H_ */ diff --git a/sys/amd64/vmm/vmm.c b/sys/amd64/vmm/vmm.c index f92b89bbb732..1c4157c534a0 100644 --- a/sys/amd64/vmm/vmm.c +++ b/sys/amd64/vmm/vmm.c @@ -1320,15 +1320,14 @@ vcpu_require_state_locked(struct vm *vm, int vcpuid, enum vcpu_state newstate) } static int -vm_handle_rendezvous(struct vm *vm, int vcpuid) +vm_handle_rendezvous(struct vcpu *vcpu) { + struct vm *vm = vcpu->vm; struct thread *td; - int error; - - KASSERT(vcpuid >= 0 && vcpuid < vm->maxcpus, - ("vm_handle_rendezvous: invalid vcpuid %d", vcpuid)); + int error, vcpuid; error = 0; + vcpuid = vcpu->vcpuid; td = curthread; mtx_lock(&vm->rendezvous_mtx); while (vm->rendezvous_func != NULL) { @@ -1337,18 +1336,18 @@ vm_handle_rendezvous(struct vm *vm, int vcpuid) if (CPU_ISSET(vcpuid, &vm->rendezvous_req_cpus) && !CPU_ISSET(vcpuid, &vm->rendezvous_done_cpus)) { - VCPU_CTR0(vm, vcpuid, "Calling rendezvous func"); - (*vm->rendezvous_func)(vm, vcpuid, vm->rendezvous_arg); + VMM_CTR0(vcpu, "Calling rendezvous func"); + (*vm->rendezvous_func)(vcpu, vm->rendezvous_arg); CPU_SET(vcpuid, &vm->rendezvous_done_cpus); } if (CPU_CMP(&vm->rendezvous_req_cpus, &vm->rendezvous_done_cpus) == 0) { - VCPU_CTR0(vm, vcpuid, "Rendezvous completed"); + VMM_CTR0(vcpu, "Rendezvous completed"); vm->rendezvous_func = NULL; wakeup(&vm->rendezvous_func); break; } - VCPU_CTR0(vm, vcpuid, "Wait for rendezvous completion"); + VMM_CTR0(vcpu, "Wait for rendezvous completion"); mtx_sleep(&vm->rendezvous_func, &vm->rendezvous_mtx, 0, "vmrndv", hz); if ((td->td_flags & TDF_NEEDSUSPCHK) != 0) { @@ -1626,7 +1625,7 @@ vm_handle_suspend(struct vm *vm, int vcpuid, bool *retu) } else { VCPU_CTR0(vm, vcpuid, "Rendezvous during suspend"); vcpu_unlock(vcpu); - error = vm_handle_rendezvous(vm, vcpuid); + error = vm_handle_rendezvous(vcpu); vcpu_lock(vcpu); } } @@ -1815,7 +1814,7 @@ restart: vme->u.ioapic_eoi.vector); break; case VM_EXITCODE_RENDEZVOUS: - error = vm_handle_rendezvous(vm, vcpuid); + error = vm_handle_rendezvous(vcpu); break; case VM_EXITCODE_HLT: intr_disabled = ((vme->u.hlt.rflags & PSL_I) == 0); @@ -1848,7 +1847,7 @@ restart: */ if (error == 0 && vme->exitcode == VM_EXITCODE_IPI) { retu = false; - error = vm_handle_ipi(vm, vcpuid, vme, &retu); + error = vm_handle_ipi(vcpu, vme, &retu); } if (error == 0 && retu == false) @@ -2561,17 +2560,16 @@ vm_apicid2vcpuid(struct vm *vm, int apicid) } int -vm_smp_rendezvous(struct vm *vm, int vcpuid, cpuset_t dest, +vm_smp_rendezvous(struct vcpu *vcpu, cpuset_t dest, vm_rendezvous_func_t func, void *arg) { + struct vm *vm = vcpu->vm; int error, i; /* * Enforce that this function is called without any locks */ WITNESS_WARN(WARN_PANIC, NULL, "vm_smp_rendezvous"); - KASSERT(vcpuid >= 0 && vcpuid < vm->maxcpus, - ("vm_smp_rendezvous: invalid vcpuid %d", vcpuid)); restart: mtx_lock(&vm->rendezvous_mtx); @@ -2581,9 +2579,9 @@ restart: * call the rendezvous handler in case this 'vcpuid' is one * of the targets of the rendezvous. */ - VCPU_CTR0(vm, vcpuid, "Rendezvous already in progress"); + VMM_CTR0(vcpu, "Rendezvous already in progress"); mtx_unlock(&vm->rendezvous_mtx); - error = vm_handle_rendezvous(vm, vcpuid); + error = vm_handle_rendezvous(vcpu); if (error != 0) return (error); goto restart; @@ -2591,7 +2589,7 @@ restart: KASSERT(vm->rendezvous_func == NULL, ("vm_smp_rendezvous: previous " "rendezvous is still in progress")); - VCPU_CTR0(vm, vcpuid, "Initiating rendezvous"); + VMM_CTR0(vcpu, "Initiating rendezvous"); vm->rendezvous_req_cpus = dest; CPU_ZERO(&vm->rendezvous_done_cpus); vm->rendezvous_arg = arg; @@ -2607,7 +2605,7 @@ restart: vcpu_notify_event(vm, i, false); } - return (vm_handle_rendezvous(vm, vcpuid)); + return (vm_handle_rendezvous(vcpu)); } struct vatpic *