On Thu, Jun 19, 2014 at 03:57:46PM +0300, Kirill A. Shutemov wrote: > Chris Wilson wrote: > > On Thu, Jun 19, 2014 at 02:50:18PM +0300, Kirill A. Shutemov wrote: > > > > + if (err) { > > > > untrack_pfn(vma, pfn, PAGE_ALIGN(size)); > > > > + if (err != -EBUSY) > > > > + zap_page_range_single(vma, addr, size, NULL); > > > > > > Hm. If I read it correctly, you zap whole range, not only what you've > > > set up. Looks wrong. > > > > Yes. I didn't fancy threading the last touched pte back, but that should > > be easier if moving to a struct. > > > > > And for after zap, you probably whant to return -EBUSY to caller of > > > remap_pfn_range(), not -EINVAL. > > > > No, it has to be EINVAL for my purpose. If we return EBUSY, the caller > > will just report VM_NOPAGE back to the fault handler, and the fault will > > be retriggered - but the overlapping object will still be present. > > IIUC, what you're saying makes sense only if the range starts from PTE > you've got fault to. I failed to see why this assumption should be part of > remap_pfn_range() interface. That I agree with. > One possible option is to create a variant of remap_pfn_range() which will > return how many PTEs it was able to setup, before hitting the !pte_none(). > Caller will decide what to do with partially filled range. Looked at just returning the address remap_pfn_range() got up to, which is easy enough, but I think given that remap_pfn_range() will clean up correctly after a failed remap, any EBUSY from partway through would be a pathological driver error. -Chris -- Chris Wilson, Intel Open Source Technology Centre -- To unsubscribe, send a message with 'unsubscribe linux-mm' in the body to majordomo@xxxxxxxxx. For more info on Linux MM, see: http://www.linux-mm.org/ . Don't email: <a href=mailto:"dont@xxxxxxxxx"> email@xxxxxxxxx </a>