From: Jiang Yi Date: Wed, 15 Apr 2020 08:42:29 +0000 (+0200) Subject: KVM: arm/arm64: Release kvm->mmu_lock in loop to prevent starvation X-Git-Tag: v5.8-rc1~168^2~2^2~14 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=48c963e31bc664afafd31058483ea8390da63980;p=thirdparty%2Fkernel%2Flinux.git KVM: arm/arm64: Release kvm->mmu_lock in loop to prevent starvation Do cond_resched_lock() in stage2_flush_memslot() like what is done in unmap_stage2_range() and other places holding mmu_lock while processing a possibly large range of memory. Signed-off-by: Jiang Yi Signed-off-by: Marc Zyngier Reviewed-by: Suzuki K Poulose Link: https://lore.kernel.org/r/20200415084229.29992-1-giangyi@amazon.com --- diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c index 29d8f24df9443..917363375e8a9 100644 --- a/arch/arm64/kvm/mmu.c +++ b/arch/arm64/kvm/mmu.c @@ -422,6 +422,9 @@ static void stage2_flush_memslot(struct kvm *kvm, next = stage2_pgd_addr_end(kvm, addr, end); if (!stage2_pgd_none(kvm, *pgd)) stage2_flush_puds(kvm, pgd, addr, next); + + if (next != end) + cond_resched_lock(&kvm->mmu_lock); } while (pgd++, addr = next, addr != end); }