Hi Loic,
...
> + unsigned int order)
> {
> struct vm_area_struct *vma = vmf->vma;
> struct drm_gem_object *obj = vma->vm_private_data;
> @@ -582,6 +583,10 @@ static vm_fault_t drm_gem_shmem_fault(struct vm_fault
> *vmf)
> vm_fault_t ret;
we could initialize ret to VM_FAULT_FALLBACK and avoid the else's
and the default case.
> struct page *page;
> pgoff_t page_offset;
> + unsigned long pfn;
> +#if defined(CONFIG_ARCH_SUPPORTS_PMD_PFNMAP) ||
> defined(CONFIG_ARCH_SUPPORTS_PUD_PFNMAP)
> + unsigned long paddr;
> +#endif
we could declare paddr inside the switch case in order to avoid
some extra ifdefs.
> /* We don't use vmf->pgoff since that has the fake offset */
> page_offset = (vmf->address - vma->vm_start) >> PAGE_SHIFT;
> @@ -592,17 +597,57 @@ static vm_fault_t drm_gem_shmem_fault(struct vm_fault
> *vmf)
> drm_WARN_ON_ONCE(obj->dev, !shmem->pages) ||
> shmem->madv < 0) {
> ret = VM_FAULT_SIGBUS;
> - } else {
> - page = shmem->pages[page_offset];
> + goto out;
> + }
>
> - ret = vmf_insert_pfn(vma, vmf->address, page_to_pfn(page));
> + page = shmem->pages[page_offset];
> + pfn = page_to_pfn(page);
> +
> + switch (order) {
> + case 0:
'0' needs to be defined, what does '0' mean? (I know what it
means, but for consistency I think it should have its own name).
Andi
> + ret = vmf_insert_pfn(vma, vmf->address, pfn);
> + break;