I have worked around the issue by filtering out the request if the
pfn is not valid in __clean_dcache_guest_page(). As the patch
wasn't posted in the community, reverted it as well.
That's papering over the real issue, and this mapping path needs
fixing as it was only ever expected to be called for CoW.
Can you please try the following patch and let me know if that fixes
the issue for good?
diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c
index 77cb2d28f2a4..b62dd40a4083 100644
--- a/arch/arm64/kvm/mmu.c
+++ b/arch/arm64/kvm/mmu.c
@@ -1147,7 +1147,8 @@ int kvm_set_spte_hva(struct kvm *kvm, unsigned long hva, pte_t pte)
* We've moved a page around, probably through CoW, so let's treat it
* just like a translation fault and clean the cache to the PoC.
*/
- clean_dcache_guest_page(pfn, PAGE_SIZE);
+ if (!kvm_is_device_pfn(pfn))
+ clean_dcache_guest_page(pfn, PAGE_SIZE);
handle_hva_to_gpa(kvm, hva, end, &kvm_set_spte_handler, &pfn);
return 0;
}
--
Without deviation from the norm, progress is not possible.