[PATCH] gpu: drm: v3d: use new return type vm_fault_t

Souptick Joarder jrdr.linux at gmail.com
Wed Jul 4 02:51:30 UTC 2018


On 03-Jul-2018 11:12 PM, "Matthew Wilcox" <willy at infradead.org> wrote:
>
> On Tue, Jul 03, 2018 at 09:40:43PM +0530, Souptick Joarder wrote:
> > Use new return type vm_fault_t for fault handler. For
> > now, this is just documenting that the function returns
> > a VM_FAULT value rather than an errno. Once all instances
> > are converted, vm_fault_t will become a distinct type.
> >
> > see commit 1c8f422059ae ("mm: change return type to vm_fault_t")
> > for reference.
> >
> > Previously vm_insert_mixed returns err which driver
> > mapped into VM_FAULT_* type. The new function
> > vmf_insert_mixed will replace this inefficiency by
> > returning VM_FAULT_* type.
>
> I really think this changelog could do with more work.  Specifically for
> this patch, I'd just say:
>
> Convert v3d_gem_fault to return vm_fault_t
>
> Instead of converting an errno into a vm_fault_t ourselves, use
> vmf_insert_mixed() which returns a vm_fault_t directly.
>
> >       unsigned long pfn;
> >       pgoff_t pgoff;
> > -     int ret;
> >
> >       /* We don't use vmf->pgoff since that has the fake offset: */
> >       pgoff = (vmf->address - vma->vm_start) >> PAGE_SHIFT;
> >       pfn = page_to_pfn(bo->pages[pgoff]);
> >
> > -     ret = vm_insert_mixed(vma, vmf->address, __pfn_to_pfn_t(pfn,
PFN_DEV));
> > -
> > -     switch (ret) {
> > -     case -EAGAIN:
> > -     case 0:
> > -     case -ERESTARTSYS:
> > -     case -EINTR:
> > -     case -EBUSY:
> > -             /*
> > -              * EBUSY is ok: this just means that another thread
> > -              * already did the job.
> > -              */
> > -             return VM_FAULT_NOPAGE;
> > -     case -ENOMEM:
> > -             return VM_FAULT_OOM;
> > -     default:
> > -             return VM_FAULT_SIGBUS;
> > -     }
> > +     return vmf_insert_mixed(vma, vmf->address,
> > +             __pfn_to_pfn_t(pfn, PFN_DEV));
> >  }
>
> The line-split here is kind of ugly.  I'd do a little more extensive
surgery:
>
> -       unsigned long pfn;
> +       pfn_t pfn;
>
> -       pfn = page_to_pfn(bo->pages[pgoff]);
> +       pfn = __pfn_to_pfn_t(page_to_pfn(bo->pages[pgoff]), PFN_DEV);
>
> +       return vmf_insert_mixed(vma, vmf->address, pfn);

Ok, I will add the same and send v2.
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.freedesktop.org/archives/dri-devel/attachments/20180704/e269e0f2/attachment-0001.html>


More information about the dri-devel mailing list