[PATCH 2/2 v4] drm/exynos: added userptr feature.

KOSAKI Motohiro kosaki.motohiro at gmail.com
Sun May 13 23:33:27 PDT 2012


> +       npages = buf->size >> PAGE_SHIFT;

Why round down? usually we use round up.


> +       down_read(&current->mm->mmap_sem);
> +
> +       /*
> +        * Basically, all the pages from get_user_pages() can not be not only
> +        * migrated by CMA but also swapped out.
> +        *
> +        * The migration issue.
> +        * - Pages reserved by CMA for some device using DMA could be used by
> +        * kernel and if the device driver wants to use those pages
> +        * while being used by kernel then the pages are copied into
> +        * other ones allocated to migrate them and then finally,
> +        * the device driver can use the pages for itself.
> +        * Thus, migrated, the pages being accessed by DMA could be changed
> +        * to other so this situation may incur that DMA accesses any pages
> +        * it doesn't want.
> +        *
> +        * But the use of get_user_pages is safe from such magration issue
> +        * because all the pages from get_user_pages CAN NOT be not only
> +        * migrated, but also swapped out.
> +        */
> +       get_npages = get_user_pages(current, current->mm, userptr,
> +                                       npages, write, 1, buf->pages, NULL);

Why force=1? It is almostly core-dump specific option. Why don't you return
EFAULT when the page has write permission. IOW, Why your Xorg module
don't map memory w/ PROT_WRITE?


> +       up_read(&current->mm->mmap_sem);
> +       if (get_npages != npages)
> +               DRM_ERROR("failed to get user_pages.\n");


More information about the dri-devel mailing list