drm/nouveau: unbind in nouveau_ttm_tt_unpopulate
authorChristian König <ckoenig.leichtzumerken@gmail.com>
Wed, 28 Jul 2021 13:05:50 +0000 (15:05 +0200)
committerChristian König <christian.koenig@amd.com>
Mon, 23 Aug 2021 11:43:35 +0000 (13:43 +0200)
Doing this in nouveau_ttm_tt_destroy()/nouveau_sgdma_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-3-christian.koenig@amd.com
drivers/gpu/drm/nouveau/nouveau_bo.c
drivers/gpu/drm/nouveau/nouveau_sgdma.c

index 6d07e65..c33a56c 100644 (file)
@@ -1277,6 +1277,8 @@ nouveau_ttm_tt_unpopulate(struct ttm_device *bdev,
        if (slave)
                return;
 
+       nouveau_ttm_tt_unbind(bdev, ttm);
+
        drm = nouveau_bdev(bdev);
        dev = drm->dev->dev;
 
@@ -1290,7 +1292,6 @@ nouveau_ttm_tt_destroy(struct ttm_device *bdev,
 #if IS_ENABLED(CONFIG_AGP)
        struct nouveau_drm *drm = nouveau_bdev(bdev);
        if (drm->agp.bridge) {
-               ttm_agp_unbind(ttm);
                ttm_tt_destroy_common(bdev, ttm);
                ttm_agp_destroy(ttm);
                return;
index 256ec5b..bde92a9 100644 (file)
@@ -21,7 +21,6 @@ nouveau_sgdma_destroy(struct ttm_device *bdev, struct ttm_tt *ttm)
        struct nouveau_sgdma_be *nvbe = (struct nouveau_sgdma_be *)ttm;
 
        if (ttm) {
-               nouveau_sgdma_unbind(bdev, ttm);
                ttm_tt_destroy_common(bdev, ttm);
                ttm_tt_fini(&nvbe->ttm);
                kfree(nvbe);