diff options
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.patch | 501 |
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 + |