[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-ID: <3d8ed6be41358c7635bd4e09ecdfd1bc77ce83df.1738595289.git.naveen@kernel.org>
Date: Mon, 3 Feb 2025 22:33:01 +0530
From: "Naveen N Rao (AMD)" <naveen@...nel.org>
To: <kvm@...r.kernel.org>,
<linux-kernel@...r.kernel.org>
Cc: Sean Christopherson <seanjc@...gle.com>,
Paolo Bonzini <pbonzini@...hat.com>,
Suravee Suthikulpanit <suravee.suthikulpanit@....com>,
Vasant Hegde <vasant.hegde@....com>,
Maxim Levitsky <mlevitsk@...hat.com>,
Vitaly Kuznetsov <vkuznets@...hat.com>
Subject: [PATCH 1/3] KVM: x86: hyper-v: Convert synic_auto_eoi_used to an atomic
apicv_update_lock is primarily meant for protecting updates to the apicv
state, and is not necessary for guarding updates to synic_auto_eoi_used.
Convert synic_auto_eoi_used to an atomic and use
kvm_set_or_clear_apicv_inhibit() helper to simplify the logic.
Signed-off-by: Naveen N Rao (AMD) <naveen@...nel.org>
---
arch/x86/include/asm/kvm_host.h | 7 ++-----
arch/x86/kvm/hyperv.c | 17 +++++------------
2 files changed, 7 insertions(+), 17 deletions(-)
diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h
index 5193c3dfbce1..fb93563714c2 100644
--- a/arch/x86/include/asm/kvm_host.h
+++ b/arch/x86/include/asm/kvm_host.h
@@ -1150,11 +1150,8 @@ struct kvm_hv {
/* How many vCPUs have VP index != vCPU index */
atomic_t num_mismatched_vp_indexes;
- /*
- * How many SynICs use 'AutoEOI' feature
- * (protected by arch.apicv_update_lock)
- */
- unsigned int synic_auto_eoi_used;
+ /* How many SynICs use 'AutoEOI' feature */
+ atomic_t synic_auto_eoi_used;
struct kvm_hv_syndbg hv_syndbg;
diff --git a/arch/x86/kvm/hyperv.c b/arch/x86/kvm/hyperv.c
index 6a6dd5a84f22..7a4554ea1d16 100644
--- a/arch/x86/kvm/hyperv.c
+++ b/arch/x86/kvm/hyperv.c
@@ -131,25 +131,18 @@ static void synic_update_vector(struct kvm_vcpu_hv_synic *synic,
if (auto_eoi_old == auto_eoi_new)
return;
- if (!enable_apicv)
- return;
-
- down_write(&vcpu->kvm->arch.apicv_update_lock);
-
if (auto_eoi_new)
- hv->synic_auto_eoi_used++;
+ atomic_inc(&hv->synic_auto_eoi_used);
else
- hv->synic_auto_eoi_used--;
+ atomic_dec(&hv->synic_auto_eoi_used);
/*
* Inhibit APICv if any vCPU is using SynIC's AutoEOI, which relies on
* the hypervisor to manually inject IRQs.
*/
- __kvm_set_or_clear_apicv_inhibit(vcpu->kvm,
- APICV_INHIBIT_REASON_HYPERV,
- !!hv->synic_auto_eoi_used);
-
- up_write(&vcpu->kvm->arch.apicv_update_lock);
+ kvm_set_or_clear_apicv_inhibit(vcpu->kvm,
+ APICV_INHIBIT_REASON_HYPERV,
+ !!atomic_read(&hv->synic_auto_eoi_used));
}
static int synic_set_sint(struct kvm_vcpu_hv_synic *synic, int sint,
--
2.48.1
Powered by blists - more mailing lists