diff options
| author | Keir Fraser <keirf@google.com> | 2025-09-09 10:00:05 +0000 |
|---|---|---|
| committer | Marc Zyngier <maz@kernel.org> | 2025-09-15 10:55:22 +0100 |
| commit | 11490b5ec6bc4fe3a36f90817bbc8021ba8b05cd (patch) | |
| tree | 233b90cd2d62995a1a432f722ff9c566cfb7ad56 | |
| parent | 8810c6e7cca8fbfce7652b53e05acc465e671d28 (diff) | |
KVM: arm64: vgic: Explicitly implement vgic_dist::ready ordering
In preparation to remove synchronize_srcu() from MMIO registration,
remove the distributor's dependency on this implicit barrier by
direct acquire-release synchronization on the flag write and its
lock-free check.
Signed-off-by: Keir Fraser <keirf@google.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
| -rw-r--r-- | arch/arm64/kvm/vgic/vgic-init.c | 11 |
1 files changed, 2 insertions, 9 deletions
diff --git a/arch/arm64/kvm/vgic/vgic-init.c b/arch/arm64/kvm/vgic/vgic-init.c index 3f207b5f80a5..ccccb5c04ac1 100644 --- a/arch/arm64/kvm/vgic/vgic-init.c +++ b/arch/arm64/kvm/vgic/vgic-init.c @@ -562,7 +562,7 @@ int kvm_vgic_map_resources(struct kvm *kvm) gpa_t dist_base; int ret = 0; - if (likely(dist->ready)) + if (likely(smp_load_acquire(&dist->ready))) return 0; mutex_lock(&kvm->slots_lock); @@ -593,14 +593,7 @@ int kvm_vgic_map_resources(struct kvm *kvm) goto out_slots; } - /* - * kvm_io_bus_register_dev() guarantees all readers see the new MMIO - * registration before returning through synchronize_srcu(), which also - * implies a full memory barrier. As such, marking the distributor as - * 'ready' here is guaranteed to be ordered after all vCPUs having seen - * a completely configured distributor. - */ - dist->ready = true; + smp_store_release(&dist->ready, true); goto out_slots; out: mutex_unlock(&kvm->arch.config_lock); |