Jan recently reported lockdep complaints regarding various locks in our VGIC emulation [1][2]. This boiled down to two separate issues: - When promoting the vgic_irq->irq_lock to require IRQs being disabled, we forgot to amend some instances of this lock on the way. Also this needs to be applied to dependent locks as well. The first two patches fix that. The patch split is designed to simplify backporting. Those patches have been posted before, I am resending them as part of this series. - Calling kvm_read_guest() requires us to be inside an SRCU critical section. On some architectures we are always in it when handling VCPU exits, but on ARM we need to lock it individually. Patches 3 and 4 fix that, the split is again made to ease backporting. Each of the hunks fix an indiviual commit, but I refrained from splitting this down into eight patches just to put proper Fixes: tags on it. Eventually those commits are part of one out of two series, I put the respective kernel release version as a tag to the Cc: stable line. I couldn't reproduce the full lockdep splat on my setup, but at least could show one instance and prove that these patches fixes that. Thanks to Jan for reporting. Cheers, Andre. [1] http://lists.infradead.org/pipermail/linux-arm-kernel/2018-May/575718.html [2] http://lists.infradead.org/pipermail/linux-arm-kernel/2018-May/575833.html Andre Przywara (4): KVM: ARM: Properly protect VGIC locks from IRQs KVM: ARM: VGIC/ITS: Promote irq_lock() in update_affinity KVM: arm/arm64: VGIC/ITS: protect kvm_read_guest() calls with SRCU lock KVM: arm/arm64: VGIC/ITS save/restore: protect kvm_read_guest() calls arch/arm/include/asm/kvm_mmu.h | 16 ++++++++++++++++ arch/arm64/include/asm/kvm_mmu.h | 16 ++++++++++++++++ virt/kvm/arm/vgic/vgic-debug.c | 5 +++-- virt/kvm/arm/vgic/vgic-its.c | 34 +++++++++++++++++++--------------- virt/kvm/arm/vgic/vgic-v3.c | 4 ++-- virt/kvm/arm/vgic/vgic.c | 22 ++++++++++++++-------- 6 files changed, 70 insertions(+), 27 deletions(-) -- 2.14.1