aboutsummaryrefslogtreecommitdiffstats
path: root/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3731-drm-ttm-use-an-operation-ctx-for-ttm_mem_global_allo.patch
diff options
context:
space:
mode:
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3731-drm-ttm-use-an-operation-ctx-for-ttm_mem_global_allo.patch')
-rw-r--r--meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3731-drm-ttm-use-an-operation-ctx-for-ttm_mem_global_allo.patch501
1 files changed, 501 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3731-drm-ttm-use-an-operation-ctx-for-ttm_mem_global_allo.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3731-drm-ttm-use-an-operation-ctx-for-ttm_mem_global_allo.patch
new file mode 100644
index 00000000..810eec5e
--- /dev/null
+++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3731-drm-ttm-use-an-operation-ctx-for-ttm_mem_global_allo.patch
@@ -0,0 +1,501 @@
+From 2c8e2c9c41c657a0e1bd5f61cf9388937a22b0b4 Mon Sep 17 00:00:00 2001
+From: Roger He <Hongbo.He@amd.com>
+Date: Fri, 8 Dec 2017 15:09:50 +0800
+Subject: [PATCH 3731/4131] drm/ttm: use an operation ctx for
+ ttm_mem_global_alloc
+MIME-Version: 1.0
+Content-Type: text/plain; charset=UTF-8
+Content-Transfer-Encoding: 8bit
+
+forward the operation context to ttm_mem_global_alloc as well, and the
+ultimate goal is swapout enablement for reserved BOs
+
+Reviewed-by: Thomas Hellstrom <thellstrom@vmware.com>
+Reviewed-by: Christian König <christian.koenig@amd.com>
+Signed-off-by: Roger He <Hongbo.He@amd.com>
+Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
+---
+ drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 8 ++++++--
+ drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 1 -
+ drivers/gpu/drm/ttm/ttm_bo.c | 2 +-
+ drivers/gpu/drm/ttm/ttm_memory.c | 16 +++++++++-------
+ drivers/gpu/drm/ttm/ttm_object.c | 13 ++++++++++---
+ drivers/gpu/drm/vmwgfx/vmwgfx_binding.c | 6 +++++-
+ drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c | 13 ++++++++++---
+ drivers/gpu/drm/vmwgfx/vmwgfx_context.c | 6 +++++-
+ drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c | 6 +++++-
+ drivers/gpu/drm/vmwgfx/vmwgfx_fence.c | 6 +++++-
+ drivers/gpu/drm/vmwgfx/vmwgfx_shader.c | 18 +++++++++++++++---
+ drivers/gpu/drm/vmwgfx/vmwgfx_simple_resource.c | 6 +++++-
+ drivers/gpu/drm/vmwgfx/vmwgfx_so.c | 6 +++++-
+ drivers/gpu/drm/vmwgfx/vmwgfx_surface.c | 12 ++++++++++--
+ include/drm/ttm/ttm_memory.h | 3 ++-
+ 15 files changed, 93 insertions(+), 29 deletions(-)
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+index 5ebe000..4a75ca6 100644
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+@@ -343,8 +343,12 @@ static int amdgpu_cs_bo_validate(struct amdgpu_cs_parser *p,
+ struct amdgpu_bo *bo)
+ {
+ struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
+- struct ttm_operation_ctx ctx = { true, false };
+- u64 initial_bytes_moved, bytes_moved;
++ struct ttm_operation_ctx ctx = {
++ .interruptible = true,
++ .no_wait_gpu = false,
++ .resv = bo->tbo.resv,
++ .flags = 0
++ };
+ uint32_t domain;
+ int r;
+
+diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+index 94331fd..566eef6 100755
+--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+@@ -391,7 +391,6 @@ static int amdgpu_bo_do_create(struct amdgpu_device *adev, unsigned long size,
+ bo = kzalloc(sizeof(struct amdgpu_bo), GFP_KERNEL);
+ if (bo == NULL)
+ return -ENOMEM;
+-
+ drm_gem_private_object_init(adev->ddev, &bo->gem_base, size);
+ INIT_LIST_HEAD(&bo->shadow_list);
+ INIT_LIST_HEAD(&bo->va);
+diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
+index e9886d1..fa0268f 100644
+--- a/drivers/gpu/drm/ttm/ttm_bo.c
++++ b/drivers/gpu/drm/ttm/ttm_bo.c
+@@ -1139,7 +1139,7 @@ int ttm_bo_init_reserved(struct ttm_bo_device *bdev,
+ struct ttm_mem_global *mem_glob = bdev->glob->mem_glob;
+ bool locked;
+
+- ret = ttm_mem_global_alloc(mem_glob, acc_size, false, false);
++ ret = ttm_mem_global_alloc(mem_glob, acc_size, ctx);
+ if (ret) {
+ pr_err("Out of kernel memory\n");
+ if (destroy)
+diff --git a/drivers/gpu/drm/ttm/ttm_memory.c b/drivers/gpu/drm/ttm/ttm_memory.c
+index 29855be..ed43a6b 100644
+--- a/drivers/gpu/drm/ttm/ttm_memory.c
++++ b/drivers/gpu/drm/ttm/ttm_memory.c
+@@ -514,7 +514,7 @@ static int ttm_mem_global_reserve(struct ttm_mem_global *glob,
+ static int ttm_mem_global_alloc_zone(struct ttm_mem_global *glob,
+ struct ttm_mem_zone *single_zone,
+ uint64_t memory,
+- bool no_wait, bool interruptible)
++ struct ttm_operation_ctx *ctx)
+ {
+ int count = TTM_MEMORY_ALLOC_RETRIES;
+
+@@ -522,7 +522,7 @@ static int ttm_mem_global_alloc_zone(struct ttm_mem_global *glob,
+ single_zone,
+ memory, true)
+ != 0)) {
+- if (no_wait)
++ if (ctx->no_wait_gpu)
+ return -ENOMEM;
+ if (unlikely(count-- == 0))
+ return -ENOMEM;
+@@ -533,15 +533,14 @@ static int ttm_mem_global_alloc_zone(struct ttm_mem_global *glob,
+ }
+
+ int ttm_mem_global_alloc(struct ttm_mem_global *glob, uint64_t memory,
+- bool no_wait, bool interruptible)
++ struct ttm_operation_ctx *ctx)
+ {
+ /**
+ * Normal allocations of kernel memory are registered in
+ * all zones.
+ */
+
+- return ttm_mem_global_alloc_zone(glob, NULL, memory, no_wait,
+- interruptible);
++ return ttm_mem_global_alloc_zone(glob, NULL, memory, ctx);
+ }
+ EXPORT_SYMBOL(ttm_mem_global_alloc);
+
+@@ -551,6 +550,10 @@ int ttm_mem_global_alloc_page(struct ttm_mem_global *glob,
+ {
+
+ struct ttm_mem_zone *zone = NULL;
++ struct ttm_operation_ctx ctx = {
++ .interruptible = false,
++ .no_wait_gpu = false
++ };
+
+ /**
+ * Page allocations may be registed in a single zone
+@@ -564,8 +567,7 @@ int ttm_mem_global_alloc_page(struct ttm_mem_global *glob,
+ if (glob->zone_dma32 && page_to_pfn(page) > 0x00100000UL)
+ zone = glob->zone_kernel;
+ #endif
+- return ttm_mem_global_alloc_zone(glob, zone, PAGE_SIZE, no_wait,
+- interruptible);
++ return ttm_mem_global_alloc_zone(glob, zone, size, &ctx);
+ }
+
+ void ttm_mem_global_free_page(struct ttm_mem_global *glob, struct page *page)
+diff --git a/drivers/gpu/drm/ttm/ttm_object.c b/drivers/gpu/drm/ttm/ttm_object.c
+index 26a7ad0..1aa2baa 100644
+--- a/drivers/gpu/drm/ttm/ttm_object.c
++++ b/drivers/gpu/drm/ttm/ttm_object.c
+@@ -325,6 +325,10 @@ int ttm_ref_object_add(struct ttm_object_file *tfile,
+ struct ttm_ref_object *ref;
+ struct drm_hash_item *hash;
+ struct ttm_mem_global *mem_glob = tfile->tdev->mem_glob;
++ struct ttm_operation_ctx ctx = {
++ .interruptible = false,
++ .no_wait_gpu = false
++ };
+ int ret = -EINVAL;
+
+ if (base->tfile != tfile && !base->shareable)
+@@ -350,7 +354,7 @@ int ttm_ref_object_add(struct ttm_object_file *tfile,
+ return -EPERM;
+
+ ret = ttm_mem_global_alloc(mem_glob, sizeof(*ref),
+- false, false);
++ &ctx);
+ if (unlikely(ret != 0))
+ return ret;
+ ref = kmalloc(sizeof(*ref), GFP_KERNEL);
+@@ -686,7 +690,10 @@ int ttm_prime_handle_to_fd(struct ttm_object_file *tfile,
+ dma_buf = prime->dma_buf;
+ if (!dma_buf || !get_dma_buf_unless_doomed(dma_buf)) {
+ DEFINE_DMA_BUF_EXPORT_INFO(exp_info);
+-
++ struct ttm_operation_ctx ctx = {
++ .interruptible = true,
++ .no_wait_gpu = false
++ };
+ exp_info.ops = &tdev->ops;
+ exp_info.size = prime->size;
+ exp_info.flags = flags;
+@@ -696,7 +703,7 @@ int ttm_prime_handle_to_fd(struct ttm_object_file *tfile,
+ * Need to create a new dma_buf, with memory accounting.
+ */
+ ret = ttm_mem_global_alloc(tdev->mem_glob, tdev->dma_buf_size,
+- false, true);
++ &ctx);
+ if (unlikely(ret != 0)) {
+ mutex_unlock(&prime->mutex);
+ goto out_unref;
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_binding.c b/drivers/gpu/drm/vmwgfx/vmwgfx_binding.c
+index 9c42e96..55d32ae 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_binding.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_binding.c
+@@ -1202,10 +1202,14 @@ struct vmw_ctx_binding_state *
+ vmw_binding_state_alloc(struct vmw_private *dev_priv)
+ {
+ struct vmw_ctx_binding_state *cbs;
++ struct ttm_operation_ctx ctx = {
++ .interruptible = false,
++ .no_wait_gpu = false
++ };
+ int ret;
+
+ ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv), sizeof(*cbs),
+- false, false);
++ &ctx);
+ if (ret)
+ return ERR_PTR(ret);
+
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c
+index 2c78d47..7ea1c85 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c
+@@ -394,6 +394,10 @@ static int vmw_ttm_map_dma(struct vmw_ttm_tt *vmw_tt)
+ struct vmw_private *dev_priv = vmw_tt->dev_priv;
+ struct ttm_mem_global *glob = vmw_mem_glob(dev_priv);
+ struct vmw_sg_table *vsgt = &vmw_tt->vsgt;
++ struct ttm_operation_ctx ctx = {
++ .interruptible = true,
++ .no_wait_gpu = false
++ };
+ struct vmw_piter iter;
+ dma_addr_t old;
+ int ret = 0;
+@@ -417,8 +421,7 @@ static int vmw_ttm_map_dma(struct vmw_ttm_tt *vmw_tt)
+ sgt_size = ttm_round_pot(sizeof(struct sg_table));
+ }
+ vmw_tt->sg_alloc_size = sgt_size + sgl_size * vsgt->num_pages;
+- ret = ttm_mem_global_alloc(glob, vmw_tt->sg_alloc_size, false,
+- true);
++ ret = ttm_mem_global_alloc(glob, vmw_tt->sg_alloc_size, &ctx);
+ if (unlikely(ret != 0))
+ return ret;
+
+@@ -638,6 +641,10 @@ static int vmw_ttm_populate(struct ttm_tt *ttm)
+ container_of(ttm, struct vmw_ttm_tt, dma_ttm.ttm);
+ struct vmw_private *dev_priv = vmw_tt->dev_priv;
+ struct ttm_mem_global *glob = vmw_mem_glob(dev_priv);
++ struct ttm_operation_ctx ctx = {
++ .interruptible = true,
++ .no_wait_gpu = false
++ };
+ int ret;
+
+ if (ttm->state != tt_unpopulated)
+@@ -646,7 +653,7 @@ static int vmw_ttm_populate(struct ttm_tt *ttm)
+ if (dev_priv->map_mode == vmw_dma_alloc_coherent) {
+ size_t size =
+ ttm_round_pot(ttm->num_pages * sizeof(dma_addr_t));
+- ret = ttm_mem_global_alloc(glob, size, false, true);
++ ret = ttm_mem_global_alloc(glob, size, &ctx);
+ if (unlikely(ret != 0))
+ return ret;
+
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_context.c b/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
+index 4212b3e..3767ac3 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_context.c
+@@ -746,6 +746,10 @@ static int vmw_context_define(struct drm_device *dev, void *data,
+ struct vmw_resource *tmp;
+ struct drm_vmw_context_arg *arg = (struct drm_vmw_context_arg *)data;
+ struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile;
++ struct ttm_operation_ctx ttm_opt_ctx = {
++ .interruptible = true,
++ .no_wait_gpu = false
++ };
+ int ret;
+
+ if (!dev_priv->has_dx && dx) {
+@@ -768,7 +772,7 @@ static int vmw_context_define(struct drm_device *dev, void *data,
+
+ ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv),
+ vmw_user_context_size,
+- false, true);
++ &ttm_opt_ctx);
+ if (unlikely(ret != 0)) {
+ if (ret != -ERESTARTSYS)
+ DRM_ERROR("Out of graphics memory for context"
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c b/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c
+index 92df0b0..cbf54ea 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_cotable.c
+@@ -573,6 +573,10 @@ struct vmw_resource *vmw_cotable_alloc(struct vmw_private *dev_priv,
+ u32 type)
+ {
+ struct vmw_cotable *vcotbl;
++ struct ttm_operation_ctx ttm_opt_ctx = {
++ .interruptible = true,
++ .no_wait_gpu = false
++ };
+ int ret;
+ u32 num_entries;
+
+@@ -580,7 +584,7 @@ struct vmw_resource *vmw_cotable_alloc(struct vmw_private *dev_priv,
+ cotable_acc_size = ttm_round_pot(sizeof(struct vmw_cotable));
+
+ ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv),
+- cotable_acc_size, false, true);
++ cotable_acc_size, &ttm_opt_ctx);
+ if (unlikely(ret))
+ return ERR_PTR(ret);
+
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
+index d6b1c50..6c5c75c 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_fence.c
+@@ -588,6 +588,10 @@ int vmw_user_fence_create(struct drm_file *file_priv,
+ struct vmw_user_fence *ufence;
+ struct vmw_fence_obj *tmp;
+ struct ttm_mem_global *mem_glob = vmw_mem_glob(fman->dev_priv);
++ struct ttm_operation_ctx ctx = {
++ .interruptible = false,
++ .no_wait_gpu = false
++ };
+ int ret;
+
+ /*
+@@ -596,7 +600,7 @@ int vmw_user_fence_create(struct drm_file *file_priv,
+ */
+
+ ret = ttm_mem_global_alloc(mem_glob, fman->user_fence_size,
+- false, false);
++ &ctx);
+ if (unlikely(ret != 0))
+ return ret;
+
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
+index 004e18b..73b8e9a 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_shader.c
+@@ -607,6 +607,10 @@ int vmw_dx_shader_add(struct vmw_cmdbuf_res_manager *man,
+ struct vmw_dx_shader *shader;
+ struct vmw_resource *res;
+ struct vmw_private *dev_priv = ctx->dev_priv;
++ struct ttm_operation_ctx ttm_opt_ctx = {
++ .interruptible = true,
++ .no_wait_gpu = false
++ };
+ int ret;
+
+ if (!vmw_shader_dx_size)
+@@ -616,7 +620,7 @@ int vmw_dx_shader_add(struct vmw_cmdbuf_res_manager *man,
+ return -EINVAL;
+
+ ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv), vmw_shader_dx_size,
+- false, true);
++ &ttm_opt_ctx);
+ if (ret) {
+ if (ret != -ERESTARTSYS)
+ DRM_ERROR("Out of graphics memory for shader "
+@@ -730,6 +734,10 @@ static int vmw_user_shader_alloc(struct vmw_private *dev_priv,
+ {
+ struct vmw_user_shader *ushader;
+ struct vmw_resource *res, *tmp;
++ struct ttm_operation_ctx ctx = {
++ .interruptible = true,
++ .no_wait_gpu = false
++ };
+ int ret;
+
+ /*
+@@ -742,7 +750,7 @@ static int vmw_user_shader_alloc(struct vmw_private *dev_priv,
+
+ ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv),
+ vmw_user_shader_size,
+- false, true);
++ &ctx);
+ if (unlikely(ret != 0)) {
+ if (ret != -ERESTARTSYS)
+ DRM_ERROR("Out of graphics memory for shader "
+@@ -800,6 +808,10 @@ static struct vmw_resource *vmw_shader_alloc(struct vmw_private *dev_priv,
+ {
+ struct vmw_shader *shader;
+ struct vmw_resource *res;
++ struct ttm_operation_ctx ctx = {
++ .interruptible = true,
++ .no_wait_gpu = false
++ };
+ int ret;
+
+ /*
+@@ -812,7 +824,7 @@ static struct vmw_resource *vmw_shader_alloc(struct vmw_private *dev_priv,
+
+ ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv),
+ vmw_shader_size,
+- false, true);
++ &ctx);
+ if (unlikely(ret != 0)) {
+ if (ret != -ERESTARTSYS)
+ DRM_ERROR("Out of graphics memory for shader "
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_simple_resource.c b/drivers/gpu/drm/vmwgfx/vmwgfx_simple_resource.c
+index 051d3b3..a0cb310 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_simple_resource.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_simple_resource.c
+@@ -149,6 +149,10 @@ vmw_simple_resource_create_ioctl(struct drm_device *dev, void *data,
+ struct vmw_resource *res;
+ struct vmw_resource *tmp;
+ struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile;
++ struct ttm_operation_ctx ctx = {
++ .interruptible = true,
++ .no_wait_gpu = false
++ };
+ size_t alloc_size;
+ size_t account_size;
+ int ret;
+@@ -162,7 +166,7 @@ vmw_simple_resource_create_ioctl(struct drm_device *dev, void *data,
+ return ret;
+
+ ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv), account_size,
+- false, true);
++ &ctx);
+ ttm_read_unlock(&dev_priv->reservation_sem);
+ if (ret) {
+ if (ret != -ERESTARTSYS)
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_so.c b/drivers/gpu/drm/vmwgfx/vmwgfx_so.c
+index 5a73eeb..d3573c3 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_so.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_so.c
+@@ -329,6 +329,10 @@ int vmw_view_add(struct vmw_cmdbuf_res_manager *man,
+ struct vmw_private *dev_priv = ctx->dev_priv;
+ struct vmw_resource *res;
+ struct vmw_view *view;
++ struct ttm_operation_ctx ttm_opt_ctx = {
++ .interruptible = true,
++ .no_wait_gpu = false
++ };
+ size_t size;
+ int ret;
+
+@@ -345,7 +349,7 @@ int vmw_view_add(struct vmw_cmdbuf_res_manager *man,
+
+ size = offsetof(struct vmw_view, cmd) + cmd_size;
+
+- ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv), size, false, true);
++ ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv), size, &ttm_opt_ctx);
+ if (ret) {
+ if (ret != -ERESTARTSYS)
+ DRM_ERROR("Out of graphics memory for view"
+diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
+index a552e4e..a7910c8 100644
+--- a/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_surface.c
+@@ -700,6 +700,10 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
+ struct drm_vmw_surface_create_req *req = &arg->req;
+ struct drm_vmw_surface_arg *rep = &arg->rep;
+ struct ttm_object_file *tfile = vmw_fpriv(file_priv)->tfile;
++ struct ttm_operation_ctx ctx = {
++ .interruptible = true,
++ .no_wait_gpu = false
++ };
+ int ret;
+ int i, j;
+ uint32_t cur_bo_offset;
+@@ -741,7 +745,7 @@ int vmw_surface_define_ioctl(struct drm_device *dev, void *data,
+ return ret;
+
+ ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv),
+- size, false, true);
++ size, &ctx);
+ if (unlikely(ret != 0)) {
+ if (ret != -ERESTARTSYS)
+ DRM_ERROR("Out of graphics memory for surface"
+@@ -1479,6 +1483,10 @@ int vmw_surface_gb_priv_define(struct drm_device *dev,
+ {
+ struct vmw_private *dev_priv = vmw_priv(dev);
+ struct vmw_user_surface *user_srf;
++ struct ttm_operation_ctx ctx = {
++ .interruptible = true,
++ .no_wait_gpu = false
++ };
+ struct vmw_surface *srf;
+ int ret;
+ u32 num_layers;
+@@ -1525,7 +1533,7 @@ int vmw_surface_gb_priv_define(struct drm_device *dev,
+ return ret;
+
+ ret = ttm_mem_global_alloc(vmw_mem_glob(dev_priv),
+- user_accounting_size, false, true);
++ user_accounting_size, &ctx);
+ if (unlikely(ret != 0)) {
+ if (ret != -ERESTARTSYS)
+ DRM_ERROR("Out of graphics memory for surface"
+diff --git a/include/drm/ttm/ttm_memory.h b/include/drm/ttm/ttm_memory.h
+index c452089..39197a2 100644
+--- a/include/drm/ttm/ttm_memory.h
++++ b/include/drm/ttm/ttm_memory.h
+@@ -35,6 +35,7 @@
+ #include <linux/errno.h>
+ #include <linux/kobject.h>
+ #include <linux/mm.h>
++#include "ttm_bo_api.h"
+
+ /**
+ * struct ttm_mem_shrink - callback to shrink TTM memory usage.
+@@ -146,7 +147,7 @@ static inline void ttm_mem_unregister_shrink(struct ttm_mem_global *glob,
+ extern int ttm_mem_global_init(struct ttm_mem_global *glob);
+ extern void ttm_mem_global_release(struct ttm_mem_global *glob);
+ extern int ttm_mem_global_alloc(struct ttm_mem_global *glob, uint64_t memory,
+- bool no_wait, bool interruptible);
++ struct ttm_operation_ctx *ctx);
+ extern void ttm_mem_global_free(struct ttm_mem_global *glob,
+ uint64_t amount);
+ extern int ttm_mem_global_alloc_page(struct ttm_mem_global *glob,
+--
+2.7.4
+