On Tue, Aug 04, 2020 at 12:56:06PM +1000, Dave Airlie wrote: > From: Dave Airlie <airlied@xxxxxxxxxx> > > Signed-off-by: Dave Airlie <airlied@xxxxxxxxxx> > --- > 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@xxxxxxxx> > 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@xxxxxxxxxxxxxxxxxxxxx > https://lists.freedesktop.org/mailman/listinfo/dri-devel -- Daniel Vetter Software Engineer, Intel Corporation http://blog.ffwll.ch _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel