Messages in this thread | | | Subject | Re: [PATCH v2 2/3] vfio-pci: Fault mmaps to enable vma tracking | From | Jason Wang <> | Date | Fri, 8 May 2020 14:44:44 +0800 |
| |
On 2020/5/8 上午10:16, Peter Xu wrote: > On Thu, May 07, 2020 at 08:56:33PM -0300, Jason Gunthorpe wrote: >> On Thu, May 07, 2020 at 06:22:23PM -0400, Peter Xu wrote: >>> On Thu, May 07, 2020 at 04:03:34PM -0600, Alex Williamson wrote: >>>> On Thu, 7 May 2020 17:47:44 -0400 >>>> Peter Xu <peterx@redhat.com> wrote: >>>> >>>>> Hi, Alex, >>>>> >>>>> On Tue, May 05, 2020 at 03:54:53PM -0600, Alex Williamson wrote: >>>>>> +/* >>>>>> + * Zap mmaps on open so that we can fault them in on access and therefore >>>>>> + * our vma_list only tracks mappings accessed since last zap. >>>>>> + */ >>>>>> +static void vfio_pci_mmap_open(struct vm_area_struct *vma) >>>>>> +{ >>>>>> + zap_vma_ptes(vma, vma->vm_start, vma->vm_end - vma->vm_start); >>>>> A pure question: is this only a safety-belt or it is required in some known >>>>> scenarios? >>>> It's not required. I originally did this so that I'm not allocating a >>>> vma_list entry in a path where I can't return error, but as Jason >>>> suggested I could zap here only in the case that I do encounter that >>>> allocation fault. However I still like consolidating the vma_list >>>> handling to the vm_ops .fault and .close callbacks and potentially we >>>> reduce the zap latency by keeping the vma_list to actual users, which >>>> we'll get to eventually anyway in the VM case as memory BARs are sized >>>> and assigned addresses. >>> Yes, I don't see much problem either on doing the vma_list maintainance only in >>> .fault() and .close(). My understandingg is that the worst case is the perf >>> critical applications (e.g. DPDK) could pre-fault these MMIO region easily >>> during setup if they want. My question was majorly about whether the vma >>> should be guaranteed to have no mapping at all when .open() is called. But I >>> agree with you that it's always good to have that as safety-belt anyways. >> If the VMA has a mapping then that specific VMA has to be in the >> linked list. >> >> So if the zap is skipped then the you have to allocate something and >> add to the linked list to track the VMA with mapping. >> >> It is not a 'safety belt' > But shouldn't open() only be called when the VMA is created for a memory range? > If so, does it also mean that the address range must have not been mapped yet?
Probably not, e.g when VMA is being split.
Thanks
> > Thanks, >
| |