Re: [PATCH v2 1/1] KVM: arm64: Allow cacheable stage 2 mapping using VMA flags

From: David Hildenbrand
Date: Wed Jan 08 2025 - 11:09:32 EST



On 06.01.25 17:51, Jason Gunthorpe wrote:
On Fri, Dec 20, 2024 at 04:42:35PM +0100, David Hildenbrand wrote:
On 18.11.24 14:19, ankita@xxxxxxxxxx wrote:
From: Ankit Agrawal <ankita@xxxxxxxxxx>

Currently KVM determines if a VMA is pointing at IO memory by checking
pfn_is_map_memory(). However, the MM already gives us a way to tell what
kind of memory it is by inspecting the VMA.

Do you primarily care about VM_PFNMAP/VM_MIXEDMAP VMAs, or also other VMA
types?

I think this is exclusively about allowing cachable memory inside a
VM_PFNMAP VMA (created by VFIO) remain cachable inside the guest VM.

Thanks!


This patch solves the problems where it is possible for the kernel to
have VMAs pointing at cachable memory without causing
pfn_is_map_memory() to be true, eg DAX memremap cases and CXL/pre-CXL
devices. This memory is now properly marked as cachable in KVM.

Does this only imply in worse performance, or does this also affect
correctness? I suspect performance is the problem, correct?

Correctness. Things like atomics don't work on non-cachable mappings.

Hah! This needs to be highlighted in the patch description. And maybe this even implies Fixes: etc?


Maybe one could just reject such cases (if KVM PFN lookup code not
already rejects them, which might just be that case IIRC).

At least VFIO enforces SHARED or it won't create the VMA.

drivers/vfio/pci/vfio_pci_core.c: if ((vma->vm_flags & VM_SHARED) == 0)

That makes a lot of sense for VFIO.


This is pretty normal/essential for drivers..

Are you suggesting the VMA flags should be inspected more?
VM_SHARED/PFNMAP before allowing this?


I was wondering if we can safely assume that "device PFNs" can only exist in VM_PFNMAP mappings. Then we can avoid all that pfn_valid() / pfn_is_map_memory() stuff for "obviously not device" memory.

I tried to protoype, but have to give up for now; the code is too complicated to make quick progress :)

--
Cheers,

David / dhildenb