[<prev] [next>] [thread-next>] [day] [month] [year] [list]
Message-ID: <1575081918-11401-1-git-send-email-linmiaohe@huawei.com>
Date: Sat, 30 Nov 2019 10:45:18 +0800
From: linmiaohe <linmiaohe@...wei.com>
To: <maz@...nel.org>, <pbonzini@...hat.com>, <rkrcmar@...hat.com>,
<james.morse@....com>, <julien.thierry.kdev@...il.com>,
<suzuki.poulose@....com>, <christoffer.dall@....com>,
<catalin.marinas@....com>, <eric.auger@...hat.com>,
<gregkh@...uxfoundation.org>, <will@...nel.org>,
<andre.przywara@....com>, <tglx@...utronix.de>
CC: <steven.price@....com>, <linmiaohe@...wei.com>,
<linux-arm-kernel@...ts.infradead.org>,
<kvmarm@...ts.cs.columbia.edu>, <linux-kernel@...r.kernel.org>,
<kvm@...r.kernel.org>
Subject: [PATCH v3] KVM: vgic: Use wrapper function to lock/unlock all vcpus in kvm_vgic_create()
From: Miaohe Lin <linmiaohe@...wei.com>
Use wrapper function lock_all_vcpus()/unlock_all_vcpus()
in kvm_vgic_create() to remove duplicated code dealing
with locking and unlocking all vcpus in a vm.
Reviewed-by: Eric Auger <eric.auger@...hat.com>
Reviewed-by: Steven Price <steven.price@....com>
Signed-off-by: Miaohe Lin <linmiaohe@...wei.com>
---
-v2:
Fix some spelling mistake in patch title and commit log.
-v3:
Remove the comment that no longer makes sense.
---
virt/kvm/arm/vgic/vgic-init.c | 19 ++++---------------
1 file changed, 4 insertions(+), 15 deletions(-)
diff --git a/virt/kvm/arm/vgic/vgic-init.c b/virt/kvm/arm/vgic/vgic-init.c
index b3c5de48064c..22ff73ecac80 100644
--- a/virt/kvm/arm/vgic/vgic-init.c
+++ b/virt/kvm/arm/vgic/vgic-init.c
@@ -70,7 +70,7 @@ void kvm_vgic_early_init(struct kvm *kvm)
*/
int kvm_vgic_create(struct kvm *kvm, u32 type)
{
- int i, vcpu_lock_idx = -1, ret;
+ int i, ret;
struct kvm_vcpu *vcpu;
if (irqchip_in_kernel(kvm))
@@ -86,17 +86,9 @@ int kvm_vgic_create(struct kvm *kvm, u32 type)
!kvm_vgic_global_state.can_emulate_gicv2)
return -ENODEV;
- /*
- * Any time a vcpu is run, vcpu_load is called which tries to grab the
- * vcpu->mutex. By grabbing the vcpu->mutex of all VCPUs we ensure
- * that no other VCPUs are run while we create the vgic.
- */
ret = -EBUSY;
- kvm_for_each_vcpu(i, vcpu, kvm) {
- if (!mutex_trylock(&vcpu->mutex))
- goto out_unlock;
- vcpu_lock_idx = i;
- }
+ if (!lock_all_vcpus(kvm))
+ return ret;
kvm_for_each_vcpu(i, vcpu, kvm) {
if (vcpu->arch.has_run_once)
@@ -125,10 +117,7 @@ int kvm_vgic_create(struct kvm *kvm, u32 type)
INIT_LIST_HEAD(&kvm->arch.vgic.rd_regions);
out_unlock:
- for (; vcpu_lock_idx >= 0; vcpu_lock_idx--) {
- vcpu = kvm_get_vcpu(kvm, vcpu_lock_idx);
- mutex_unlock(&vcpu->mutex);
- }
+ unlock_all_vcpus(kvm);
return ret;
}
--
2.19.1
Powered by blists - more mailing lists