[PATCH] drm/ttm: Refuse to fault (prime-) imported pages

Daniel Vetter daniel at ffwll.ch
Tue Jan 7 01:14:57 PST 2014


On Fri, Jan 03, 2014 at 11:22:17AM +0100, Thomas Hellstrom wrote:
> This is illegal for at least two reasons:
> 
> 1) While it may work on some platforms / iommus, obtaining page pointers from
> mapped sg-lists is illegal, since the DMA API allows page pointer information
> to be destroyed in the sg mapping process.
> 
> 2) TTM has no way of determining the linear kernel map caching state of the
> underlying pages. PTEs with conflicting caching state pointing to the same
> pfn is not allowed.
> 
> TTM operations touching pages of imported sg-tables should be redirected through
> the proper dma-buf operations.
> 
> Signed-off-by: Thomas Hellstrom <thellstrom at vmware.com>

Shouldn't we do something similar in the kmap helpers ttm_bo_util.c like
ttm_bo_kmap and ttm_bo_move_memcpy? Maybe just a BUG to catch driver bugs.
Otherwise this sounds like the right thing to do, so Acked.
-Daniel

> ---
>  drivers/gpu/drm/ttm/ttm_bo_vm.c |    9 +++++++++
>  1 file changed, 9 insertions(+)
> 
> diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c
> index cdda784..12d7f53 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo_vm.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c
> @@ -132,6 +132,15 @@ static int ttm_bo_vm_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
>  		return VM_FAULT_NOPAGE;
>  	}
>  
> +	/*
> +	 * Refuse to fault imported pages. This should be handled
> +	 * (if at all) by redirecting mmap to the exporter.
> +	 */
> +	if (bo->ttm && (bo->ttm->page_flags & TTM_PAGE_FLAG_SG)) {
> +		retval = VM_FAULT_SIGBUS;
> +		goto out_unlock;
> +	}
> +
>  	if (bdev->driver->fault_reserve_notify) {
>  		ret = bdev->driver->fault_reserve_notify(bo);
>  		switch (ret) {
> -- 
> 1.7.10.4
> _______________________________________________
> dri-devel mailing list
> dri-devel at lists.freedesktop.org
> http://lists.freedesktop.org/mailman/listinfo/dri-devel

-- 
Daniel Vetter
Software Engineer, Intel Corporation
+41 (0) 79 365 57 48 - http://blog.ffwll.ch


More information about the dri-devel mailing list