From: Dave Airlie <airl...@redhat.com>

Before exporting a buffer, make sure it has been populated with
pages at least once.

Reviewed-by: Christian Koenig <christian.koe...@amd.com>
Signed-off-by: Dave Airlie <airl...@redhat.com>
---
 drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 12 ++++++++++++
 1 file changed, 12 insertions(+)

diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c 
b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
index ce27cb5bb05e..8561ad7f6180 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
@@ -343,11 +343,23 @@ struct dma_buf *amdgpu_gem_prime_export(struct 
drm_gem_object *gobj,
 {
        struct amdgpu_bo *bo = gem_to_amdgpu_bo(gobj);
        struct dma_buf *buf;
+       struct ttm_operation_ctx ctx = {
+               .interruptible = true,
+               .no_wait_gpu = true,
+               /* We opt to avoid OOM on system pages allocations */
+               .gfp_retry_mayfail = true,
+               .allow_res_evict = false,
+       };
+       int ret;
 
        if (amdgpu_ttm_tt_get_usermm(bo->tbo.ttm) ||
            bo->flags & AMDGPU_GEM_CREATE_VM_ALWAYS_VALID)
                return ERR_PTR(-EPERM);
 
+       ret = ttm_bo_setup_export(&bo->tbo, &ctx);
+       if (ret)
+               return ERR_PTR(ret);
+
        buf = drm_gem_prime_export(gobj, flags);
        if (!IS_ERR(buf))
                buf->ops = &amdgpu_dmabuf_ops;
-- 
2.50.1

Reply via email to