Messages in this thread Patch in this message | | | From | Jiang Yi <> | Subject | [PATCH] KVM: arm/arm64: release kvm->mmu_lock in loop to prevent starvation | Date | Wed, 15 Apr 2020 10:42:29 +0200 |
| |
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 <giangyi@amazon.com> --- virt/kvm/arm/mmu.c | 3 +++ 1 file changed, 3 insertions(+)
diff --git a/virt/kvm/arm/mmu.c b/virt/kvm/arm/mmu.c index e3b9ee268823..7315af2c52f8 100644 --- a/virt/kvm/arm/mmu.c +++ b/virt/kvm/arm/mmu.c @@ -417,16 +417,19 @@ static void stage2_flush_memslot(struct kvm *kvm, phys_addr_t next; pgd_t *pgd; pgd = kvm->arch.pgd + stage2_pgd_index(kvm, addr); do { 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); } /** * stage2_flush_vm - Invalidate cache for pages mapped in stage 2 * @kvm: The struct kvm pointer * * Go through the stage 2 page tables and invalidate any cache lines -- 2.17.1
| |