drm/vmwgfx: unbind in vmw_ttm_unpopulate
authorChristian König <ckoenig.leichtzumerken@gmail.com>
Wed, 28 Jul 2021 13:05:48 +0000 (15:05 +0200)
committerChristian König <christian.koenig@amd.com>
Mon, 23 Aug 2021 11:42:25 +0000 (13:42 +0200)
Doing this in vmw_ttm_destroy() is to late.

It turned out that this is not a good idea at all because it leaves pointers
to freed up system memory pages in the GART tables of the drivers.

Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Thomas Hellström <thomas.hellstrom@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20210728130552.2074-1-christian.koenig@amd.com
drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c

index b0973c27e774d31ce27ef063ed692ea7933a49eb..904031d03dbe3adbdfd4a3c81e5605143147d1df 100644 (file)
@@ -526,14 +526,9 @@ static void vmw_ttm_destroy(struct ttm_device *bdev, struct ttm_tt *ttm)
        struct vmw_ttm_tt *vmw_be =
                container_of(ttm, struct vmw_ttm_tt, dma_ttm);
 
-       vmw_ttm_unbind(bdev, ttm);
        ttm_tt_destroy_common(bdev, ttm);
        vmw_ttm_unmap_dma(vmw_be);
-       if (vmw_be->dev_priv->map_mode == vmw_dma_alloc_coherent)
-               ttm_tt_fini(&vmw_be->dma_ttm);
-       else
-               ttm_tt_fini(ttm);
-
+       ttm_tt_fini(ttm);
        if (vmw_be->mob)
                vmw_mob_destroy(vmw_be->mob);
 
@@ -578,6 +573,8 @@ static void vmw_ttm_unpopulate(struct ttm_device *bdev,
                                                 dma_ttm);
        unsigned int i;
 
+       vmw_ttm_unbind(bdev, ttm);
+
        if (vmw_tt->mob) {
                vmw_mob_destroy(vmw_tt->mob);
                vmw_tt->mob = NULL;