From: "Christian König" <ckoenig.leichtzumerken@gmail.com>
To: Roger He <Hongbo.He@amd.com>,
amd-gfx@lists.freedesktop.org, dri-devel@lists.freedesktop.org
Subject: Re: [PATCH 4/7] drm/ttm: use an operation ctx for ttm_tt_populate in ttm_bo_driver
Date: Wed, 20 Dec 2017 15:20:27 +0100 [thread overview]
Message-ID: <6400976c-80fd-9a4f-377e-8de50b344a12@gmail.com> (raw)
In-Reply-To: <1513766101-15993-4-git-send-email-Hongbo.He@amd.com>
Am 20.12.2017 um 11:34 schrieb Roger He:
> Change-Id: I803ea52d11e5c06add0dffab836c3aecc00b56dd
> Signed-off-by: Roger He <Hongbo.He@amd.com>
Commit message! And please double check the coding style of
ast_ttm_tt_populate.
With that fixed that patch is Reviewed-by: Christian König
<christian.koenig@amd.com>.
Regards,
Christian.
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 7 ++++---
> drivers/gpu/drm/ast/ast_ttm.c | 5 +++--
> drivers/gpu/drm/cirrus/cirrus_ttm.c | 5 +++--
> drivers/gpu/drm/nouveau/nouveau_bo.c | 8 ++++----
> 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 | 11 ++++-------
> 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 +++++++++++--
> include/drm/ttm/ttm_bo_driver.h | 5 +++--
> include/drm/ttm/ttm_page_alloc.h | 11 +++++++----
> 18 files changed, 86 insertions(+), 58 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index f1b7d98..52aab9d 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -990,7 +990,8 @@ static struct ttm_tt *amdgpu_ttm_tt_create(struct ttm_bo_device *bdev,
> 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;
> @@ -1018,11 +1019,11 @@ static int amdgpu_ttm_tt_populate(struct ttm_tt *ttm)
>
> #ifdef CONFIG_SWIOTLB
> if (swiotlb_nr_tbl()) {
> - return ttm_dma_populate(>t->ttm, adev->dev);
> + return ttm_dma_populate(>t->ttm, adev->dev, ctx);
> }
> #endif
>
> - 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 28da7c2..1413e94 100644
> --- a/drivers/gpu/drm/ast/ast_ttm.c
> +++ b/drivers/gpu/drm/ast/ast_ttm.c
> @@ -216,9 +216,10 @@ static struct ttm_tt *ast_ttm_tt_create(struct ttm_bo_device *bdev,
> 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 2a5b54d..95e2d40 100644
> --- a/drivers/gpu/drm/cirrus/cirrus_ttm.c
> +++ b/drivers/gpu/drm/cirrus/cirrus_ttm.c
> @@ -216,9 +216,10 @@ static struct ttm_tt *cirrus_ttm_tt_create(struct ttm_bo_device *bdev,
> 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/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
> index 6b6fb20..b141c27 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
> @@ -1547,7 +1547,7 @@ nouveau_ttm_fault_reserve_notify(struct ttm_buffer_object *bo)
> }
>
> static int
> -nouveau_ttm_tt_populate(struct ttm_tt *ttm)
> +nouveau_ttm_tt_populate(struct ttm_tt *ttm, struct ttm_operation_ctx *ctx)
> {
> struct ttm_dma_tt *ttm_dma = (void *)ttm;
> struct nouveau_drm *drm;
> @@ -1572,17 +1572,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);
> + return ttm_dma_populate((void *)ttm, 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 78ce118..989645c 100644
> --- a/drivers/gpu/drm/qxl/qxl_ttm.c
> +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
> @@ -291,14 +291,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 557fd79..634fc6f 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 028ab60..3e795a0 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_bo_device *bdev,
> }
> 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 6e353df..b7eb507 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 c8ebb75..65dfcdd 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 8f93ff3..f1a3d55 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc.c
> @@ -1058,13 +1058,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;
>
> @@ -1080,7 +1076,7 @@ int ttm_pool_populate(struct ttm_tt *ttm)
>
> for (i = 0; i < ttm->num_pages; ++i) {
> 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;
> @@ -1117,12 +1113,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, j;
> 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 8aac86a..3ac5391 100644
> --- a/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> +++ b/drivers/gpu/drm/ttm/ttm_page_alloc_dma.c
> @@ -923,14 +923,11 @@ static gfp_t ttm_dma_pool_gfp_flags(struct ttm_dma_tt *ttm_dma, bool huge)
> * 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;
> @@ -966,7 +963,7 @@ int ttm_dma_populate(struct ttm_dma_tt *ttm_dma, struct device *dev)
> break;
>
> 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;
> @@ -1002,7 +999,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 8ebc8d3..b48d7a0 100644
> --- a/drivers/gpu/drm/ttm/ttm_tt.c
> +++ b/drivers/gpu/drm/ttm/ttm_tt.c
> @@ -263,6 +263,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)
> @@ -271,7 +275,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 488c6bd..72eb417 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 ef97542..90b0d6b 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);
> diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
> index 934fecf..84860ec 100644
> --- a/include/drm/ttm/ttm_bo_driver.h
> +++ b/include/drm/ttm/ttm_bo_driver.h
> @@ -352,7 +352,8 @@ struct ttm_bo_driver {
> * Returns:
> * -ENOMEM: Out of memory.
> */
> - int (*ttm_tt_populate)(struct ttm_tt *ttm);
> + int (*ttm_tt_populate)(struct ttm_tt *ttm,
> + struct ttm_operation_ctx *ctx);
>
> /**
> * ttm_tt_unpopulate
> @@ -1077,7 +1078,7 @@ struct ttm_tt *ttm_agp_tt_create(struct ttm_bo_device *bdev,
> struct agp_bridge_data *bridge,
> unsigned long size, uint32_t page_flags,
> struct page *dummy_read_page);
> -int ttm_agp_tt_populate(struct ttm_tt *ttm);
> +int ttm_agp_tt_populate(struct ttm_tt *ttm, struct ttm_operation_ctx *ctx);
> void ttm_agp_tt_unpopulate(struct ttm_tt *ttm);
> #endif
>
> diff --git a/include/drm/ttm/ttm_page_alloc.h b/include/drm/ttm/ttm_page_alloc.h
> index 5938113..f8395dd 100644
> --- a/include/drm/ttm/ttm_page_alloc.h
> +++ b/include/drm/ttm/ttm_page_alloc.h
> @@ -47,7 +47,7 @@ void ttm_page_alloc_fini(void);
> *
> * Add backing pages to all of @ttm
> */
> -int ttm_pool_populate(struct ttm_tt *ttm);
> +int ttm_pool_populate(struct ttm_tt *ttm, struct ttm_operation_ctx *ctx);
>
> /**
> * ttm_pool_unpopulate:
> @@ -61,7 +61,8 @@ void ttm_pool_unpopulate(struct ttm_tt *ttm);
> /**
> * Populates and DMA maps pages to fullfil a ttm_dma_populate() request
> */
> -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);
>
> /**
> * Unpopulates and DMA unmaps pages as part of a
> @@ -89,7 +90,8 @@ void ttm_dma_page_alloc_fini(void);
> */
> int ttm_dma_page_alloc_debugfs(struct seq_file *m, void *data);
>
> -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);
> void ttm_dma_unpopulate(struct ttm_dma_tt *ttm_dma, struct device *dev);
>
> #else
> @@ -106,7 +108,8 @@ static inline int ttm_dma_page_alloc_debugfs(struct seq_file *m, void *data)
> return 0;
> }
> static inline int ttm_dma_populate(struct ttm_dma_tt *ttm_dma,
> - struct device *dev)
> + struct device *dev,
> + struct ttm_operation_ctx *ctx)
> {
> return -ENOMEM;
> }
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
next prev parent reply other threads:[~2017-12-20 14:20 UTC|newest]
Thread overview: 22+ messages / expand[flat|nested] mbox.gz Atom feed top
2017-12-20 10:34 [PATCH 1/7] drm/ttm: call ttm_bo_swapout directly when ttm shrink Roger He
2017-12-20 10:34 ` [PATCH 3/7] drm/ttm: use an operation ctx for ttm_mem_global_alloc_page Roger He
[not found] ` <1513766101-15993-3-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
2017-12-20 13:35 ` Christian König
[not found] ` <edd81ee9-bb23-84c4-4065-2b424c95724e-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2017-12-21 6:05 ` He, Roger
[not found] ` <BN6PR1201MB0114CD1510459BE13D0BF292FD0D0-6iU6OBHu2P8MH+E/uqw63WrFom/aUZj6nBOFsp37pqbUKgpGm//BTAC/G2K4zDHf@public.gmane.org>
2017-12-21 8:15 ` Thomas Hellstrom
2017-12-20 10:35 ` [PATCH 6/7] drm/ttm: add ttm_bo_evict_swapout_allowable to check bo is allowable to evict or swapout Roger He
2017-12-21 7:50 ` Thomas Hellstrom
2017-12-25 3:10 ` He, Roger
[not found] ` <1513766101-15993-1-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
2017-12-20 10:34 ` [PATCH 2/7] drm/ttm: use an operation ctx for ttm_mem_global_alloc Roger He
[not found] ` <1513766101-15993-2-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
2017-12-20 13:33 ` Christian König
[not found] ` <15e3b956-8777-8fb1-2709-5409a756f0be-Re5JQEeQqe8AvxtiuMwx3w@public.gmane.org>
2018-01-24 23:24 ` Sinclair Yeh
[not found] ` <20180124232346.GA59165-WSU1YMatGzO44ywRPIzf9A@public.gmane.org>
2018-01-25 8:31 ` Christian König
2017-12-21 8:07 ` Thomas Hellstrom
2017-12-20 10:34 ` [PATCH 4/7] drm/ttm: use an operation ctx for ttm_tt_populate in ttm_bo_driver Roger He
2017-12-20 14:20 ` Christian König [this message]
2017-12-20 10:34 ` [PATCH 5/7] drm/ttm: use an operation ctx for ttm_tt_bind Roger He
2017-12-20 10:35 ` [PATCH 7/7] drm/ttm: enable swapout of per VM BOs during allocation and allows reaping of deleted BOs Roger He
[not found] ` <1513766101-15993-7-git-send-email-Hongbo.He-5C7GfCeVMHo@public.gmane.org>
2017-12-21 7:58 ` Thomas Hellstrom
2017-12-21 8:18 ` Christian König
2017-12-20 13:29 ` [PATCH 1/7] drm/ttm: call ttm_bo_swapout directly when ttm shrink Christian König
2017-12-21 7:34 ` Thomas Hellstrom
[not found] ` <b0f51ff0-950e-bbe0-0032-e0e714d94350-4+hqylr40dJg9hUCZPvPmw@public.gmane.org>
2017-12-21 9:17 ` He, Roger
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=6400976c-80fd-9a4f-377e-8de50b344a12@gmail.com \
--to=ckoenig.leichtzumerken@gmail.com \
--cc=Hongbo.He@amd.com \
--cc=amd-gfx@lists.freedesktop.org \
--cc=christian.koenig@amd.com \
--cc=dri-devel@lists.freedesktop.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox