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

Reply via email to