Message ID | 20200804025632.3868079-2-airlied@gmail.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Series | ttm misc cleanups, mem refactoring, rename objects. (v2) | expand |
On Tue, Aug 04, 2020 at 12:55:34PM +1000, Dave Airlie wrote: > From: Dave Airlie <airlied@redhat.com> > > These two functions has the same code in them, create a common > helper function instead. > > Signed-off-by: Dave Airlie <airlied@redhat.com> > --- > drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 4 ++ > drivers/gpu/drm/vmwgfx/vmwgfx_mob.c | 60 ++-------------------- > drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 32 ++++++++++++ > 3 files changed, 39 insertions(+), 57 deletions(-) > > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h > index 3596f3923ea3..b7c763713b4c 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h > @@ -1023,6 +1023,10 @@ extern int vmw_bo_map_dma(struct ttm_buffer_object *bo); > extern void vmw_bo_unmap_dma(struct ttm_buffer_object *bo); > extern const struct vmw_sg_table * > vmw_bo_sg_table(struct ttm_buffer_object *bo); > +extern int vmw_bo_create_and_populate(struct vmw_private *dev_priv, > + unsigned long bo_size, > + struct ttm_buffer_object **bo_p); > + > extern void vmw_piter_start(struct vmw_piter *viter, > const struct vmw_sg_table *vsgt, > unsigned long p_offs); > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c > index e8eb42933ca2..7f95ed6aa224 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c > @@ -238,10 +238,6 @@ 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; > > @@ -255,24 +251,9 @@ static int vmw_otable_batch_setup(struct vmw_private *dev_priv, > bo_size += otables[i].size; > } > > - ret = ttm_bo_create(&dev_priv->bdev, bo_size, > - ttm_bo_type_device, > - &vmw_sys_ne_placement, > - 0, false, &batch->otable_bo); > - > - if (unlikely(ret != 0)) > - goto out_no_bo; > - > - 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, &ctx); > - if (unlikely(ret != 0)) > - goto out_unreserve; > - ret = vmw_bo_map_dma(batch->otable_bo); > + ret = vmw_bo_create_and_populate(dev_priv, bo_size, &batch->otable_bo); > if (unlikely(ret != 0)) > - goto out_unreserve; > - > - ttm_bo_unreserve(batch->otable_bo); > + return ret; > > offset = 0; > for (i = 0; i < batch->num_otables; ++i) { > @@ -289,8 +270,6 @@ static int vmw_otable_batch_setup(struct vmw_private *dev_priv, > > return 0; > > -out_unreserve: > - ttm_bo_unreserve(batch->otable_bo); > out_no_setup: > for (i = 0; i < batch->num_otables; ++i) { > if (batch->otables[i].enabled) > @@ -300,7 +279,6 @@ static int vmw_otable_batch_setup(struct vmw_private *dev_priv, > > ttm_bo_put(batch->otable_bo); > batch->otable_bo = NULL; > -out_no_bo: > return ret; > } > > @@ -432,41 +410,9 @@ struct vmw_mob *vmw_mob_create(unsigned long data_pages) > 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, > - ttm_bo_type_device, > - &vmw_sys_ne_placement, > - 0, false, &mob->pt_bo); > - if (unlikely(ret != 0)) > - return ret; > - > - 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, &ctx); > - if (unlikely(ret != 0)) > - goto out_unreserve; > - ret = vmw_bo_map_dma(mob->pt_bo); > - if (unlikely(ret != 0)) > - goto out_unreserve; > - > - ttm_bo_unreserve(mob->pt_bo); > - > - return 0; > - > -out_unreserve: > - ttm_bo_unreserve(mob->pt_bo); > - ttm_bo_put(mob->pt_bo); > - mob->pt_bo = NULL; > - > - return ret; > + return vmw_bo_create_and_populate(dev_priv, mob->num_pages * PAGE_SIZE, &mob->pt_bo); > } > > /** > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c > index 2deaaed334e6..8e2a82ded900 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c > @@ -817,3 +817,35 @@ struct ttm_bo_driver vmw_bo_driver = { > .swap_notify = vmw_swap_notify, > .io_mem_reserve = &vmw_ttm_io_mem_reserve, > }; > + > +int vmw_bo_create_and_populate(struct vmw_private *dev_priv, > + unsigned long bo_size, > + struct ttm_buffer_object **bo_p) > +{ > + struct ttm_operation_ctx ctx = { > + .interruptible = false, > + .no_wait_gpu = false > + }; > + struct ttm_buffer_object *bo; > + int ret; > + > + ret = ttm_bo_create(&dev_priv->bdev, bo_size, > + ttm_bo_type_device, > + &vmw_sys_ne_placement, > + 0, false, &bo); > + > + if (unlikely(ret != 0)) > + return ret; > + > + ret = ttm_bo_reserve(bo, false, true, NULL); > + BUG_ON(ret != 0); > + ret = vmw_bo_driver.ttm_tt_populate(bo->ttm, &ctx); > + if (likely(ret == 0)) > + ret = vmw_bo_map_dma(bo); > + > + ttm_bo_unreserve(bo); > + > + if (likely(ret == 0)) > + *bo_p = bo; > + return ret; > +} Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> > -- > 2.26.2 > > _______________________________________________ > dri-devel mailing list > dri-devel@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/dri-devel
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h index 3596f3923ea3..b7c763713b4c 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h @@ -1023,6 +1023,10 @@ extern int vmw_bo_map_dma(struct ttm_buffer_object *bo); extern void vmw_bo_unmap_dma(struct ttm_buffer_object *bo); extern const struct vmw_sg_table * vmw_bo_sg_table(struct ttm_buffer_object *bo); +extern int vmw_bo_create_and_populate(struct vmw_private *dev_priv, + unsigned long bo_size, + struct ttm_buffer_object **bo_p); + extern void vmw_piter_start(struct vmw_piter *viter, const struct vmw_sg_table *vsgt, unsigned long p_offs); diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c index e8eb42933ca2..7f95ed6aa224 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_mob.c @@ -238,10 +238,6 @@ 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; @@ -255,24 +251,9 @@ static int vmw_otable_batch_setup(struct vmw_private *dev_priv, bo_size += otables[i].size; } - ret = ttm_bo_create(&dev_priv->bdev, bo_size, - ttm_bo_type_device, - &vmw_sys_ne_placement, - 0, false, &batch->otable_bo); - - if (unlikely(ret != 0)) - goto out_no_bo; - - 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, &ctx); - if (unlikely(ret != 0)) - goto out_unreserve; - ret = vmw_bo_map_dma(batch->otable_bo); + ret = vmw_bo_create_and_populate(dev_priv, bo_size, &batch->otable_bo); if (unlikely(ret != 0)) - goto out_unreserve; - - ttm_bo_unreserve(batch->otable_bo); + return ret; offset = 0; for (i = 0; i < batch->num_otables; ++i) { @@ -289,8 +270,6 @@ static int vmw_otable_batch_setup(struct vmw_private *dev_priv, return 0; -out_unreserve: - ttm_bo_unreserve(batch->otable_bo); out_no_setup: for (i = 0; i < batch->num_otables; ++i) { if (batch->otables[i].enabled) @@ -300,7 +279,6 @@ static int vmw_otable_batch_setup(struct vmw_private *dev_priv, ttm_bo_put(batch->otable_bo); batch->otable_bo = NULL; -out_no_bo: return ret; } @@ -432,41 +410,9 @@ struct vmw_mob *vmw_mob_create(unsigned long data_pages) 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, - ttm_bo_type_device, - &vmw_sys_ne_placement, - 0, false, &mob->pt_bo); - if (unlikely(ret != 0)) - return ret; - - 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, &ctx); - if (unlikely(ret != 0)) - goto out_unreserve; - ret = vmw_bo_map_dma(mob->pt_bo); - if (unlikely(ret != 0)) - goto out_unreserve; - - ttm_bo_unreserve(mob->pt_bo); - - return 0; - -out_unreserve: - ttm_bo_unreserve(mob->pt_bo); - ttm_bo_put(mob->pt_bo); - mob->pt_bo = NULL; - - return ret; + return vmw_bo_create_and_populate(dev_priv, mob->num_pages * PAGE_SIZE, &mob->pt_bo); } /** diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c index 2deaaed334e6..8e2a82ded900 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c @@ -817,3 +817,35 @@ struct ttm_bo_driver vmw_bo_driver = { .swap_notify = vmw_swap_notify, .io_mem_reserve = &vmw_ttm_io_mem_reserve, }; + +int vmw_bo_create_and_populate(struct vmw_private *dev_priv, + unsigned long bo_size, + struct ttm_buffer_object **bo_p) +{ + struct ttm_operation_ctx ctx = { + .interruptible = false, + .no_wait_gpu = false + }; + struct ttm_buffer_object *bo; + int ret; + + ret = ttm_bo_create(&dev_priv->bdev, bo_size, + ttm_bo_type_device, + &vmw_sys_ne_placement, + 0, false, &bo); + + if (unlikely(ret != 0)) + return ret; + + ret = ttm_bo_reserve(bo, false, true, NULL); + BUG_ON(ret != 0); + ret = vmw_bo_driver.ttm_tt_populate(bo->ttm, &ctx); + if (likely(ret == 0)) + ret = vmw_bo_map_dma(bo); + + ttm_bo_unreserve(bo); + + if (likely(ret == 0)) + *bo_p = bo; + return ret; +}