• Oliver Upton's avatar
    KVM: arm64: Use config_lock to protect vgic state · f0032773
    Oliver Upton authored
    Almost all of the vgic state is VM-scoped but accessed from the context
    of a vCPU. These accesses were serialized on the kvm->lock which cannot
    be nested within a vcpu->mutex critical section.
    
    Move over the vgic state to using the config_lock. Tweak the lock
    ordering where necessary to ensure that the config_lock is acquired
    after the vcpu->mutex. Acquire the config_lock in kvm_vgic_create() to
    avoid a race between the converted flows and GIC creation. Where
    necessary, continue to acquire kvm->lock to avoid a race with vCPU
    creation (i.e. flows that use lock_all_vcpus()).
    
    Finally, promote the locking expectations in comments to lockdep
    assertions and update the locking documentation for the config_lock as
    well as vcpu->mutex.
    
    Cc: stable@vger.kernel.org
    Signed-off-by: default avatarOliver Upton <oliver.upton@linux.dev>
    Signed-off-by: default avatarMarc Zyngier <maz@kernel.org>
    Link: https://lore.kernel.org/r/20230327164747.2466958-5-oliver.upton@linux.dev
    f0032773
vgic-v4.c 14.2 KB