]> git.baikalelectronics.ru Git - kernel.git/commit
KVM: arm64: Move double-checked lock to kvm_vgic_map_resources()
authorAlexandru Elisei <alexandru.elisei@arm.com>
Tue, 1 Dec 2020 15:01:55 +0000 (15:01 +0000)
committerMarc Zyngier <maz@kernel.org>
Wed, 23 Dec 2020 16:43:43 +0000 (16:43 +0000)
commit6d26492f562316c5da484282ada93a568c9f47e2
tree9d5d68d11401d3e21dcbe548f9176a4ffa6dc619
parentaa73bd45bd693dde251d05557b87ed673da508df
KVM: arm64: Move double-checked lock to kvm_vgic_map_resources()

kvm_vgic_map_resources() is called when a VCPU if first run and it maps all
the VGIC MMIO regions. To prevent double-initialization, the VGIC uses the
ready variable to keep track of the state of resources and the global KVM
mutex to protect against concurrent accesses. After the lock is taken, the
variable is checked again in case another VCPU took the lock between the
current VCPU reading ready equals false and taking the lock.

The double-checked lock pattern is spread across four different functions:
in kvm_vcpu_first_run_init(), in kvm_vgic_map_resource() and in
vgic_{v2,v3}_map_resources(), which makes it hard to reason about and
introduces minor code duplication. Consolidate the checks in
kvm_vgic_map_resources(), where the lock is taken.

No functional change intended.

Signed-off-by: Alexandru Elisei <alexandru.elisei@arm.com>
Signed-off-by: Marc Zyngier <maz@kernel.org>
Link: https://lore.kernel.org/r/20201201150157.223625-4-alexandru.elisei@arm.com
arch/arm64/kvm/arm.c
arch/arm64/kvm/vgic/vgic-init.c
arch/arm64/kvm/vgic/vgic-v2.c
arch/arm64/kvm/vgic/vgic-v3.c