Message ID | 20200804025632.3868079-34-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:56:06PM +1000, Dave Airlie wrote: > From: Dave Airlie <airlied@redhat.com> > > Signed-off-by: Dave Airlie <airlied@redhat.com> > --- > drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 9 ++++----- > drivers/gpu/drm/vmwgfx/vmwgfx_drv.h | 1 + > drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c | 11 ++++++++--- > 3 files changed, 13 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c > index 4f4d22bac477..f368a9cc0c2a 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c > @@ -996,9 +996,9 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset) > vmw_kms_close(dev_priv); > out_no_kms: > if (dev_priv->has_mob) > - (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB); > + vmw_gmrid_man_fini(dev_priv, VMW_PL_MOB); > if (dev_priv->has_gmr) > - (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR); > + vmw_gmrid_man_fini(dev_priv, VMW_PL_GMR); > vmw_vram_manager_fini(dev_priv); > out_no_vram: > (void)ttm_bo_device_release(&dev_priv->bdev); > @@ -1047,12 +1047,11 @@ static void vmw_driver_unload(struct drm_device *dev) > vmw_overlay_close(dev_priv); > > if (dev_priv->has_gmr) > - (void)ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR); > - (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM); > + vmw_gmrid_man_fini(dev_priv, VMW_PL_GMR); > > vmw_release_device_early(dev_priv); > if (dev_priv->has_mob) > - (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB); > + vmw_gmrid_man_fini(dev_priv, VMW_PL_MOB); > vmw_vram_manager_fini(dev_priv); > (void) ttm_bo_device_release(&dev_priv->bdev); > drm_vma_offset_manager_destroy(&dev_priv->vma_manager); > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h > index c6530d7b6d51..aa763c6b1146 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h > @@ -1222,6 +1222,7 @@ int vmw_overlay_num_free_overlays(struct vmw_private *dev_priv); > */ > > int vmw_gmrid_man_init(struct vmw_private *dev_priv, int type); > +void vmw_gmrid_man_fini(struct vmw_private *dev_priv, int type); > > /** > * Prime - vmwgfx_prime.c > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c > index 141fb14e3583..ec1b5bb01a93 100644 > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c > @@ -133,20 +133,25 @@ int vmw_gmrid_man_init(struct vmw_private *dev_priv, int type) > return 0; > } > > -static int vmw_gmrid_man_takedown(struct ttm_mem_type_manager *man) > +void vmw_gmrid_man_fini(struct vmw_private *dev_priv, int type) > { > + struct ttm_mem_type_manager *man = &dev_priv->bdev.man[type]; > struct vmwgfx_gmrid_man *gman = > (struct vmwgfx_gmrid_man *)man->priv; > > + ttm_mem_type_manager_disable(man); > + > + ttm_mem_type_manager_force_list_clean(&dev_priv->bdev, man); > + > if (gman) { I don't think this can ever be non-NULL if init worked, not after the demidlayering. Maybe put a WARN_ON(!gman) in here. With that: Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> > ida_destroy(&gman->gmr_ida); > kfree(gman); > } > - return 0; > + > + ttm_mem_type_manager_cleanup(man); > } > > static const struct ttm_mem_type_manager_func vmw_gmrid_manager_func = { > - .takedown = vmw_gmrid_man_takedown, > .get_node = vmw_gmrid_man_get_node, > .put_node = vmw_gmrid_man_put_node, > }; > -- > 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.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c index 4f4d22bac477..f368a9cc0c2a 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c @@ -996,9 +996,9 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset) vmw_kms_close(dev_priv); out_no_kms: if (dev_priv->has_mob) - (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB); + vmw_gmrid_man_fini(dev_priv, VMW_PL_MOB); if (dev_priv->has_gmr) - (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR); + vmw_gmrid_man_fini(dev_priv, VMW_PL_GMR); vmw_vram_manager_fini(dev_priv); out_no_vram: (void)ttm_bo_device_release(&dev_priv->bdev); @@ -1047,12 +1047,11 @@ static void vmw_driver_unload(struct drm_device *dev) vmw_overlay_close(dev_priv); if (dev_priv->has_gmr) - (void)ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_GMR); - (void)ttm_bo_clean_mm(&dev_priv->bdev, TTM_PL_VRAM); + vmw_gmrid_man_fini(dev_priv, VMW_PL_GMR); vmw_release_device_early(dev_priv); if (dev_priv->has_mob) - (void) ttm_bo_clean_mm(&dev_priv->bdev, VMW_PL_MOB); + vmw_gmrid_man_fini(dev_priv, VMW_PL_MOB); vmw_vram_manager_fini(dev_priv); (void) ttm_bo_device_release(&dev_priv->bdev); drm_vma_offset_manager_destroy(&dev_priv->vma_manager); diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h index c6530d7b6d51..aa763c6b1146 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.h @@ -1222,6 +1222,7 @@ int vmw_overlay_num_free_overlays(struct vmw_private *dev_priv); */ int vmw_gmrid_man_init(struct vmw_private *dev_priv, int type); +void vmw_gmrid_man_fini(struct vmw_private *dev_priv, int type); /** * Prime - vmwgfx_prime.c diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c index 141fb14e3583..ec1b5bb01a93 100644 --- a/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_gmrid_manager.c @@ -133,20 +133,25 @@ int vmw_gmrid_man_init(struct vmw_private *dev_priv, int type) return 0; } -static int vmw_gmrid_man_takedown(struct ttm_mem_type_manager *man) +void vmw_gmrid_man_fini(struct vmw_private *dev_priv, int type) { + struct ttm_mem_type_manager *man = &dev_priv->bdev.man[type]; struct vmwgfx_gmrid_man *gman = (struct vmwgfx_gmrid_man *)man->priv; + ttm_mem_type_manager_disable(man); + + ttm_mem_type_manager_force_list_clean(&dev_priv->bdev, man); + if (gman) { ida_destroy(&gman->gmr_ida); kfree(gman); } - return 0; + + ttm_mem_type_manager_cleanup(man); } static const struct ttm_mem_type_manager_func vmw_gmrid_manager_func = { - .takedown = vmw_gmrid_man_takedown, .get_node = vmw_gmrid_man_get_node, .put_node = vmw_gmrid_man_put_node, };