drm/amdgpu: Set TTM_PAGE_FLAG_SG earlier for userprt BOs
authorxinhui pan <xinhui.pan@amd.com>
Wed, 16 Jun 2021 04:32:34 +0000 (12:32 +0800)
committerAlex Deucher <alexander.deucher@amd.com>
Fri, 18 Jun 2021 21:01:35 +0000 (17:01 -0400)
Because TTM do page counting on userptr BOs which is actually not
needed. To avoid that, lets set TTM_PAGE_FLAG_SG after tt_create and
before tt_populate.

Signed-off-by: xinhui pan <xinhui.pan@amd.com>
Reviewed-by: Christian König <christian.koenig@amd.com>
Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c

index 80dff29f2bc721197413b159b81a847c189337eb..43421bd9d801069803e5a6579d7fc6404c2d5b07 100644 (file)
@@ -1129,8 +1129,6 @@ static int amdgpu_ttm_tt_populate(struct ttm_device *bdev,
                ttm->sg = kzalloc(sizeof(struct sg_table), GFP_KERNEL);
                if (!ttm->sg)
                        return -ENOMEM;
-
-               ttm->page_flags |= TTM_PAGE_FLAG_SG;
                return 0;
        }
 
@@ -1156,7 +1154,6 @@ static void amdgpu_ttm_tt_unpopulate(struct ttm_device *bdev,
                amdgpu_ttm_tt_set_user_pages(ttm, NULL);
                kfree(ttm->sg);
                ttm->sg = NULL;
-               ttm->page_flags &= ~TTM_PAGE_FLAG_SG;
                return;
        }
 
@@ -1190,6 +1187,9 @@ int amdgpu_ttm_tt_set_userptr(struct ttm_buffer_object *bo,
                        return -ENOMEM;
        }
 
+       /* Set TTM_PAGE_FLAG_SG before populate but after create. */
+       bo->ttm->page_flags |= TTM_PAGE_FLAG_SG;
+
        gtt = (void *)bo->ttm;
        gtt->userptr = addr;
        gtt->userflags = flags;