> + npages = buf->size >> PAGE_SHIFT; Why round down? usually we use round up. > + down_read(¤t->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(¤t->mm->mmap_sem); > + if (get_npages != npages) > + DRM_ERROR("failed to get user_pages.\n"); _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel