diff options
Diffstat (limited to 'meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3733-drm-ttm-use-an-operation-ctx-for-ttm_tt_populate-in-.patch')
-rw-r--r-- | meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3733-drm-ttm-use-an-operation-ctx-for-ttm_tt_populate-in-.patch | 519 |
1 files changed, 519 insertions, 0 deletions
diff --git a/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3733-drm-ttm-use-an-operation-ctx-for-ttm_tt_populate-in-.patch b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3733-drm-ttm-use-an-operation-ctx-for-ttm_tt_populate-in-.patch new file mode 100644 index 00000000..19c64da8 --- /dev/null +++ b/meta-amd-bsp/recipes-kernel/linux/linux-yocto-4.14.71/3733-drm-ttm-use-an-operation-ctx-for-ttm_tt_populate-in-.patch @@ -0,0 +1,519 @@ +From 8932e0ab61727aafc66c092d4037ccefab7a3be6 Mon Sep 17 00:00:00 2001 +From: Roger He <Hongbo.He@amd.com> +Date: Thu, 21 Dec 2017 17:42:50 +0800 +Subject: [PATCH 3733/4131] drm/ttm: use an operation ctx for ttm_tt_populate + in ttm_bo_driver (v2) +MIME-Version: 1.0 +Content-Type: text/plain; charset=UTF-8 +Content-Transfer-Encoding: 8bit + +forward the operation context to ttm_tt_populate as well, +and the ultimate goal is swapout enablement for reserved BOs. + +v2: squash in fix for vboxvideo + +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_ttm.c | 5 +++-- + drivers/gpu/drm/ast/ast_ttm.c | 5 +++-- + drivers/gpu/drm/cirrus/cirrus_ttm.c | 5 +++-- + drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c | 5 +++-- + drivers/gpu/drm/mgag200/mgag200_ttm.c | 5 +++-- + drivers/gpu/drm/nouveau/nouveau_bo.c | 6 +++--- + drivers/gpu/drm/qxl/qxl_ttm.c | 5 +++-- + drivers/gpu/drm/radeon/radeon_ttm.c | 9 +++++---- + drivers/gpu/drm/ttm/ttm_agp_backend.c | 4 ++-- + drivers/gpu/drm/ttm/ttm_bo_util.c | 11 ++++++++--- + drivers/gpu/drm/ttm/ttm_bo_vm.c | 7 ++++++- + drivers/gpu/drm/ttm/ttm_page_alloc.c | 13 +++++-------- + drivers/gpu/drm/ttm/ttm_page_alloc_dma.c | 9 +++------ + drivers/gpu/drm/ttm/ttm_tt.c | 6 +++++- + drivers/gpu/drm/virtio/virtgpu_object.c | 6 +++++- + drivers/gpu/drm/virtio/virtgpu_ttm.c | 5 +++-- + drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c | 13 +++++-------- + drivers/gpu/drm/vmwgfx/vmwgfx_mob.c | 13 +++++++++++-- + 18 files changed, 79 insertions(+), 53 deletions(-) + +diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +index c98cfd4..0e96eff 100644 +--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c ++++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c +@@ -1056,7 +1056,8 @@ static struct ttm_tt *amdgpu_ttm_tt_create(struct ttm_buffer_object *bo, + return >t->ttm.ttm; + } + +-static int amdgpu_ttm_tt_populate(struct ttm_tt *ttm) ++static int amdgpu_ttm_tt_populate(struct ttm_tt *ttm, ++ struct ttm_operation_ctx *ctx) + { + struct amdgpu_device *adev = amdgpu_ttm_adev(ttm->bdev); + struct amdgpu_ttm_tt *gtt = (void *)ttm; +@@ -1080,7 +1081,7 @@ static int amdgpu_ttm_tt_populate(struct ttm_tt *ttm) + return 0; + } + +- return ttm_populate_and_map_pages(adev->dev, >t->ttm); ++ return ttm_populate_and_map_pages(adev->dev, >t->ttm, ctx); + } + + static void amdgpu_ttm_tt_unpopulate(struct ttm_tt *ttm) +diff --git a/drivers/gpu/drm/ast/ast_ttm.c b/drivers/gpu/drm/ast/ast_ttm.c +index c864bb4..9733f47 100644 +--- a/drivers/gpu/drm/ast/ast_ttm.c ++++ b/drivers/gpu/drm/ast/ast_ttm.c +@@ -215,9 +215,10 @@ static struct ttm_tt *ast_ttm_tt_create(struct ttm_buffer_object *bo, + return tt; + } + +-static int ast_ttm_tt_populate(struct ttm_tt *ttm) ++static int ast_ttm_tt_populate(struct ttm_tt *ttm, ++ struct ttm_operation_ctx *ctx) + { +- return ttm_pool_populate(ttm); ++ return ttm_pool_populate(ttm, ctx); + } + + static void ast_ttm_tt_unpopulate(struct ttm_tt *ttm) +diff --git a/drivers/gpu/drm/cirrus/cirrus_ttm.c b/drivers/gpu/drm/cirrus/cirrus_ttm.c +index cafa62d..d732086 100644 +--- a/drivers/gpu/drm/cirrus/cirrus_ttm.c ++++ b/drivers/gpu/drm/cirrus/cirrus_ttm.c +@@ -215,9 +215,10 @@ static struct ttm_tt *cirrus_ttm_tt_create(struct ttm_buffer_object *bo, + return tt; + } + +-static int cirrus_ttm_tt_populate(struct ttm_tt *ttm) ++static int cirrus_ttm_tt_populate(struct ttm_tt *ttm, ++ struct ttm_operation_ctx *ctx) + { +- return ttm_pool_populate(ttm); ++ return ttm_pool_populate(ttm, ctx); + } + + static void cirrus_ttm_tt_unpopulate(struct ttm_tt *ttm) +diff --git a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c +index 327d86e..f024349 100644 +--- a/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c ++++ b/drivers/gpu/drm/hisilicon/hibmc/hibmc_ttm.c +@@ -221,9 +221,10 @@ static struct ttm_tt *hibmc_ttm_tt_create(struct ttm_buffer_object *bo, + return tt; + } + +-static int hibmc_ttm_tt_populate(struct ttm_tt *ttm) ++static int hibmc_ttm_tt_populate(struct ttm_tt *ttm, ++ struct ttm_operation_ctx *ctx) + { +- return ttm_pool_populate(ttm); ++ return ttm_pool_populate(ttm, ctx); + } + + static void hibmc_ttm_tt_unpopulate(struct ttm_tt *ttm) +diff --git a/drivers/gpu/drm/mgag200/mgag200_ttm.c b/drivers/gpu/drm/mgag200/mgag200_ttm.c +index 5120715..229366b 100644 +--- a/drivers/gpu/drm/mgag200/mgag200_ttm.c ++++ b/drivers/gpu/drm/mgag200/mgag200_ttm.c +@@ -215,9 +215,10 @@ static struct ttm_tt *mgag200_ttm_tt_create(struct ttm_buffer_object *bo, + return tt; + } + +-static int mgag200_ttm_tt_populate(struct ttm_tt *ttm) ++static int mgag200_ttm_tt_populate(struct ttm_tt *ttm, ++ struct ttm_operation_ctx *ctx) + { +- return ttm_pool_populate(ttm); ++ return ttm_pool_populate(ttm, ctx); + } + + static void mgag200_ttm_tt_unpopulate(struct ttm_tt *ttm) +diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c +index e5406e0..8ac03fc 100644 +--- a/drivers/gpu/drm/nouveau/nouveau_bo.c ++++ b/drivers/gpu/drm/nouveau/nouveau_bo.c +@@ -1475,17 +1475,17 @@ nouveau_ttm_tt_populate(struct ttm_tt *ttm) + + #if IS_ENABLED(CONFIG_AGP) + if (drm->agp.bridge) { +- return ttm_agp_tt_populate(ttm); ++ return ttm_agp_tt_populate(ttm, ctx); + } + #endif + + #if IS_ENABLED(CONFIG_SWIOTLB) && IS_ENABLED(CONFIG_X86) + if (swiotlb_nr_tbl()) { +- return ttm_dma_populate((void *)ttm, dev->dev); ++ return ttm_dma_populate((void *)ttm, dev->dev, ctx); + } + #endif + +- r = ttm_pool_populate(ttm); ++ r = ttm_pool_populate(ttm, ctx); + if (r) { + return r; + } +diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c +index a4fcc59..a283352 100644 +--- a/drivers/gpu/drm/qxl/qxl_ttm.c ++++ b/drivers/gpu/drm/qxl/qxl_ttm.c +@@ -294,14 +294,15 @@ static struct ttm_backend_func qxl_backend_func = { + .destroy = &qxl_ttm_backend_destroy, + }; + +-static int qxl_ttm_tt_populate(struct ttm_tt *ttm) ++static int qxl_ttm_tt_populate(struct ttm_tt *ttm, ++ struct ttm_operation_ctx *ctx) + { + int r; + + if (ttm->state != tt_unpopulated) + return 0; + +- r = ttm_pool_populate(ttm); ++ r = ttm_pool_populate(ttm, ctx); + if (r) + return r; + +diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c +index 2be5d99..d00a1ff 100644 +--- a/drivers/gpu/drm/radeon/radeon_ttm.c ++++ b/drivers/gpu/drm/radeon/radeon_ttm.c +@@ -721,7 +721,8 @@ static struct radeon_ttm_tt *radeon_ttm_tt_to_gtt(struct ttm_tt *ttm) + return (struct radeon_ttm_tt *)ttm; + } + +-static int radeon_ttm_tt_populate(struct ttm_tt *ttm) ++static int radeon_ttm_tt_populate(struct ttm_tt *ttm, ++ struct ttm_operation_ctx *ctx) + { + struct radeon_ttm_tt *gtt = radeon_ttm_tt_to_gtt(ttm); + struct radeon_device *rdev; +@@ -750,17 +751,17 @@ static int radeon_ttm_tt_populate(struct ttm_tt *ttm) + rdev = radeon_get_rdev(ttm->bdev); + #if IS_ENABLED(CONFIG_AGP) + if (rdev->flags & RADEON_IS_AGP) { +- return ttm_agp_tt_populate(ttm); ++ return ttm_agp_tt_populate(ttm, ctx); + } + #endif + + #ifdef CONFIG_SWIOTLB + if (swiotlb_nr_tbl()) { +- return ttm_dma_populate(>t->ttm, rdev->dev); ++ return ttm_dma_populate(>t->ttm, rdev->dev, ctx); + } + #endif + +- return ttm_populate_and_map_pages(rdev->dev, >t->ttm); ++ return ttm_populate_and_map_pages(rdev->dev, >t->ttm, ctx); + } + + static void radeon_ttm_tt_unpopulate(struct ttm_tt *ttm) +diff --git a/drivers/gpu/drm/ttm/ttm_agp_backend.c b/drivers/gpu/drm/ttm/ttm_agp_backend.c +index 7222017..7c2485f 100644 +--- a/drivers/gpu/drm/ttm/ttm_agp_backend.c ++++ b/drivers/gpu/drm/ttm/ttm_agp_backend.c +@@ -133,12 +133,12 @@ struct ttm_tt *ttm_agp_tt_create(struct ttm_buffer_object *bo, + } + EXPORT_SYMBOL(ttm_agp_tt_create); + +-int ttm_agp_tt_populate(struct ttm_tt *ttm) ++int ttm_agp_tt_populate(struct ttm_tt *ttm, struct ttm_operation_ctx *ctx) + { + if (ttm->state != tt_unpopulated) + return 0; + +- return ttm_pool_populate(ttm); ++ return ttm_pool_populate(ttm, ctx); + } + EXPORT_SYMBOL(ttm_agp_tt_populate); + +diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c +index 7c2fbdb..174ef9a 100644 +--- a/drivers/gpu/drm/ttm/ttm_bo_util.c ++++ b/drivers/gpu/drm/ttm/ttm_bo_util.c +@@ -376,7 +376,7 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo, + * TTM might be null for moves within the same region. + */ + if (ttm && ttm->state == tt_unpopulated) { +- ret = ttm->bdev->driver->ttm_tt_populate(ttm); ++ ret = ttm->bdev->driver->ttm_tt_populate(ttm, ctx); + if (ret) + goto out1; + } +@@ -545,14 +545,19 @@ static int ttm_bo_kmap_ttm(struct ttm_buffer_object *bo, + unsigned long num_pages, + struct ttm_bo_kmap_obj *map) + { +- struct ttm_mem_reg *mem = &bo->mem; pgprot_t prot; ++ struct ttm_mem_reg *mem = &bo->mem; ++ struct ttm_operation_ctx ctx = { ++ .interruptible = false, ++ .no_wait_gpu = false ++ }; + struct ttm_tt *ttm = bo->ttm; ++ pgprot_t prot; + int ret; + + BUG_ON(!ttm); + + if (ttm->state == tt_unpopulated) { +- ret = ttm->bdev->driver->ttm_tt_populate(ttm); ++ ret = ttm->bdev->driver->ttm_tt_populate(ttm, &ctx); + if (ret) + return ret; + } +diff --git a/drivers/gpu/drm/ttm/ttm_bo_vm.c b/drivers/gpu/drm/ttm/ttm_bo_vm.c +index b17d0d3..77e6577 100644 +--- a/drivers/gpu/drm/ttm/ttm_bo_vm.c ++++ b/drivers/gpu/drm/ttm/ttm_bo_vm.c +@@ -215,12 +215,17 @@ static int ttm_bo_vm_fault(struct vm_fault *vmf) + cvma.vm_page_prot = ttm_io_prot(bo->mem.placement, + cvma.vm_page_prot); + } else { ++ struct ttm_operation_ctx ctx = { ++ .interruptible = false, ++ .no_wait_gpu = false ++ }; ++ + ttm = bo->ttm; + cvma.vm_page_prot = ttm_io_prot(bo->mem.placement, + cvma.vm_page_prot); + + /* Allocate all page at once, most common usage */ +- if (ttm->bdev->driver->ttm_tt_populate(ttm)) { ++ if (ttm->bdev->driver->ttm_tt_populate(ttm, &ctx)) { + retval = VM_FAULT_OOM; + goto out_io_unlock; + } +diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc.c b/drivers/gpu/drm/ttm/ttm_page_alloc.c +index ae8ec03..55c9a90 100644 +--- a/drivers/gpu/drm/ttm/ttm_page_alloc.c ++++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c +@@ -866,13 +866,9 @@ void ttm_page_alloc_fini(void) + _manager = NULL; + } + +-int ttm_pool_populate(struct ttm_tt *ttm) ++int ttm_pool_populate(struct ttm_tt *ttm, struct ttm_operation_ctx *ctx) + { + struct ttm_mem_global *mem_glob = ttm->glob->mem_glob; +- struct ttm_operation_ctx ctx = { +- .interruptible = false, +- .no_wait_gpu = false +- }; + unsigned i; + int ret; + +@@ -889,7 +885,7 @@ int ttm_pool_populate(struct ttm_tt *ttm) + } + + ret = ttm_mem_global_alloc_page(mem_glob, ttm->pages[i], +- PAGE_SIZE, &ctx); ++ PAGE_SIZE, ctx); + if (unlikely(ret != 0)) { + ttm_pool_unpopulate(ttm); + return -ENOMEM; +@@ -926,12 +922,13 @@ void ttm_pool_unpopulate(struct ttm_tt *ttm) + } + EXPORT_SYMBOL(ttm_pool_unpopulate); + +-int ttm_populate_and_map_pages(struct device *dev, struct ttm_dma_tt *tt) ++int ttm_populate_and_map_pages(struct device *dev, struct ttm_dma_tt *tt, ++ struct ttm_operation_ctx *ctx) + { + unsigned i; + int r; + +- r = ttm_pool_populate(&tt->ttm); ++ r = ttm_pool_populate(&tt->ttm, ctx); + if (r) + return r; + +diff --git a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c +index f9e8307..47ba7be 100644 +--- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c ++++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c +@@ -875,14 +875,11 @@ static int ttm_dma_pool_get_pages(struct dma_pool *pool, + * On success pages list will hold count number of correctly + * cached pages. On failure will hold the negative return value (-ENOMEM, etc). + */ +-int ttm_dma_populate(struct ttm_dma_tt *ttm_dma, struct device *dev) ++int ttm_dma_populate(struct ttm_dma_tt *ttm_dma, struct device *dev, ++ struct ttm_operation_ctx *ctx) + { + struct ttm_tt *ttm = &ttm_dma->ttm; + struct ttm_mem_global *mem_glob = ttm->glob->mem_glob; +- struct ttm_operation_ctx ctx = { +- .interruptible = false, +- .no_wait_gpu = false +- }; + unsigned long num_pages = ttm->num_pages; + struct dma_pool *pool; + enum pool_type type; +@@ -918,7 +915,7 @@ int ttm_dma_populate(struct ttm_dma_tt *ttm_dma, struct device *dev) + } + + ret = ttm_mem_global_alloc_page(mem_glob, ttm->pages[i], +- pool->size, &ctx); ++ pool->size, ctx); + if (unlikely(ret != 0)) { + ttm_dma_unpopulate(ttm_dma, dev); + return -ENOMEM; +diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c +index 5155acc..0ce3e54 100644 +--- a/drivers/gpu/drm/ttm/ttm_tt.c ++++ b/drivers/gpu/drm/ttm/ttm_tt.c +@@ -333,6 +333,10 @@ void ttm_tt_unbind(struct ttm_tt *ttm) + + int ttm_tt_bind(struct ttm_tt *ttm, struct ttm_mem_reg *bo_mem) + { ++ struct ttm_operation_ctx ctx = { ++ .interruptible = false, ++ .no_wait_gpu = false ++ }; + int ret = 0; + + if (!ttm) +@@ -341,7 +345,7 @@ int ttm_tt_bind(struct ttm_tt *ttm, struct ttm_mem_reg *bo_mem) + if (ttm->state == tt_bound) + return 0; + +- ret = ttm->bdev->driver->ttm_tt_populate(ttm); ++ ret = ttm->bdev->driver->ttm_tt_populate(ttm, &ctx); + if (ret) + return ret; + +diff --git a/drivers/gpu/drm/virtio/virtgpu_object.c b/drivers/gpu/drm/virtio/virtgpu_object.c +index 6f66b73..0b90cdb 100644 +--- a/drivers/gpu/drm/virtio/virtgpu_object.c ++++ b/drivers/gpu/drm/virtio/virtgpu_object.c +@@ -124,13 +124,17 @@ int virtio_gpu_object_get_sg_table(struct virtio_gpu_device *qdev, + int ret; + struct page **pages = bo->tbo.ttm->pages; + int nr_pages = bo->tbo.num_pages; ++ struct ttm_operation_ctx ctx = { ++ .interruptible = false, ++ .no_wait_gpu = false ++ }; + + /* wtf swapping */ + if (bo->pages) + return 0; + + if (bo->tbo.ttm->state == tt_unpopulated) +- bo->tbo.ttm->bdev->driver->ttm_tt_populate(bo->tbo.ttm); ++ bo->tbo.ttm->bdev->driver->ttm_tt_populate(bo->tbo.ttm, &ctx); + bo->pages = kmalloc(sizeof(struct sg_table), GFP_KERNEL); + if (!bo->pages) + goto out; +diff --git a/drivers/gpu/drm/virtio/virtgpu_ttm.c b/drivers/gpu/drm/virtio/virtgpu_ttm.c +index 9113f2e..a9f2fb0 100644 +--- a/drivers/gpu/drm/virtio/virtgpu_ttm.c ++++ b/drivers/gpu/drm/virtio/virtgpu_ttm.c +@@ -324,12 +324,13 @@ static struct ttm_backend_func virtio_gpu_backend_func = { + .destroy = &virtio_gpu_ttm_backend_destroy, + }; + +-static int virtio_gpu_ttm_tt_populate(struct ttm_tt *ttm) ++static int virtio_gpu_ttm_tt_populate(struct ttm_tt *ttm, ++ struct ttm_operation_ctx *ctx) + { + if (ttm->state != tt_unpopulated) + return 0; + +- return ttm_pool_populate(ttm); ++ return ttm_pool_populate(ttm, ctx); + } + + static void virtio_gpu_ttm_tt_unpopulate(struct ttm_tt *ttm) +diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c +index 7ea1c85..bab10e3 100644 +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_buffer.c +@@ -635,16 +635,12 @@ static void vmw_ttm_destroy(struct ttm_tt *ttm) + } + + +-static int vmw_ttm_populate(struct ttm_tt *ttm) ++static int vmw_ttm_populate(struct ttm_tt *ttm, struct ttm_operation_ctx *ctx) + { + struct vmw_ttm_tt *vmw_tt = + 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) +@@ -653,15 +649,16 @@ 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, &ctx); ++ ret = ttm_mem_global_alloc(glob, size, ctx); + if (unlikely(ret != 0)) + return ret; + +- ret = ttm_dma_populate(&vmw_tt->dma_ttm, dev_priv->dev->dev); ++ ret = ttm_dma_populate(&vmw_tt->dma_ttm, dev_priv->dev->dev, ++ ctx); + if (unlikely(ret != 0)) + ttm_mem_global_free(glob, size); + } else +- ret = ttm_pool_populate(ttm); ++ ret = ttm_pool_populate(ttm, ctx); + + return ret; + } +diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c +index b17f08f..736ca47 100644 +--- a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c ++++ b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c +@@ -240,6 +240,10 @@ static int vmw_otable_batch_setup(struct vmw_private *dev_priv, + unsigned long offset; + unsigned long bo_size; + struct vmw_otable *otables = batch->otables; ++ struct ttm_operation_ctx ctx = { ++ .interruptible = false, ++ .no_wait_gpu = false ++ }; + SVGAOTableType i; + int ret; + +@@ -264,7 +268,7 @@ static int vmw_otable_batch_setup(struct vmw_private *dev_priv, + + ret = ttm_bo_reserve(batch->otable_bo, false, true, NULL); + BUG_ON(ret != 0); +- ret = vmw_bo_driver.ttm_tt_populate(batch->otable_bo->ttm); ++ ret = vmw_bo_driver.ttm_tt_populate(batch->otable_bo->ttm, &ctx); + if (unlikely(ret != 0)) + goto out_unreserve; + ret = vmw_bo_map_dma(batch->otable_bo); +@@ -430,6 +434,11 @@ static int vmw_mob_pt_populate(struct vmw_private *dev_priv, + struct vmw_mob *mob) + { + int ret; ++ struct ttm_operation_ctx ctx = { ++ .interruptible = false, ++ .no_wait_gpu = false ++ }; ++ + BUG_ON(mob->pt_bo != NULL); + + ret = ttm_bo_create(&dev_priv->bdev, mob->num_pages * PAGE_SIZE, +@@ -442,7 +451,7 @@ static int vmw_mob_pt_populate(struct vmw_private *dev_priv, + ret = ttm_bo_reserve(mob->pt_bo, false, true, NULL); + + BUG_ON(ret != 0); +- ret = vmw_bo_driver.ttm_tt_populate(mob->pt_bo->ttm); ++ ret = vmw_bo_driver.ttm_tt_populate(mob->pt_bo->ttm, &ctx); + if (unlikely(ret != 0)) + goto out_unreserve; + ret = vmw_bo_map_dma(mob->pt_bo); +-- +2.7.4 + |