]> git.ipfire.org Git - thirdparty/kernel/stable-queue.git/commitdiff
4.4-stable patches
authorGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Aug 2020 16:16:34 +0000 (18:16 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Mon, 24 Aug 2020 16:16:34 +0000 (18:16 +0200)
added patches:
kvm-arm-arm64-don-t-reschedule-in-unmap_stage2_range.patch

queue-4.4/kvm-arm-arm64-don-t-reschedule-in-unmap_stage2_range.patch [new file with mode: 0644]
queue-4.4/series

diff --git a/queue-4.4/kvm-arm-arm64-don-t-reschedule-in-unmap_stage2_range.patch b/queue-4.4/kvm-arm-arm64-don-t-reschedule-in-unmap_stage2_range.patch
new file mode 100644 (file)
index 0000000..cb8adc3
--- /dev/null
@@ -0,0 +1,50 @@
+From will@kernel.org  Mon Aug 24 18:14:45 2020
+From: Will Deacon <will@kernel.org>
+Date: Mon, 24 Aug 2020 12:28:54 +0100
+Subject: KVM: arm/arm64: Don't reschedule in unmap_stage2_range()
+To: gregkh@linuxfoundation.org
+Cc: linux-kernel@vger.kernel.org, maz@kernel.org, suzuki.poulose@arm.com, james.morse@arm.com, pbonzini@redhat.com, kernel-team@android.com, Will Deacon <will@kernel.org>, stable@vger.kernel.org
+Message-ID: <20200824112854.24651-1-will@kernel.org>
+
+From: Will Deacon <will@kernel.org>
+
+Upstream commits fdfe7cbd5880 ("KVM: Pass MMU notifier range flags to
+kvm_unmap_hva_range()") and b5331379bc62 ("KVM: arm64: Only reschedule
+if MMU_NOTIFIER_RANGE_BLOCKABLE is not set") fix a "sleeping from invalid
+context" BUG caused by unmap_stage2_range() attempting to reschedule when
+called on the OOM path.
+
+Unfortunately, these patches rely on the MMU notifier callback being
+passed knowledge about whether or not blocking is permitted, which was
+introduced in 4.19. Rather than backport this considerable amount of
+infrastructure just for KVM on arm, instead just remove the conditional
+reschedule.
+
+Cc: <stable@vger.kernel.org> # v4.4 only
+Cc: Marc Zyngier <maz@kernel.org>
+Cc: Suzuki K Poulose <suzuki.poulose@arm.com>
+Cc: James Morse <james.morse@arm.com>
+Signed-off-by: Will Deacon <will@kernel.org>
+Acked-by: Marc Zyngier <maz@kernel.org>
+Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
+---
+ arch/arm/kvm/mmu.c |    8 --------
+ 1 file changed, 8 deletions(-)
+
+--- a/arch/arm/kvm/mmu.c
++++ b/arch/arm/kvm/mmu.c
+@@ -300,14 +300,6 @@ static void unmap_range(struct kvm *kvm,
+               next = kvm_pgd_addr_end(addr, end);
+               if (!pgd_none(*pgd))
+                       unmap_puds(kvm, pgd, addr, next);
+-              /*
+-               * If we are dealing with a large range in
+-               * stage2 table, release the kvm->mmu_lock
+-               * to prevent starvation and lockup detector
+-               * warnings.
+-               */
+-              if (kvm && (next != end))
+-                      cond_resched_lock(&kvm->mmu_lock);
+       } while (pgd++, addr = next, addr != end);
+ }
index e17c41f57184c17783959ac5f85a50bf47f0624e..a085dd19086bddde37add4c43e21021f40b26115 100644 (file)
@@ -31,3 +31,4 @@ do_epoll_ctl-clean-the-failure-exits-up-a-bit.patch
 mm-hugetlb-fix-calculation-of-adjust_range_if_pmd_sharing_possible.patch
 xen-don-t-reschedule-in-preemption-off-sections.patch
 omapfb-dss-fix-max-fclk-divider-for-omap36xx.patch
+kvm-arm-arm64-don-t-reschedule-in-unmap_stage2_range.patch