* More TTM cleanups
@ 2020-07-23 15:17 Christian König
2020-07-23 15:17 ` [PATCH 1/9] drm/ttm: initialize the system domain with defaults Christian König
` (8 more replies)
0 siblings, 9 replies; 23+ messages in thread
From: Christian König @ 2020-07-23 15:17 UTC (permalink / raw)
To: dri-devel
Just another round of random TTM cleanups.
Please review and/or comment.
Thanks,
Christian.
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 1/9] drm/ttm: initialize the system domain with defaults
2020-07-23 15:17 More TTM cleanups Christian König
@ 2020-07-23 15:17 ` Christian König
2020-07-24 6:43 ` Thomas Zimmermann
2020-07-23 15:17 ` [PATCH 2/9] drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED Christian König
` (7 subsequent siblings)
8 siblings, 1 reply; 23+ messages in thread
From: Christian König @ 2020-07-23 15:17 UTC (permalink / raw)
To: dri-devel
Instead of repeating that in each driver.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 3 ---
drivers/gpu/drm/drm_gem_vram_helper.c | 3 ---
drivers/gpu/drm/nouveau/nouveau_bo.c | 3 ---
drivers/gpu/drm/qxl/qxl_ttm.c | 3 ---
drivers/gpu/drm/radeon/radeon_ttm.c | 3 ---
drivers/gpu/drm/ttm/ttm_bo.c | 2 ++
drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 2 --
7 files changed, 2 insertions(+), 17 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 0dd5e802091d..e57c49a91b73 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -84,9 +84,6 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
switch (type) {
case TTM_PL_SYSTEM:
/* System memory */
- man->flags = 0;
- man->available_caching = TTM_PL_MASK_CACHING;
- man->default_caching = TTM_PL_FLAG_CACHED;
break;
case TTM_PL_TT:
/* GTT memory */
diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
index 3296ed3df358..be177afdeb9a 100644
--- a/drivers/gpu/drm/drm_gem_vram_helper.c
+++ b/drivers/gpu/drm/drm_gem_vram_helper.c
@@ -1009,9 +1009,6 @@ static int bo_driver_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
{
switch (type) {
case TTM_PL_SYSTEM:
- man->flags = 0;
- man->available_caching = TTM_PL_MASK_CACHING;
- man->default_caching = TTM_PL_FLAG_CACHED;
break;
case TTM_PL_VRAM:
man->func = &ttm_bo_manager_func;
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index 4ccf937df0d0..53af25020bb2 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -655,9 +655,6 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
switch (type) {
case TTM_PL_SYSTEM:
- man->flags = 0;
- man->available_caching = TTM_PL_MASK_CACHING;
- man->default_caching = TTM_PL_FLAG_CACHED;
break;
case TTM_PL_VRAM:
man->flags = TTM_MEMTYPE_FLAG_FIXED;
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
index 1d8e07b8b19e..e9b8c921c1f0 100644
--- a/drivers/gpu/drm/qxl/qxl_ttm.c
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
@@ -54,9 +54,6 @@ static int qxl_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
switch (type) {
case TTM_PL_SYSTEM:
/* System memory */
- man->flags = 0;
- man->available_caching = TTM_PL_MASK_CACHING;
- man->default_caching = TTM_PL_FLAG_CACHED;
break;
case TTM_PL_VRAM:
case TTM_PL_PRIV:
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
index b474781a0920..b4cb75361577 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -76,9 +76,6 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
switch (type) {
case TTM_PL_SYSTEM:
/* System memory */
- man->flags = 0;
- man->available_caching = TTM_PL_MASK_CACHING;
- man->default_caching = TTM_PL_FLAG_CACHED;
break;
case TTM_PL_TT:
man->func = &ttm_bo_manager_func;
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 7c02ce784805..1f1f9e463265 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -1677,6 +1677,8 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev,
* Initialize the system memory buffer type.
* Other types need to be driver / IOCTL initialized.
*/
+ bdev->man[TTM_PL_SYSTEM].available_caching = TTM_PL_MASK_CACHING;
+ bdev->man[TTM_PL_SYSTEM].default_caching = TTM_PL_FLAG_CACHED;
ret = ttm_bo_init_mm(bdev, TTM_PL_SYSTEM, 0);
if (unlikely(ret != 0))
goto out_no_sys;
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
index 1d78187eaba6..00cef1a3a178 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
@@ -742,8 +742,6 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
switch (type) {
case TTM_PL_SYSTEM:
/* System memory */
- man->available_caching = TTM_PL_FLAG_CACHED;
- man->default_caching = TTM_PL_FLAG_CACHED;
break;
case TTM_PL_VRAM:
/* "On-card" video ram */
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 2/9] drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED
2020-07-23 15:17 More TTM cleanups Christian König
2020-07-23 15:17 ` [PATCH 1/9] drm/ttm: initialize the system domain with defaults Christian König
@ 2020-07-23 15:17 ` Christian König
2020-07-24 6:50 ` Thomas Zimmermann
2020-07-23 15:17 ` [PATCH 3/9] drm/radeon: stop implementing init_mem_type Christian König
` (6 subsequent siblings)
8 siblings, 1 reply; 23+ messages in thread
From: Christian König @ 2020-07-23 15:17 UTC (permalink / raw)
To: dri-devel
Instead use a boolean field in the memory manager structure.
Also invert the meaning of the field since the use of a TT
structure is the special case here.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 4 +---
drivers/gpu/drm/drm_gem_vram_helper.c | 1 -
drivers/gpu/drm/nouveau/nouveau_bo.c | 4 +---
drivers/gpu/drm/qxl/qxl_ttm.c | 1 -
drivers/gpu/drm/radeon/radeon_ttm.c | 3 +--
drivers/gpu/drm/ttm/ttm_bo.c | 14 +++++++-------
drivers/gpu/drm/ttm/ttm_bo_util.c | 12 ++++++------
drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 3 ++-
include/drm/ttm/ttm_bo_driver.h | 4 +---
9 files changed, 19 insertions(+), 27 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index e57c49a91b73..406bcb03df48 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -87,15 +87,14 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
break;
case TTM_PL_TT:
/* GTT memory */
+ man->use_tt = true;
man->func = &amdgpu_gtt_mgr_func;
man->available_caching = TTM_PL_MASK_CACHING;
man->default_caching = TTM_PL_FLAG_CACHED;
- man->flags = 0;
break;
case TTM_PL_VRAM:
/* "On-card" video ram */
man->func = &amdgpu_vram_mgr_func;
- man->flags = TTM_MEMTYPE_FLAG_FIXED;
man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
man->default_caching = TTM_PL_FLAG_WC;
break;
@@ -104,7 +103,6 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
case AMDGPU_PL_OA:
/* On-chip GDS memory*/
man->func = &ttm_bo_manager_func;
- man->flags = TTM_MEMTYPE_FLAG_FIXED;
man->available_caching = TTM_PL_FLAG_UNCACHED;
man->default_caching = TTM_PL_FLAG_UNCACHED;
break;
diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
index be177afdeb9a..801a14c6e9e0 100644
--- a/drivers/gpu/drm/drm_gem_vram_helper.c
+++ b/drivers/gpu/drm/drm_gem_vram_helper.c
@@ -1012,7 +1012,6 @@ static int bo_driver_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
break;
case TTM_PL_VRAM:
man->func = &ttm_bo_manager_func;
- man->flags = TTM_MEMTYPE_FLAG_FIXED;
man->available_caching = TTM_PL_FLAG_UNCACHED |
TTM_PL_FLAG_WC;
man->default_caching = TTM_PL_FLAG_WC;
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index 53af25020bb2..a3ad66ad3817 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -657,7 +657,6 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
case TTM_PL_SYSTEM:
break;
case TTM_PL_VRAM:
- man->flags = TTM_MEMTYPE_FLAG_FIXED;
man->available_caching = TTM_PL_FLAG_UNCACHED |
TTM_PL_FLAG_WC;
man->default_caching = TTM_PL_FLAG_WC;
@@ -685,13 +684,12 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
else
man->func = &ttm_bo_manager_func;
+ man->use_tt = true;
if (drm->agp.bridge) {
- man->flags = 0;
man->available_caching = TTM_PL_FLAG_UNCACHED |
TTM_PL_FLAG_WC;
man->default_caching = TTM_PL_FLAG_WC;
} else {
- man->flags = 0;
man->available_caching = TTM_PL_MASK_CACHING;
man->default_caching = TTM_PL_FLAG_CACHED;
}
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
index e9b8c921c1f0..abb9fa4d80cf 100644
--- a/drivers/gpu/drm/qxl/qxl_ttm.c
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
@@ -59,7 +59,6 @@ static int qxl_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
case TTM_PL_PRIV:
/* "On-card" video ram */
man->func = &ttm_bo_manager_func;
- man->flags = TTM_MEMTYPE_FLAG_FIXED;
man->available_caching = TTM_PL_MASK_CACHING;
man->default_caching = TTM_PL_FLAG_CACHED;
break;
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
index b4cb75361577..9aba18a143e7 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -81,7 +81,7 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
man->func = &ttm_bo_manager_func;
man->available_caching = TTM_PL_MASK_CACHING;
man->default_caching = TTM_PL_FLAG_CACHED;
- man->flags = 0;
+ man->use_tt = true;
#if IS_ENABLED(CONFIG_AGP)
if (rdev->flags & RADEON_IS_AGP) {
if (!rdev->ddev->agp) {
@@ -98,7 +98,6 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
case TTM_PL_VRAM:
/* "On-card" video ram */
man->func = &ttm_bo_manager_func;
- man->flags = TTM_MEMTYPE_FLAG_FIXED;
man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
man->default_caching = TTM_PL_FLAG_WC;
break;
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 1f1f9e463265..6dea56dce350 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -84,7 +84,7 @@ static void ttm_mem_type_debug(struct ttm_bo_device *bdev, struct drm_printer *p
drm_printf(p, " has_type: %d\n", man->has_type);
drm_printf(p, " use_type: %d\n", man->use_type);
- drm_printf(p, " flags: 0x%08X\n", man->flags);
+ drm_printf(p, " use_tt: %d\n", man->use_tt);
drm_printf(p, " size: %llu\n", man->size);
drm_printf(p, " available_caching: 0x%08X\n", man->available_caching);
drm_printf(p, " default_caching: 0x%08X\n", man->default_caching);
@@ -159,7 +159,7 @@ static void ttm_bo_add_mem_to_lru(struct ttm_buffer_object *bo,
man = &bdev->man[mem->mem_type];
list_add_tail(&bo->lru, &man->lru[bo->priority]);
- if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED) && bo->ttm &&
+ if (man->use_tt && bo->ttm &&
!(bo->ttm->page_flags & (TTM_PAGE_FLAG_SG |
TTM_PAGE_FLAG_SWAPPED))) {
list_add_tail(&bo->swap, &ttm_bo_glob.swap_lru[bo->priority]);
@@ -286,8 +286,8 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
* Create and bind a ttm if required.
*/
- if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED)) {
- bool zero = !(old_man->flags & TTM_MEMTYPE_FLAG_FIXED);
+ if (new_man->use_tt) {
+ bool zero = old_man->use_tt;
ret = ttm_tt_create(bo, zero);
if (ret)
@@ -314,8 +314,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
if (bdev->driver->move_notify)
bdev->driver->move_notify(bo, evict, mem);
- if (!(old_man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
- !(new_man->flags & TTM_MEMTYPE_FLAG_FIXED))
+ if (old_man->use_tt && new_man->use_tt)
ret = ttm_bo_move_ttm(bo, ctx, mem);
else if (bdev->driver->move)
ret = bdev->driver->move(bo, evict, ctx, mem);
@@ -340,7 +339,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
out_err:
new_man = &bdev->man[bo->mem.mem_type];
- if (new_man->flags & TTM_MEMTYPE_FLAG_FIXED) {
+ if (!new_man->use_tt) {
ttm_tt_destroy(bo->ttm);
bo->ttm = NULL;
}
@@ -1677,6 +1676,7 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev,
* Initialize the system memory buffer type.
* Other types need to be driver / IOCTL initialized.
*/
+ bdev->man[TTM_PL_SYSTEM].use_tt = true;
bdev->man[TTM_PL_SYSTEM].available_caching = TTM_PL_MASK_CACHING;
bdev->man[TTM_PL_SYSTEM].default_caching = TTM_PL_FLAG_CACHED;
ret = ttm_bo_init_mm(bdev, TTM_PL_SYSTEM, 0);
diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index 7fb3e0bcbab4..1f502be0b646 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -384,7 +384,7 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,
*old_mem = *new_mem;
new_mem->mm_node = NULL;
- if (man->flags & TTM_MEMTYPE_FLAG_FIXED) {
+ if (!man->use_tt) {
ttm_tt_destroy(ttm);
bo->ttm = NULL;
}
@@ -645,7 +645,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
if (ret)
return ret;
- if (man->flags & TTM_MEMTYPE_FLAG_FIXED) {
+ if (!man->use_tt) {
ttm_tt_destroy(bo->ttm);
bo->ttm = NULL;
}
@@ -674,7 +674,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
* bo to be unbound and destroyed.
*/
- if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED))
+ if (man->use_tt)
ghost_obj->ttm = NULL;
else
bo->ttm = NULL;
@@ -730,7 +730,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
* bo to be unbound and destroyed.
*/
- if (!(to->flags & TTM_MEMTYPE_FLAG_FIXED))
+ if (to->use_tt)
ghost_obj->ttm = NULL;
else
bo->ttm = NULL;
@@ -738,7 +738,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
dma_resv_unlock(&ghost_obj->base._resv);
ttm_bo_put(ghost_obj);
- } else if (from->flags & TTM_MEMTYPE_FLAG_FIXED) {
+ } else if (!from->use_tt) {
/**
* BO doesn't have a TTM we need to bind/unbind. Just remember
@@ -768,7 +768,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
if (ret)
return ret;
- if (to->flags & TTM_MEMTYPE_FLAG_FIXED) {
+ if (!to->use_tt) {
ttm_tt_destroy(bo->ttm);
bo->ttm = NULL;
}
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
index 00cef1a3a178..5d8179d9f394 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
@@ -746,7 +746,6 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
case TTM_PL_VRAM:
/* "On-card" video ram */
man->func = &vmw_thp_func;
- man->flags = TTM_MEMTYPE_FLAG_FIXED;
man->available_caching = TTM_PL_FLAG_CACHED;
man->default_caching = TTM_PL_FLAG_CACHED;
break;
@@ -760,6 +759,8 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
man->func = &vmw_gmrid_manager_func;
man->available_caching = TTM_PL_FLAG_CACHED;
man->default_caching = TTM_PL_FLAG_CACHED;
+ /* TODO: This is most likely not correct */
+ man->use_tt = true;
break;
default:
DRM_ERROR("Unsupported memory type %u\n", (unsigned)type);
diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
index 9b251853afe2..adac4cd0ba23 100644
--- a/include/drm/ttm/ttm_bo_driver.h
+++ b/include/drm/ttm/ttm_bo_driver.h
@@ -45,8 +45,6 @@
#define TTM_MAX_BO_PRIORITY 4U
-#define TTM_MEMTYPE_FLAG_FIXED (1 << 0) /* Fixed (on-card) PCI memory */
-
struct ttm_mem_type_manager;
struct ttm_mem_type_manager_func {
@@ -173,7 +171,7 @@ struct ttm_mem_type_manager {
bool has_type;
bool use_type;
- uint32_t flags;
+ bool use_tt;
uint64_t size;
uint32_t available_caching;
uint32_t default_caching;
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 3/9] drm/radeon: stop implementing init_mem_type
2020-07-23 15:17 More TTM cleanups Christian König
2020-07-23 15:17 ` [PATCH 1/9] drm/ttm: initialize the system domain with defaults Christian König
2020-07-23 15:17 ` [PATCH 2/9] drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED Christian König
@ 2020-07-23 15:17 ` Christian König
2020-07-23 15:17 ` [PATCH 4/9] drm/amdgpu: " Christian König
` (5 subsequent siblings)
8 siblings, 0 replies; 23+ messages in thread
From: Christian König @ 2020-07-23 15:17 UTC (permalink / raw)
To: dri-devel
Instead just initialize the memory type parameters
before calling ttm_bo_init_mm.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/radeon/radeon_ttm.c | 70 ++++++++++++++---------------
1 file changed, 35 insertions(+), 35 deletions(-)
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
index 9aba18a143e7..b0b59c553785 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -69,43 +69,43 @@ struct radeon_device *radeon_get_rdev(struct ttm_bo_device *bdev)
static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
struct ttm_mem_type_manager *man)
{
- struct radeon_device *rdev;
+ return 0;
+}
- rdev = radeon_get_rdev(bdev);
+static int radeon_ttm_init_vram(struct radeon_device *rdev)
+{
+ struct ttm_mem_type_manager *man = &rdev->mman.bdev.man[TTM_PL_VRAM];
- switch (type) {
- case TTM_PL_SYSTEM:
- /* System memory */
- break;
- case TTM_PL_TT:
- man->func = &ttm_bo_manager_func;
- man->available_caching = TTM_PL_MASK_CACHING;
- man->default_caching = TTM_PL_FLAG_CACHED;
- man->use_tt = true;
+ man->func = &ttm_bo_manager_func;
+ man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
+ man->default_caching = TTM_PL_FLAG_WC;
+
+ return ttm_bo_init_mm(&rdev->mman.bdev, TTM_PL_VRAM,
+ rdev->mc.real_vram_size >> PAGE_SHIFT);
+}
+
+static int radeon_ttm_init_gtt(struct radeon_device *rdev)
+{
+ struct ttm_mem_type_manager *man = &rdev->mman.bdev.man[TTM_PL_TT];
+
+ man->func = &ttm_bo_manager_func;
+ man->available_caching = TTM_PL_MASK_CACHING;
+ man->default_caching = TTM_PL_FLAG_CACHED;
+ man->use_tt = true;
#if IS_ENABLED(CONFIG_AGP)
- if (rdev->flags & RADEON_IS_AGP) {
- if (!rdev->ddev->agp) {
- DRM_ERROR("AGP is not enabled for memory type %u\n",
- (unsigned)type);
- return -EINVAL;
- }
- man->available_caching = TTM_PL_FLAG_UNCACHED |
- TTM_PL_FLAG_WC;
- man->default_caching = TTM_PL_FLAG_WC;
+ if (rdev->flags & RADEON_IS_AGP) {
+ if (!rdev->ddev->agp) {
+ DRM_ERROR("AGP is not enabled\n");
+ return -EINVAL;
}
-#endif
- break;
- case TTM_PL_VRAM:
- /* "On-card" video ram */
- man->func = &ttm_bo_manager_func;
- man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
+ man->available_caching = TTM_PL_FLAG_UNCACHED |
+ TTM_PL_FLAG_WC;
man->default_caching = TTM_PL_FLAG_WC;
- break;
- default:
- DRM_ERROR("Unsupported memory type %u\n", (unsigned)type);
- return -EINVAL;
}
- return 0;
+#endif
+
+ return ttm_bo_init_mm(&rdev->mman.bdev, TTM_PL_TT,
+ rdev->mc.gtt_size >> PAGE_SHIFT);
}
static void radeon_evict_flags(struct ttm_buffer_object *bo,
@@ -778,8 +778,8 @@ int radeon_ttm_init(struct radeon_device *rdev)
return r;
}
rdev->mman.initialized = true;
- r = ttm_bo_init_mm(&rdev->mman.bdev, TTM_PL_VRAM,
- rdev->mc.real_vram_size >> PAGE_SHIFT);
+
+ r = radeon_ttm_init_vram(rdev);
if (r) {
DRM_ERROR("Failed initializing VRAM heap.\n");
return r;
@@ -804,8 +804,8 @@ int radeon_ttm_init(struct radeon_device *rdev)
}
DRM_INFO("radeon: %uM of VRAM memory ready\n",
(unsigned) (rdev->mc.real_vram_size / (1024 * 1024)));
- r = ttm_bo_init_mm(&rdev->mman.bdev, TTM_PL_TT,
- rdev->mc.gtt_size >> PAGE_SHIFT);
+
+ r = radeon_ttm_init_gtt(rdev);
if (r) {
DRM_ERROR("Failed initializing GTT heap.\n");
return r;
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 4/9] drm/amdgpu: stop implementing init_mem_type
2020-07-23 15:17 More TTM cleanups Christian König
` (2 preceding siblings ...)
2020-07-23 15:17 ` [PATCH 3/9] drm/radeon: stop implementing init_mem_type Christian König
@ 2020-07-23 15:17 ` Christian König
2020-07-23 15:17 ` [PATCH 5/9] drm/vmwgfx: " Christian König
` (4 subsequent siblings)
8 siblings, 0 replies; 23+ messages in thread
From: Christian König @ 2020-07-23 15:17 UTC (permalink / raw)
To: dri-devel
Instead just initialize the memory type parameters
before calling ttm_bo_init_mm.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 96 +++++++++++--------------
1 file changed, 43 insertions(+), 53 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 406bcb03df48..98a77fc4a90c 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -62,55 +62,49 @@
#define AMDGPU_TTM_VRAM_MAX_DW_READ (size_t)128
-
-/**
- * amdgpu_init_mem_type - Initialize a memory manager for a specific type of
- * memory request.
- *
- * @bdev: The TTM BO device object (contains a reference to amdgpu_device)
- * @type: The type of memory requested
- * @man: The memory type manager for each domain
- *
- * This is called by ttm_bo_init_mm() when a buffer object is being
- * initialized.
- */
static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
struct ttm_mem_type_manager *man)
{
- struct amdgpu_device *adev;
+ return 0;
+}
- adev = amdgpu_ttm_adev(bdev);
+static int amdgpu_ttm_init_vram(struct amdgpu_device *adev)
+{
- switch (type) {
- case TTM_PL_SYSTEM:
- /* System memory */
- break;
- case TTM_PL_TT:
- /* GTT memory */
- man->use_tt = true;
- man->func = &amdgpu_gtt_mgr_func;
- man->available_caching = TTM_PL_MASK_CACHING;
- man->default_caching = TTM_PL_FLAG_CACHED;
- break;
- case TTM_PL_VRAM:
- /* "On-card" video ram */
- man->func = &amdgpu_vram_mgr_func;
- man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
- man->default_caching = TTM_PL_FLAG_WC;
- break;
- case AMDGPU_PL_GDS:
- case AMDGPU_PL_GWS:
- case AMDGPU_PL_OA:
- /* On-chip GDS memory*/
- man->func = &ttm_bo_manager_func;
- man->available_caching = TTM_PL_FLAG_UNCACHED;
- man->default_caching = TTM_PL_FLAG_UNCACHED;
- break;
- default:
- DRM_ERROR("Unsupported memory type %u\n", (unsigned)type);
- return -EINVAL;
- }
- return 0;
+ struct ttm_mem_type_manager *man = &adev->mman.bdev.man[TTM_PL_VRAM];
+
+ man->func = &amdgpu_vram_mgr_func;
+ man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
+ man->default_caching = TTM_PL_FLAG_WC;
+
+ return ttm_bo_init_mm(&adev->mman.bdev, TTM_PL_VRAM,
+ adev->gmc.real_vram_size >> PAGE_SHIFT);
+}
+
+static int amdgpu_ttm_init_gtt(struct amdgpu_device *adev, uint64_t gtt_size)
+{
+ struct ttm_mem_type_manager *man = &adev->mman.bdev.man[TTM_PL_TT];
+
+ man->use_tt = true;
+ man->func = &amdgpu_gtt_mgr_func;
+ man->available_caching = TTM_PL_MASK_CACHING;
+ man->default_caching = TTM_PL_FLAG_CACHED;
+
+ return ttm_bo_init_mm(&adev->mman.bdev, TTM_PL_TT,
+ gtt_size >> PAGE_SHIFT);
+}
+
+static int amdgpu_ttm_init_on_chip(struct amdgpu_device *adev,
+ unsigned int type,
+ uint64_t size)
+{
+ struct ttm_mem_type_manager *man = &adev->mman.bdev.man[type];
+
+ man->func = &ttm_bo_manager_func;
+ man->available_caching = TTM_PL_FLAG_UNCACHED;
+ man->default_caching = TTM_PL_FLAG_UNCACHED;
+
+ return ttm_bo_init_mm(&adev->mman.bdev, type, size);
}
/**
@@ -1896,8 +1890,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
adev->mman.bdev.no_retry = true;
/* Initialize VRAM pool with all of VRAM divided into pages */
- r = ttm_bo_init_mm(&adev->mman.bdev, TTM_PL_VRAM,
- adev->gmc.real_vram_size >> PAGE_SHIFT);
+ r = amdgpu_ttm_init_vram(adev);
if (r) {
DRM_ERROR("Failed initializing VRAM heap.\n");
return r;
@@ -1978,7 +1971,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
gtt_size = (uint64_t)amdgpu_gtt_size << 20;
/* Initialize GTT memory pool */
- r = ttm_bo_init_mm(&adev->mman.bdev, TTM_PL_TT, gtt_size >> PAGE_SHIFT);
+ r = amdgpu_ttm_init_gtt(adev, gtt_size);
if (r) {
DRM_ERROR("Failed initializing GTT heap.\n");
return r;
@@ -1987,22 +1980,19 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
(unsigned)(gtt_size / (1024 * 1024)));
/* Initialize various on-chip memory pools */
- r = ttm_bo_init_mm(&adev->mman.bdev, AMDGPU_PL_GDS,
- adev->gds.gds_size);
+ r = amdgpu_ttm_init_on_chip(adev, AMDGPU_PL_GDS, adev->gds.gds_size);
if (r) {
DRM_ERROR("Failed initializing GDS heap.\n");
return r;
}
- r = ttm_bo_init_mm(&adev->mman.bdev, AMDGPU_PL_GWS,
- adev->gds.gws_size);
+ r = amdgpu_ttm_init_on_chip(adev, AMDGPU_PL_GWS, adev->gds.gws_size);
if (r) {
DRM_ERROR("Failed initializing gws heap.\n");
return r;
}
- r = ttm_bo_init_mm(&adev->mman.bdev, AMDGPU_PL_OA,
- adev->gds.oa_size);
+ r = amdgpu_ttm_init_on_chip(adev, AMDGPU_PL_OA, adev->gds.oa_size);
if (r) {
DRM_ERROR("Failed initializing oa heap.\n");
return r;
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 5/9] drm/vmwgfx: stop implementing init_mem_type
2020-07-23 15:17 More TTM cleanups Christian König
` (3 preceding siblings ...)
2020-07-23 15:17 ` [PATCH 4/9] drm/amdgpu: " Christian König
@ 2020-07-23 15:17 ` Christian König
2020-07-23 15:17 ` [PATCH 6/9] drm/nouveau: " Christian König
` (3 subsequent siblings)
8 siblings, 0 replies; 23+ messages in thread
From: Christian König @ 2020-07-23 15:17 UTC (permalink / raw)
To: dri-devel
Instead just initialize the memory type parameters
before calling ttm_bo_init_mm.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/vmwgfx/vmwgfx_drv.c | 18 +++++++++++++++
drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 27 ----------------------
2 files changed, 18 insertions(+), 27 deletions(-)
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
index 470428387878..45569e9ad3f5 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_drv.c
@@ -864,6 +864,9 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
* Enable VRAM, but initially don't use it until SVGA is enabled and
* unhidden.
*/
+ dev_priv->bdev.man[TTM_PL_VRAM].func = &vmw_thp_func;
+ dev_priv->bdev.man[TTM_PL_VRAM].available_caching = TTM_PL_FLAG_CACHED;
+ dev_priv->bdev.man[TTM_PL_VRAM].default_caching = TTM_PL_FLAG_CACHED;
ret = ttm_bo_init_mm(&dev_priv->bdev, TTM_PL_VRAM,
(dev_priv->vram_size >> PAGE_SHIFT));
if (unlikely(ret != 0)) {
@@ -872,7 +875,17 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
}
dev_priv->bdev.man[TTM_PL_VRAM].use_type = false;
+ /*
+ * "Guest Memory Regions" is an aperture like feature with
+ * one slot per bo. There is an upper limit of the number of
+ * slots as well as the bo size.
+ */
dev_priv->has_gmr = true;
+ dev_priv->bdev.man[VMW_PL_GMR].func = &vmw_gmrid_manager_func;
+ dev_priv->bdev.man[VMW_PL_GMR].available_caching = TTM_PL_FLAG_CACHED;
+ dev_priv->bdev.man[VMW_PL_GMR].default_caching = TTM_PL_FLAG_CACHED;
+ /* TODO: This is most likely not correct */
+ dev_priv->bdev.man[VMW_PL_GMR].use_tt = true;
if (((dev_priv->capabilities & (SVGA_CAP_GMR | SVGA_CAP_GMR2)) == 0) ||
refuse_dma || ttm_bo_init_mm(&dev_priv->bdev, VMW_PL_GMR,
VMW_PL_GMR) != 0) {
@@ -883,6 +896,11 @@ static int vmw_driver_load(struct drm_device *dev, unsigned long chipset)
if (dev_priv->capabilities & SVGA_CAP_GBOBJECTS && !refuse_dma) {
dev_priv->has_mob = true;
+ dev_priv->bdev.man[VMW_PL_MOB].func = &vmw_gmrid_manager_func;
+ dev_priv->bdev.man[VMW_PL_MOB].available_caching = TTM_PL_FLAG_CACHED;
+ dev_priv->bdev.man[VMW_PL_MOB].default_caching = TTM_PL_FLAG_CACHED;
+ /* TODO: This is most likely not correct */
+ dev_priv->bdev.man[VMW_PL_MOB].use_tt = true;
if (ttm_bo_init_mm(&dev_priv->bdev, VMW_PL_MOB,
VMW_PL_MOB) != 0) {
DRM_INFO("No MOB memory available. "
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
index 5d8179d9f394..db4b2e2e4edb 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
@@ -739,33 +739,6 @@ static struct ttm_tt *vmw_ttm_tt_create(struct ttm_buffer_object *bo,
static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
struct ttm_mem_type_manager *man)
{
- switch (type) {
- case TTM_PL_SYSTEM:
- /* System memory */
- break;
- case TTM_PL_VRAM:
- /* "On-card" video ram */
- man->func = &vmw_thp_func;
- man->available_caching = TTM_PL_FLAG_CACHED;
- man->default_caching = TTM_PL_FLAG_CACHED;
- break;
- case VMW_PL_GMR:
- case VMW_PL_MOB:
- /*
- * "Guest Memory Regions" is an aperture like feature with
- * one slot per bo. There is an upper limit of the number of
- * slots as well as the bo size.
- */
- man->func = &vmw_gmrid_manager_func;
- man->available_caching = TTM_PL_FLAG_CACHED;
- man->default_caching = TTM_PL_FLAG_CACHED;
- /* TODO: This is most likely not correct */
- man->use_tt = true;
- break;
- default:
- DRM_ERROR("Unsupported memory type %u\n", (unsigned)type);
- return -EINVAL;
- }
return 0;
}
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 6/9] drm/nouveau: stop implementing init_mem_type
2020-07-23 15:17 More TTM cleanups Christian König
` (4 preceding siblings ...)
2020-07-23 15:17 ` [PATCH 5/9] drm/vmwgfx: " Christian König
@ 2020-07-23 15:17 ` Christian König
2020-07-23 15:17 ` [PATCH 7/9] drm/qxl: " Christian König
` (2 subsequent siblings)
8 siblings, 0 replies; 23+ messages in thread
From: Christian König @ 2020-07-23 15:17 UTC (permalink / raw)
To: dri-devel
Instead just initialize the memory type parameters
before calling ttm_bo_init_mm.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/nouveau/nouveau_bo.c | 48 ---------------------
drivers/gpu/drm/nouveau/nouveau_ttm.c | 61 +++++++++++++++++++++++++--
2 files changed, 57 insertions(+), 52 deletions(-)
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index a3ad66ad3817..23ef9b1aaabc 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -650,54 +650,6 @@ static int
nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
struct ttm_mem_type_manager *man)
{
- struct nouveau_drm *drm = nouveau_bdev(bdev);
- struct nvif_mmu *mmu = &drm->client.mmu;
-
- switch (type) {
- case TTM_PL_SYSTEM:
- break;
- case TTM_PL_VRAM:
- man->available_caching = TTM_PL_FLAG_UNCACHED |
- TTM_PL_FLAG_WC;
- man->default_caching = TTM_PL_FLAG_WC;
-
- if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_TESLA) {
- /* Some BARs do not support being ioremapped WC */
- const u8 type = mmu->type[drm->ttm.type_vram].type;
- if (type & NVIF_MEM_UNCACHED) {
- man->available_caching = TTM_PL_FLAG_UNCACHED;
- man->default_caching = TTM_PL_FLAG_UNCACHED;
- }
-
- man->func = &nouveau_vram_manager;
- man->use_io_reserve_lru = true;
- } else {
- man->func = &ttm_bo_manager_func;
- }
- break;
- case TTM_PL_TT:
- if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_TESLA)
- man->func = &nouveau_gart_manager;
- else
- if (!drm->agp.bridge)
- man->func = &nv04_gart_manager;
- else
- man->func = &ttm_bo_manager_func;
-
- man->use_tt = true;
- if (drm->agp.bridge) {
- man->available_caching = TTM_PL_FLAG_UNCACHED |
- TTM_PL_FLAG_WC;
- man->default_caching = TTM_PL_FLAG_WC;
- } else {
- man->available_caching = TTM_PL_MASK_CACHING;
- man->default_caching = TTM_PL_FLAG_CACHED;
- }
-
- break;
- default:
- return -EINVAL;
- }
return 0;
}
diff --git a/drivers/gpu/drm/nouveau/nouveau_ttm.c b/drivers/gpu/drm/nouveau/nouveau_ttm.c
index e89ea052cf71..b0012021ae12 100644
--- a/drivers/gpu/drm/nouveau/nouveau_ttm.c
+++ b/drivers/gpu/drm/nouveau/nouveau_ttm.c
@@ -180,6 +180,61 @@ nouveau_ttm_init_host(struct nouveau_drm *drm, u8 kind)
return 0;
}
+static int
+nouveau_ttm_init_vram(struct nouveau_drm *drm)
+{
+ struct ttm_mem_type_manager *man = &drm->ttm.bdev.man[TTM_PL_VRAM];
+ struct nvif_mmu *mmu = &drm->client.mmu;
+
+ man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
+ man->default_caching = TTM_PL_FLAG_WC;
+
+ if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_TESLA) {
+ /* Some BARs do not support being ioremapped WC */
+ const u8 type = mmu->type[drm->ttm.type_vram].type;
+
+ if (type & NVIF_MEM_UNCACHED) {
+ man->available_caching = TTM_PL_FLAG_UNCACHED;
+ man->default_caching = TTM_PL_FLAG_UNCACHED;
+ }
+
+ man->func = &nouveau_vram_manager;
+ man->use_io_reserve_lru = true;
+ } else {
+ man->func = &ttm_bo_manager_func;
+ }
+
+ return ttm_bo_init_mm(&drm->ttm.bdev, TTM_PL_VRAM,
+ drm->gem.vram_available >> PAGE_SHIFT);
+}
+
+static int
+nouveau_ttm_init_gtt(struct nouveau_drm *drm)
+{
+ struct ttm_mem_type_manager *man = &drm->ttm.bdev.man[TTM_PL_TT];
+
+ if (drm->client.device.info.family >= NV_DEVICE_INFO_V0_TESLA)
+ man->func = &nouveau_gart_manager;
+ else
+ if (!drm->agp.bridge)
+ man->func = &nv04_gart_manager;
+ else
+ man->func = &ttm_bo_manager_func;
+
+ man->use_tt = true;
+ if (drm->agp.bridge) {
+ man->available_caching = TTM_PL_FLAG_UNCACHED |
+ TTM_PL_FLAG_WC;
+ man->default_caching = TTM_PL_FLAG_WC;
+ } else {
+ man->available_caching = TTM_PL_MASK_CACHING;
+ man->default_caching = TTM_PL_FLAG_CACHED;
+ }
+
+ return ttm_bo_init_mm(&drm->ttm.bdev, TTM_PL_TT,
+ drm->gem.gart_available >> PAGE_SHIFT);
+}
+
int
nouveau_ttm_init(struct nouveau_drm *drm)
{
@@ -237,8 +292,7 @@ nouveau_ttm_init(struct nouveau_drm *drm)
arch_io_reserve_memtype_wc(device->func->resource_addr(device, 1),
device->func->resource_size(device, 1));
- ret = ttm_bo_init_mm(&drm->ttm.bdev, TTM_PL_VRAM,
- drm->gem.vram_available >> PAGE_SHIFT);
+ ret = nouveau_ttm_init_vram(drm);
if (ret) {
NV_ERROR(drm, "VRAM mm init failed, %d\n", ret);
return ret;
@@ -254,8 +308,7 @@ nouveau_ttm_init(struct nouveau_drm *drm)
drm->gem.gart_available = drm->agp.size;
}
- ret = ttm_bo_init_mm(&drm->ttm.bdev, TTM_PL_TT,
- drm->gem.gart_available >> PAGE_SHIFT);
+ ret = nouveau_ttm_init_gtt(drm);
if (ret) {
NV_ERROR(drm, "GART mm init failed, %d\n", ret);
return ret;
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 7/9] drm/qxl: stop implementing init_mem_type
2020-07-23 15:17 More TTM cleanups Christian König
` (5 preceding siblings ...)
2020-07-23 15:17 ` [PATCH 6/9] drm/nouveau: " Christian König
@ 2020-07-23 15:17 ` Christian König
2020-07-23 15:17 ` [PATCH 8/9] drm/vram-helper: " Christian König
2020-07-23 15:17 ` [PATCH 9/9] drm/ttm: remove the init_mem_type callback Christian König
8 siblings, 0 replies; 23+ messages in thread
From: Christian König @ 2020-07-23 15:17 UTC (permalink / raw)
To: dri-devel
Instead just initialize the memory type parameters
before calling ttm_bo_init_mm.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/qxl/qxl_ttm.c | 35 ++++++++++++++++-------------------
1 file changed, 16 insertions(+), 19 deletions(-)
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
index abb9fa4d80cf..852089d7f783 100644
--- a/drivers/gpu/drm/qxl/qxl_ttm.c
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
@@ -51,21 +51,6 @@ static struct qxl_device *qxl_get_qdev(struct ttm_bo_device *bdev)
static int qxl_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
struct ttm_mem_type_manager *man)
{
- switch (type) {
- case TTM_PL_SYSTEM:
- /* System memory */
- break;
- case TTM_PL_VRAM:
- case TTM_PL_PRIV:
- /* "On-card" video ram */
- man->func = &ttm_bo_manager_func;
- man->available_caching = TTM_PL_MASK_CACHING;
- man->default_caching = TTM_PL_FLAG_CACHED;
- break;
- default:
- DRM_ERROR("Unsupported memory type %u\n", (unsigned int)type);
- return -EINVAL;
- }
return 0;
}
@@ -238,6 +223,19 @@ static struct ttm_bo_driver qxl_bo_driver = {
.move_notify = &qxl_bo_move_notify,
};
+static int qxl_ttm_init_mem_type(struct qxl_device *qdev,
+ unsigned int type,
+ uint64_t size)
+{
+ struct ttm_mem_type_manager *man = &qdev->mman.bdev.man[type];
+
+ man->func = &ttm_bo_manager_func;
+ man->available_caching = TTM_PL_MASK_CACHING;
+ man->default_caching = TTM_PL_FLAG_CACHED;
+
+ return ttm_bo_init_mm(&qdev->mman.bdev, type, size);
+}
+
int qxl_ttm_init(struct qxl_device *qdev)
{
int r;
@@ -255,14 +253,13 @@ int qxl_ttm_init(struct qxl_device *qdev)
}
/* NOTE: this includes the framebuffer (aka surface 0) */
num_io_pages = qdev->rom->ram_header_offset / PAGE_SIZE;
- r = ttm_bo_init_mm(&qdev->mman.bdev, TTM_PL_VRAM,
- num_io_pages);
+ r = qxl_ttm_init_mem_type(qdev, TTM_PL_VRAM, num_io_pages);
if (r) {
DRM_ERROR("Failed initializing VRAM heap.\n");
return r;
}
- r = ttm_bo_init_mm(&qdev->mman.bdev, TTM_PL_PRIV,
- qdev->surfaceram_size / PAGE_SIZE);
+ r = qxl_ttm_init_mem_type(qdev, TTM_PL_PRIV,
+ qdev->surfaceram_size / PAGE_SIZE);
if (r) {
DRM_ERROR("Failed initializing Surfaces heap.\n");
return r;
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 8/9] drm/vram-helper: stop implementing init_mem_type
2020-07-23 15:17 More TTM cleanups Christian König
` (6 preceding siblings ...)
2020-07-23 15:17 ` [PATCH 7/9] drm/qxl: " Christian König
@ 2020-07-23 15:17 ` Christian König
2020-07-24 6:51 ` Thomas Zimmermann
2020-07-23 15:17 ` [PATCH 9/9] drm/ttm: remove the init_mem_type callback Christian König
8 siblings, 1 reply; 23+ messages in thread
From: Christian König @ 2020-07-23 15:17 UTC (permalink / raw)
To: dri-devel
Instead just initialize the memory type parameters
before calling ttm_bo_init_mm.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/drm_gem_vram_helper.c | 16 ++++------------
1 file changed, 4 insertions(+), 12 deletions(-)
diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
index 801a14c6e9e0..f7f93a49cd7f 100644
--- a/drivers/gpu/drm/drm_gem_vram_helper.c
+++ b/drivers/gpu/drm/drm_gem_vram_helper.c
@@ -1007,18 +1007,6 @@ static struct ttm_tt *bo_driver_ttm_tt_create(struct ttm_buffer_object *bo,
static int bo_driver_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
struct ttm_mem_type_manager *man)
{
- switch (type) {
- case TTM_PL_SYSTEM:
- break;
- case TTM_PL_VRAM:
- man->func = &ttm_bo_manager_func;
- man->available_caching = TTM_PL_FLAG_UNCACHED |
- TTM_PL_FLAG_WC;
- man->default_caching = TTM_PL_FLAG_WC;
- break;
- default:
- return -EINVAL;
- }
return 0;
}
@@ -1126,6 +1114,7 @@ EXPORT_SYMBOL(drm_vram_mm_debugfs_init);
static int drm_vram_mm_init(struct drm_vram_mm *vmm, struct drm_device *dev,
uint64_t vram_base, size_t vram_size)
{
+ struct ttm_mem_type_manager *man = &vmm->bdev.man[TTM_PL_VRAM];
int ret;
vmm->vram_base = vram_base;
@@ -1138,6 +1127,9 @@ static int drm_vram_mm_init(struct drm_vram_mm *vmm, struct drm_device *dev,
if (ret)
return ret;
+ man->func = &ttm_bo_manager_func;
+ man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
+ man->default_caching = TTM_PL_FLAG_WC;
ret = ttm_bo_init_mm(&vmm->bdev, TTM_PL_VRAM, vram_size >> PAGE_SHIFT);
if (ret)
return ret;
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 23+ messages in thread
* [PATCH 9/9] drm/ttm: remove the init_mem_type callback
2020-07-23 15:17 More TTM cleanups Christian König
` (7 preceding siblings ...)
2020-07-23 15:17 ` [PATCH 8/9] drm/vram-helper: " Christian König
@ 2020-07-23 15:17 ` Christian König
2020-07-23 20:31 ` Alex Deucher
2020-07-24 6:51 ` Thomas Zimmermann
8 siblings, 2 replies; 23+ messages in thread
From: Christian König @ 2020-07-23 15:17 UTC (permalink / raw)
To: dri-devel
It is a very strange concept to call a function which just
calls back the caller for the functions parameters.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 7 -------
drivers/gpu/drm/drm_gem_vram_helper.c | 7 -------
drivers/gpu/drm/nouveau/nouveau_bo.c | 8 --------
drivers/gpu/drm/qxl/qxl_ttm.c | 7 -------
drivers/gpu/drm/radeon/radeon_ttm.c | 7 -------
drivers/gpu/drm/ttm/ttm_bo.c | 4 ----
drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 7 -------
include/drm/ttm/ttm_bo_driver.h | 6 ------
8 files changed, 53 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 98a77fc4a90c..da6434ea07f1 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -62,12 +62,6 @@
#define AMDGPU_TTM_VRAM_MAX_DW_READ (size_t)128
-static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
- struct ttm_mem_type_manager *man)
-{
- return 0;
-}
-
static int amdgpu_ttm_init_vram(struct amdgpu_device *adev)
{
@@ -1727,7 +1721,6 @@ static struct ttm_bo_driver amdgpu_bo_driver = {
.ttm_tt_create = &amdgpu_ttm_tt_create,
.ttm_tt_populate = &amdgpu_ttm_tt_populate,
.ttm_tt_unpopulate = &amdgpu_ttm_tt_unpopulate,
- .init_mem_type = &amdgpu_init_mem_type,
.eviction_valuable = amdgpu_ttm_bo_eviction_valuable,
.evict_flags = &amdgpu_evict_flags,
.move = &amdgpu_bo_move,
diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
index f7f93a49cd7f..5f03c6137ef9 100644
--- a/drivers/gpu/drm/drm_gem_vram_helper.c
+++ b/drivers/gpu/drm/drm_gem_vram_helper.c
@@ -1004,12 +1004,6 @@ static struct ttm_tt *bo_driver_ttm_tt_create(struct ttm_buffer_object *bo,
return NULL;
}
-static int bo_driver_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
- struct ttm_mem_type_manager *man)
-{
- return 0;
-}
-
static void bo_driver_evict_flags(struct ttm_buffer_object *bo,
struct ttm_placement *placement)
{
@@ -1069,7 +1063,6 @@ static struct ttm_bo_driver bo_driver = {
.ttm_tt_create = bo_driver_ttm_tt_create,
.ttm_tt_populate = ttm_pool_populate,
.ttm_tt_unpopulate = ttm_pool_unpopulate,
- .init_mem_type = bo_driver_init_mem_type,
.eviction_valuable = ttm_bo_eviction_valuable,
.evict_flags = bo_driver_evict_flags,
.move_notify = bo_driver_move_notify,
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index 23ef9b1aaabc..5efc572c14cc 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -646,13 +646,6 @@ nouveau_ttm_tt_create(struct ttm_buffer_object *bo, uint32_t page_flags)
return nouveau_sgdma_create_ttm(bo, page_flags);
}
-static int
-nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
- struct ttm_mem_type_manager *man)
-{
- return 0;
-}
-
static void
nouveau_bo_evict_flags(struct ttm_buffer_object *bo, struct ttm_placement *pl)
{
@@ -1643,7 +1636,6 @@ struct ttm_bo_driver nouveau_bo_driver = {
.ttm_tt_create = &nouveau_ttm_tt_create,
.ttm_tt_populate = &nouveau_ttm_tt_populate,
.ttm_tt_unpopulate = &nouveau_ttm_tt_unpopulate,
- .init_mem_type = nouveau_bo_init_mem_type,
.eviction_valuable = ttm_bo_eviction_valuable,
.evict_flags = nouveau_bo_evict_flags,
.move_notify = nouveau_bo_move_ntfy,
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
index 852089d7f783..32069e4799f3 100644
--- a/drivers/gpu/drm/qxl/qxl_ttm.c
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
@@ -48,12 +48,6 @@ static struct qxl_device *qxl_get_qdev(struct ttm_bo_device *bdev)
return qdev;
}
-static int qxl_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
- struct ttm_mem_type_manager *man)
-{
- return 0;
-}
-
static void qxl_evict_flags(struct ttm_buffer_object *bo,
struct ttm_placement *placement)
{
@@ -215,7 +209,6 @@ static void qxl_bo_move_notify(struct ttm_buffer_object *bo,
static struct ttm_bo_driver qxl_bo_driver = {
.ttm_tt_create = &qxl_ttm_tt_create,
- .init_mem_type = &qxl_init_mem_type,
.eviction_valuable = ttm_bo_eviction_valuable,
.evict_flags = &qxl_evict_flags,
.move = &qxl_bo_move,
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
index b0b59c553785..f499d02917ac 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -66,12 +66,6 @@ struct radeon_device *radeon_get_rdev(struct ttm_bo_device *bdev)
return rdev;
}
-static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
- struct ttm_mem_type_manager *man)
-{
- return 0;
-}
-
static int radeon_ttm_init_vram(struct radeon_device *rdev)
{
struct ttm_mem_type_manager *man = &rdev->mman.bdev.man[TTM_PL_VRAM];
@@ -753,7 +747,6 @@ static struct ttm_bo_driver radeon_bo_driver = {
.ttm_tt_create = &radeon_ttm_tt_create,
.ttm_tt_populate = &radeon_ttm_tt_populate,
.ttm_tt_unpopulate = &radeon_ttm_tt_unpopulate,
- .init_mem_type = &radeon_init_mem_type,
.eviction_valuable = ttm_bo_eviction_valuable,
.evict_flags = &radeon_evict_flags,
.move = &radeon_bo_move,
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 6dea56dce350..2a6d8ed6dd86 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -1527,10 +1527,6 @@ int ttm_bo_init_mm(struct ttm_bo_device *bdev, unsigned type,
mutex_init(&man->io_reserve_mutex);
spin_lock_init(&man->move_lock);
INIT_LIST_HEAD(&man->io_reserve_lru);
-
- ret = bdev->driver->init_mem_type(bdev, type, man);
- if (ret)
- return ret;
man->bdev = bdev;
if (type != TTM_PL_SYSTEM) {
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
index db4b2e2e4edb..0e2897895327 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
@@ -736,12 +736,6 @@ static struct ttm_tt *vmw_ttm_tt_create(struct ttm_buffer_object *bo,
return NULL;
}
-static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
- struct ttm_mem_type_manager *man)
-{
- return 0;
-}
-
static void vmw_evict_flags(struct ttm_buffer_object *bo,
struct ttm_placement *placement)
{
@@ -817,7 +811,6 @@ struct ttm_bo_driver vmw_bo_driver = {
.ttm_tt_create = &vmw_ttm_tt_create,
.ttm_tt_populate = &vmw_ttm_populate,
.ttm_tt_unpopulate = &vmw_ttm_unpopulate,
- .init_mem_type = vmw_init_mem_type,
.eviction_valuable = ttm_bo_eviction_valuable,
.evict_flags = vmw_evict_flags,
.move = NULL,
diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
index adac4cd0ba23..f76f1332fdc5 100644
--- a/include/drm/ttm/ttm_bo_driver.h
+++ b/include/drm/ttm/ttm_bo_driver.h
@@ -157,7 +157,6 @@ struct ttm_mem_type_manager_func {
* @move: The fence of the last pipelined move operation.
*
* This structure is used to identify and manage memory types for a device.
- * It's set up by the ttm_bo_driver::init_mem_type method.
*/
@@ -203,8 +202,6 @@ struct ttm_mem_type_manager {
* struct ttm_bo_driver
*
* @create_ttm_backend_entry: Callback to create a struct ttm_backend.
- * @init_mem_type: Callback to initialize a struct ttm_mem_type_manager
- * structure.
* @evict_flags: Callback to obtain placement flags when a buffer is evicted.
* @move: Callback for a driver to hook in accelerated functions to
* move a buffer.
@@ -247,9 +244,6 @@ struct ttm_bo_driver {
*/
void (*ttm_tt_unpopulate)(struct ttm_tt *ttm);
- int (*init_mem_type)(struct ttm_bo_device *bdev, uint32_t type,
- struct ttm_mem_type_manager *man);
-
/**
* struct ttm_bo_driver member eviction_valuable
*
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 23+ messages in thread
* Re: [PATCH 9/9] drm/ttm: remove the init_mem_type callback
2020-07-23 15:17 ` [PATCH 9/9] drm/ttm: remove the init_mem_type callback Christian König
@ 2020-07-23 20:31 ` Alex Deucher
2020-07-24 6:51 ` Thomas Zimmermann
1 sibling, 0 replies; 23+ messages in thread
From: Alex Deucher @ 2020-07-23 20:31 UTC (permalink / raw)
To: Christian König; +Cc: Maling list - DRI developers
On Thu, Jul 23, 2020 at 11:17 AM Christian König
<ckoenig.leichtzumerken@gmail.com> wrote:
>
> It is a very strange concept to call a function which just
> calls back the caller for the functions parameters.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
Series is:
Reviewed-by: Alex Deucher <alexander.deucher@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 7 -------
> drivers/gpu/drm/drm_gem_vram_helper.c | 7 -------
> drivers/gpu/drm/nouveau/nouveau_bo.c | 8 --------
> drivers/gpu/drm/qxl/qxl_ttm.c | 7 -------
> drivers/gpu/drm/radeon/radeon_ttm.c | 7 -------
> drivers/gpu/drm/ttm/ttm_bo.c | 4 ----
> drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 7 -------
> include/drm/ttm/ttm_bo_driver.h | 6 ------
> 8 files changed, 53 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 98a77fc4a90c..da6434ea07f1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -62,12 +62,6 @@
>
> #define AMDGPU_TTM_VRAM_MAX_DW_READ (size_t)128
>
> -static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> - struct ttm_mem_type_manager *man)
> -{
> - return 0;
> -}
> -
> static int amdgpu_ttm_init_vram(struct amdgpu_device *adev)
> {
>
> @@ -1727,7 +1721,6 @@ static struct ttm_bo_driver amdgpu_bo_driver = {
> .ttm_tt_create = &amdgpu_ttm_tt_create,
> .ttm_tt_populate = &amdgpu_ttm_tt_populate,
> .ttm_tt_unpopulate = &amdgpu_ttm_tt_unpopulate,
> - .init_mem_type = &amdgpu_init_mem_type,
> .eviction_valuable = amdgpu_ttm_bo_eviction_valuable,
> .evict_flags = &amdgpu_evict_flags,
> .move = &amdgpu_bo_move,
> diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
> index f7f93a49cd7f..5f03c6137ef9 100644
> --- a/drivers/gpu/drm/drm_gem_vram_helper.c
> +++ b/drivers/gpu/drm/drm_gem_vram_helper.c
> @@ -1004,12 +1004,6 @@ static struct ttm_tt *bo_driver_ttm_tt_create(struct ttm_buffer_object *bo,
> return NULL;
> }
>
> -static int bo_driver_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> - struct ttm_mem_type_manager *man)
> -{
> - return 0;
> -}
> -
> static void bo_driver_evict_flags(struct ttm_buffer_object *bo,
> struct ttm_placement *placement)
> {
> @@ -1069,7 +1063,6 @@ static struct ttm_bo_driver bo_driver = {
> .ttm_tt_create = bo_driver_ttm_tt_create,
> .ttm_tt_populate = ttm_pool_populate,
> .ttm_tt_unpopulate = ttm_pool_unpopulate,
> - .init_mem_type = bo_driver_init_mem_type,
> .eviction_valuable = ttm_bo_eviction_valuable,
> .evict_flags = bo_driver_evict_flags,
> .move_notify = bo_driver_move_notify,
> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
> index 23ef9b1aaabc..5efc572c14cc 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
> @@ -646,13 +646,6 @@ nouveau_ttm_tt_create(struct ttm_buffer_object *bo, uint32_t page_flags)
> return nouveau_sgdma_create_ttm(bo, page_flags);
> }
>
> -static int
> -nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> - struct ttm_mem_type_manager *man)
> -{
> - return 0;
> -}
> -
> static void
> nouveau_bo_evict_flags(struct ttm_buffer_object *bo, struct ttm_placement *pl)
> {
> @@ -1643,7 +1636,6 @@ struct ttm_bo_driver nouveau_bo_driver = {
> .ttm_tt_create = &nouveau_ttm_tt_create,
> .ttm_tt_populate = &nouveau_ttm_tt_populate,
> .ttm_tt_unpopulate = &nouveau_ttm_tt_unpopulate,
> - .init_mem_type = nouveau_bo_init_mem_type,
> .eviction_valuable = ttm_bo_eviction_valuable,
> .evict_flags = nouveau_bo_evict_flags,
> .move_notify = nouveau_bo_move_ntfy,
> diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
> index 852089d7f783..32069e4799f3 100644
> --- a/drivers/gpu/drm/qxl/qxl_ttm.c
> +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
> @@ -48,12 +48,6 @@ static struct qxl_device *qxl_get_qdev(struct ttm_bo_device *bdev)
> return qdev;
> }
>
> -static int qxl_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> - struct ttm_mem_type_manager *man)
> -{
> - return 0;
> -}
> -
> static void qxl_evict_flags(struct ttm_buffer_object *bo,
> struct ttm_placement *placement)
> {
> @@ -215,7 +209,6 @@ static void qxl_bo_move_notify(struct ttm_buffer_object *bo,
>
> static struct ttm_bo_driver qxl_bo_driver = {
> .ttm_tt_create = &qxl_ttm_tt_create,
> - .init_mem_type = &qxl_init_mem_type,
> .eviction_valuable = ttm_bo_eviction_valuable,
> .evict_flags = &qxl_evict_flags,
> .move = &qxl_bo_move,
> diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
> index b0b59c553785..f499d02917ac 100644
> --- a/drivers/gpu/drm/radeon/radeon_ttm.c
> +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
> @@ -66,12 +66,6 @@ struct radeon_device *radeon_get_rdev(struct ttm_bo_device *bdev)
> return rdev;
> }
>
> -static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> - struct ttm_mem_type_manager *man)
> -{
> - return 0;
> -}
> -
> static int radeon_ttm_init_vram(struct radeon_device *rdev)
> {
> struct ttm_mem_type_manager *man = &rdev->mman.bdev.man[TTM_PL_VRAM];
> @@ -753,7 +747,6 @@ static struct ttm_bo_driver radeon_bo_driver = {
> .ttm_tt_create = &radeon_ttm_tt_create,
> .ttm_tt_populate = &radeon_ttm_tt_populate,
> .ttm_tt_unpopulate = &radeon_ttm_tt_unpopulate,
> - .init_mem_type = &radeon_init_mem_type,
> .eviction_valuable = ttm_bo_eviction_valuable,
> .evict_flags = &radeon_evict_flags,
> .move = &radeon_bo_move,
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index 6dea56dce350..2a6d8ed6dd86 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -1527,10 +1527,6 @@ int ttm_bo_init_mm(struct ttm_bo_device *bdev, unsigned type,
> mutex_init(&man->io_reserve_mutex);
> spin_lock_init(&man->move_lock);
> INIT_LIST_HEAD(&man->io_reserve_lru);
> -
> - ret = bdev->driver->init_mem_type(bdev, type, man);
> - if (ret)
> - return ret;
> man->bdev = bdev;
>
> if (type != TTM_PL_SYSTEM) {
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> index db4b2e2e4edb..0e2897895327 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> @@ -736,12 +736,6 @@ static struct ttm_tt *vmw_ttm_tt_create(struct ttm_buffer_object *bo,
> return NULL;
> }
>
> -static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> - struct ttm_mem_type_manager *man)
> -{
> - return 0;
> -}
> -
> static void vmw_evict_flags(struct ttm_buffer_object *bo,
> struct ttm_placement *placement)
> {
> @@ -817,7 +811,6 @@ struct ttm_bo_driver vmw_bo_driver = {
> .ttm_tt_create = &vmw_ttm_tt_create,
> .ttm_tt_populate = &vmw_ttm_populate,
> .ttm_tt_unpopulate = &vmw_ttm_unpopulate,
> - .init_mem_type = vmw_init_mem_type,
> .eviction_valuable = ttm_bo_eviction_valuable,
> .evict_flags = vmw_evict_flags,
> .move = NULL,
> diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
> index adac4cd0ba23..f76f1332fdc5 100644
> --- a/include/drm/ttm/ttm_bo_driver.h
> +++ b/include/drm/ttm/ttm_bo_driver.h
> @@ -157,7 +157,6 @@ struct ttm_mem_type_manager_func {
> * @move: The fence of the last pipelined move operation.
> *
> * This structure is used to identify and manage memory types for a device.
> - * It's set up by the ttm_bo_driver::init_mem_type method.
> */
>
>
> @@ -203,8 +202,6 @@ struct ttm_mem_type_manager {
> * struct ttm_bo_driver
> *
> * @create_ttm_backend_entry: Callback to create a struct ttm_backend.
> - * @init_mem_type: Callback to initialize a struct ttm_mem_type_manager
> - * structure.
> * @evict_flags: Callback to obtain placement flags when a buffer is evicted.
> * @move: Callback for a driver to hook in accelerated functions to
> * move a buffer.
> @@ -247,9 +244,6 @@ struct ttm_bo_driver {
> */
> void (*ttm_tt_unpopulate)(struct ttm_tt *ttm);
>
> - int (*init_mem_type)(struct ttm_bo_device *bdev, uint32_t type,
> - struct ttm_mem_type_manager *man);
> -
> /**
> * struct ttm_bo_driver member eviction_valuable
> *
> --
> 2.17.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 1/9] drm/ttm: initialize the system domain with defaults
2020-07-23 15:17 ` [PATCH 1/9] drm/ttm: initialize the system domain with defaults Christian König
@ 2020-07-24 6:43 ` Thomas Zimmermann
2020-07-29 6:21 ` Dave Airlie
0 siblings, 1 reply; 23+ messages in thread
From: Thomas Zimmermann @ 2020-07-24 6:43 UTC (permalink / raw)
To: Christian König, dri-devel
[-- Attachment #1.1.1: Type: text/plain, Size: 4968 bytes --]
Am 23.07.20 um 17:17 schrieb Christian König:
> Instead of repeating that in each driver.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 3 ---
> drivers/gpu/drm/drm_gem_vram_helper.c | 3 ---
> drivers/gpu/drm/nouveau/nouveau_bo.c | 3 ---
> drivers/gpu/drm/qxl/qxl_ttm.c | 3 ---
> drivers/gpu/drm/radeon/radeon_ttm.c | 3 ---
> drivers/gpu/drm/ttm/ttm_bo.c | 2 ++
> drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 2 --
> 7 files changed, 2 insertions(+), 17 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 0dd5e802091d..e57c49a91b73 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -84,9 +84,6 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> switch (type) {
> case TTM_PL_SYSTEM:
> /* System memory */
> - man->flags = 0;
> - man->available_caching = TTM_PL_MASK_CACHING;
> - man->default_caching = TTM_PL_FLAG_CACHED;
> break;
> case TTM_PL_TT:
> /* GTT memory */
> diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
> index 3296ed3df358..be177afdeb9a 100644
> --- a/drivers/gpu/drm/drm_gem_vram_helper.c
> +++ b/drivers/gpu/drm/drm_gem_vram_helper.c
> @@ -1009,9 +1009,6 @@ static int bo_driver_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> {
> switch (type) {
> case TTM_PL_SYSTEM:
> - man->flags = 0;
> - man->available_caching = TTM_PL_MASK_CACHING;
> - man->default_caching = TTM_PL_FLAG_CACHED;
> break;
> case TTM_PL_VRAM:
> man->func = &ttm_bo_manager_func;
> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
> index 4ccf937df0d0..53af25020bb2 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
> @@ -655,9 +655,6 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>
> switch (type) {
> case TTM_PL_SYSTEM:
> - man->flags = 0;
> - man->available_caching = TTM_PL_MASK_CACHING;
> - man->default_caching = TTM_PL_FLAG_CACHED;
> break;
> case TTM_PL_VRAM:
> man->flags = TTM_MEMTYPE_FLAG_FIXED;
> diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
> index 1d8e07b8b19e..e9b8c921c1f0 100644
> --- a/drivers/gpu/drm/qxl/qxl_ttm.c
> +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
> @@ -54,9 +54,6 @@ static int qxl_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> switch (type) {
> case TTM_PL_SYSTEM:
> /* System memory */
> - man->flags = 0;
> - man->available_caching = TTM_PL_MASK_CACHING;
> - man->default_caching = TTM_PL_FLAG_CACHED;
> break;
> case TTM_PL_VRAM:
> case TTM_PL_PRIV:
> diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
> index b474781a0920..b4cb75361577 100644
> --- a/drivers/gpu/drm/radeon/radeon_ttm.c
> +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
> @@ -76,9 +76,6 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> switch (type) {
> case TTM_PL_SYSTEM:
> /* System memory */
> - man->flags = 0;
> - man->available_caching = TTM_PL_MASK_CACHING;
> - man->default_caching = TTM_PL_FLAG_CACHED;
> break;
> case TTM_PL_TT:
> man->func = &ttm_bo_manager_func;
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index 7c02ce784805..1f1f9e463265 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -1677,6 +1677,8 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev,
> * Initialize the system memory buffer type.
> * Other types need to be driver / IOCTL initialized.
> */
> + bdev->man[TTM_PL_SYSTEM].available_caching = TTM_PL_MASK_CACHING;
> + bdev->man[TTM_PL_SYSTEM].default_caching = TTM_PL_FLAG_CACHED;
> ret = ttm_bo_init_mm(bdev, TTM_PL_SYSTEM, 0);
> if (unlikely(ret != 0))
> goto out_no_sys;
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> index 1d78187eaba6..00cef1a3a178 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> @@ -742,8 +742,6 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> switch (type) {
> case TTM_PL_SYSTEM:
> /* System memory */
> - man->available_caching = TTM_PL_FLAG_CACHED;
> - man->default_caching = TTM_PL_FLAG_CACHED;
> break;
> case TTM_PL_VRAM:
> /* "On-card" video ram */
>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer
[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 516 bytes --]
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 2/9] drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED
2020-07-23 15:17 ` [PATCH 2/9] drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED Christian König
@ 2020-07-24 6:50 ` Thomas Zimmermann
2020-07-24 7:27 ` Christian König
0 siblings, 1 reply; 23+ messages in thread
From: Thomas Zimmermann @ 2020-07-24 6:50 UTC (permalink / raw)
To: Christian König, dri-devel
[-- Attachment #1.1.1: Type: text/plain, Size: 11969 bytes --]
Am 23.07.20 um 17:17 schrieb Christian König:
> Instead use a boolean field in the memory manager structure.
>
> Also invert the meaning of the field since the use of a TT
> structure is the special case here.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
There's a comment further below. In any case
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 4 +---
> drivers/gpu/drm/drm_gem_vram_helper.c | 1 -
> drivers/gpu/drm/nouveau/nouveau_bo.c | 4 +---
> drivers/gpu/drm/qxl/qxl_ttm.c | 1 -
> drivers/gpu/drm/radeon/radeon_ttm.c | 3 +--
> drivers/gpu/drm/ttm/ttm_bo.c | 14 +++++++-------
> drivers/gpu/drm/ttm/ttm_bo_util.c | 12 ++++++------
> drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 3 ++-
> include/drm/ttm/ttm_bo_driver.h | 4 +---
> 9 files changed, 19 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index e57c49a91b73..406bcb03df48 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -87,15 +87,14 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> break;
> case TTM_PL_TT:
> /* GTT memory */
> + man->use_tt = true;
> man->func = &amdgpu_gtt_mgr_func;
> man->available_caching = TTM_PL_MASK_CACHING;
> man->default_caching = TTM_PL_FLAG_CACHED;
> - man->flags = 0;
> break;
> case TTM_PL_VRAM:
> /* "On-card" video ram */
> man->func = &amdgpu_vram_mgr_func;
> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
> man->default_caching = TTM_PL_FLAG_WC;
> break;
> @@ -104,7 +103,6 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> case AMDGPU_PL_OA:
> /* On-chip GDS memory*/
> man->func = &ttm_bo_manager_func;
> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> man->available_caching = TTM_PL_FLAG_UNCACHED;
> man->default_caching = TTM_PL_FLAG_UNCACHED;
> break;
> diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
> index be177afdeb9a..801a14c6e9e0 100644
> --- a/drivers/gpu/drm/drm_gem_vram_helper.c
> +++ b/drivers/gpu/drm/drm_gem_vram_helper.c
> @@ -1012,7 +1012,6 @@ static int bo_driver_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> break;
> case TTM_PL_VRAM:
> man->func = &ttm_bo_manager_func;
> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> man->available_caching = TTM_PL_FLAG_UNCACHED |
> TTM_PL_FLAG_WC;
> man->default_caching = TTM_PL_FLAG_WC;
> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
> index 53af25020bb2..a3ad66ad3817 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
> @@ -657,7 +657,6 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> case TTM_PL_SYSTEM:
> break;
> case TTM_PL_VRAM:
> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> man->available_caching = TTM_PL_FLAG_UNCACHED |
> TTM_PL_FLAG_WC;
> man->default_caching = TTM_PL_FLAG_WC;
> @@ -685,13 +684,12 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> else
> man->func = &ttm_bo_manager_func;
>
> + man->use_tt = true;
> if (drm->agp.bridge) {
> - man->flags = 0;
> man->available_caching = TTM_PL_FLAG_UNCACHED |
> TTM_PL_FLAG_WC;
> man->default_caching = TTM_PL_FLAG_WC;
> } else {
> - man->flags = 0;
> man->available_caching = TTM_PL_MASK_CACHING;
> man->default_caching = TTM_PL_FLAG_CACHED;
> }
> diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
> index e9b8c921c1f0..abb9fa4d80cf 100644
> --- a/drivers/gpu/drm/qxl/qxl_ttm.c
> +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
> @@ -59,7 +59,6 @@ static int qxl_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> case TTM_PL_PRIV:
> /* "On-card" video ram */
> man->func = &ttm_bo_manager_func;
> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> man->available_caching = TTM_PL_MASK_CACHING;
> man->default_caching = TTM_PL_FLAG_CACHED;
> break;
> diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
> index b4cb75361577..9aba18a143e7 100644
> --- a/drivers/gpu/drm/radeon/radeon_ttm.c
> +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
> @@ -81,7 +81,7 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> man->func = &ttm_bo_manager_func;
> man->available_caching = TTM_PL_MASK_CACHING;
> man->default_caching = TTM_PL_FLAG_CACHED;
> - man->flags = 0;
> + man->use_tt = true;
> #if IS_ENABLED(CONFIG_AGP)
> if (rdev->flags & RADEON_IS_AGP) {
> if (!rdev->ddev->agp) {
> @@ -98,7 +98,6 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> case TTM_PL_VRAM:
> /* "On-card" video ram */
> man->func = &ttm_bo_manager_func;
> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
> man->default_caching = TTM_PL_FLAG_WC;
> break;
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index 1f1f9e463265..6dea56dce350 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -84,7 +84,7 @@ static void ttm_mem_type_debug(struct ttm_bo_device *bdev, struct drm_printer *p
>
> drm_printf(p, " has_type: %d\n", man->has_type);
> drm_printf(p, " use_type: %d\n", man->use_type);
> - drm_printf(p, " flags: 0x%08X\n", man->flags);
> + drm_printf(p, " use_tt: %d\n", man->use_tt);
> drm_printf(p, " size: %llu\n", man->size);
> drm_printf(p, " available_caching: 0x%08X\n", man->available_caching);
> drm_printf(p, " default_caching: 0x%08X\n", man->default_caching);
> @@ -159,7 +159,7 @@ static void ttm_bo_add_mem_to_lru(struct ttm_buffer_object *bo,
> man = &bdev->man[mem->mem_type];
> list_add_tail(&bo->lru, &man->lru[bo->priority]);
>
> - if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED) && bo->ttm &&
> + if (man->use_tt && bo->ttm &&
> !(bo->ttm->page_flags & (TTM_PAGE_FLAG_SG |
> TTM_PAGE_FLAG_SWAPPED))) {
> list_add_tail(&bo->swap, &ttm_bo_glob.swap_lru[bo->priority]);
> @@ -286,8 +286,8 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
> * Create and bind a ttm if required.
> */
>
> - if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED)) {
> - bool zero = !(old_man->flags & TTM_MEMTYPE_FLAG_FIXED);
> + if (new_man->use_tt) {
> + bool zero = old_man->use_tt;
There's little use in copying to zero.
>
> ret = ttm_tt_create(bo, zero);
Maybe rather pass old_man->use_tt directly and leave a comment why that
makes sense.
Best regards
Thomas
> if (ret)
> @@ -314,8 +314,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
> if (bdev->driver->move_notify)
> bdev->driver->move_notify(bo, evict, mem);
>
> - if (!(old_man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
> - !(new_man->flags & TTM_MEMTYPE_FLAG_FIXED))
> + if (old_man->use_tt && new_man->use_tt)
> ret = ttm_bo_move_ttm(bo, ctx, mem);
> else if (bdev->driver->move)
> ret = bdev->driver->move(bo, evict, ctx, mem);
> @@ -340,7 +339,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
>
> out_err:
> new_man = &bdev->man[bo->mem.mem_type];
> - if (new_man->flags & TTM_MEMTYPE_FLAG_FIXED) {
> + if (!new_man->use_tt) {
> ttm_tt_destroy(bo->ttm);
> bo->ttm = NULL;
> }
> @@ -1677,6 +1676,7 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev,
> * Initialize the system memory buffer type.
> * Other types need to be driver / IOCTL initialized.
> */
> + bdev->man[TTM_PL_SYSTEM].use_tt = true;
> bdev->man[TTM_PL_SYSTEM].available_caching = TTM_PL_MASK_CACHING;
> bdev->man[TTM_PL_SYSTEM].default_caching = TTM_PL_FLAG_CACHED;
> ret = ttm_bo_init_mm(bdev, TTM_PL_SYSTEM, 0);
> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
> index 7fb3e0bcbab4..1f502be0b646 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
> @@ -384,7 +384,7 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,
> *old_mem = *new_mem;
> new_mem->mm_node = NULL;
>
> - if (man->flags & TTM_MEMTYPE_FLAG_FIXED) {
> + if (!man->use_tt) {
> ttm_tt_destroy(ttm);
> bo->ttm = NULL;
> }
> @@ -645,7 +645,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
> if (ret)
> return ret;
>
> - if (man->flags & TTM_MEMTYPE_FLAG_FIXED) {
> + if (!man->use_tt) {
> ttm_tt_destroy(bo->ttm);
> bo->ttm = NULL;
> }
> @@ -674,7 +674,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
> * bo to be unbound and destroyed.
> */
>
> - if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED))
> + if (man->use_tt)
> ghost_obj->ttm = NULL;
> else
> bo->ttm = NULL;
> @@ -730,7 +730,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
> * bo to be unbound and destroyed.
> */
>
> - if (!(to->flags & TTM_MEMTYPE_FLAG_FIXED))
> + if (to->use_tt)
> ghost_obj->ttm = NULL;
> else
> bo->ttm = NULL;
> @@ -738,7 +738,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
> dma_resv_unlock(&ghost_obj->base._resv);
> ttm_bo_put(ghost_obj);
>
> - } else if (from->flags & TTM_MEMTYPE_FLAG_FIXED) {
> + } else if (!from->use_tt) {
>
> /**
> * BO doesn't have a TTM we need to bind/unbind. Just remember
> @@ -768,7 +768,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
> if (ret)
> return ret;
>
> - if (to->flags & TTM_MEMTYPE_FLAG_FIXED) {
> + if (!to->use_tt) {
> ttm_tt_destroy(bo->ttm);
> bo->ttm = NULL;
> }
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> index 00cef1a3a178..5d8179d9f394 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> @@ -746,7 +746,6 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> case TTM_PL_VRAM:
> /* "On-card" video ram */
> man->func = &vmw_thp_func;
> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> man->available_caching = TTM_PL_FLAG_CACHED;
> man->default_caching = TTM_PL_FLAG_CACHED;
> break;
> @@ -760,6 +759,8 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> man->func = &vmw_gmrid_manager_func;
> man->available_caching = TTM_PL_FLAG_CACHED;
> man->default_caching = TTM_PL_FLAG_CACHED;
> + /* TODO: This is most likely not correct */
> + man->use_tt = true;
> break;
> default:
> DRM_ERROR("Unsupported memory type %u\n", (unsigned)type);
> diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
> index 9b251853afe2..adac4cd0ba23 100644
> --- a/include/drm/ttm/ttm_bo_driver.h
> +++ b/include/drm/ttm/ttm_bo_driver.h
> @@ -45,8 +45,6 @@
>
> #define TTM_MAX_BO_PRIORITY 4U
>
> -#define TTM_MEMTYPE_FLAG_FIXED (1 << 0) /* Fixed (on-card) PCI memory */
> -
> struct ttm_mem_type_manager;
>
> struct ttm_mem_type_manager_func {
> @@ -173,7 +171,7 @@ struct ttm_mem_type_manager {
>
> bool has_type;
> bool use_type;
> - uint32_t flags;
> + bool use_tt;
> uint64_t size;
> uint32_t available_caching;
> uint32_t default_caching;
>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer
[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 516 bytes --]
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 8/9] drm/vram-helper: stop implementing init_mem_type
2020-07-23 15:17 ` [PATCH 8/9] drm/vram-helper: " Christian König
@ 2020-07-24 6:51 ` Thomas Zimmermann
0 siblings, 0 replies; 23+ messages in thread
From: Thomas Zimmermann @ 2020-07-24 6:51 UTC (permalink / raw)
To: Christian König, dri-devel
[-- Attachment #1.1.1: Type: text/plain, Size: 2114 bytes --]
Am 23.07.20 um 17:17 schrieb Christian König:
> Instead just initialize the memory type parameters
> before calling ttm_bo_init_mm.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
> drivers/gpu/drm/drm_gem_vram_helper.c | 16 ++++------------
> 1 file changed, 4 insertions(+), 12 deletions(-)
>
> diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
> index 801a14c6e9e0..f7f93a49cd7f 100644
> --- a/drivers/gpu/drm/drm_gem_vram_helper.c
> +++ b/drivers/gpu/drm/drm_gem_vram_helper.c
> @@ -1007,18 +1007,6 @@ static struct ttm_tt *bo_driver_ttm_tt_create(struct ttm_buffer_object *bo,
> static int bo_driver_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> struct ttm_mem_type_manager *man)
> {
> - switch (type) {
> - case TTM_PL_SYSTEM:
> - break;
> - case TTM_PL_VRAM:
> - man->func = &ttm_bo_manager_func;
> - man->available_caching = TTM_PL_FLAG_UNCACHED |
> - TTM_PL_FLAG_WC;
> - man->default_caching = TTM_PL_FLAG_WC;
> - break;
> - default:
> - return -EINVAL;
> - }
> return 0;
> }
>
> @@ -1126,6 +1114,7 @@ EXPORT_SYMBOL(drm_vram_mm_debugfs_init);
> static int drm_vram_mm_init(struct drm_vram_mm *vmm, struct drm_device *dev,
> uint64_t vram_base, size_t vram_size)
> {
> + struct ttm_mem_type_manager *man = &vmm->bdev.man[TTM_PL_VRAM];
> int ret;
>
> vmm->vram_base = vram_base;
> @@ -1138,6 +1127,9 @@ static int drm_vram_mm_init(struct drm_vram_mm *vmm, struct drm_device *dev,
> if (ret)
> return ret;
>
> + man->func = &ttm_bo_manager_func;
> + man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
> + man->default_caching = TTM_PL_FLAG_WC;
> ret = ttm_bo_init_mm(&vmm->bdev, TTM_PL_VRAM, vram_size >> PAGE_SHIFT);
> if (ret)
> return ret;
>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer
[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 516 bytes --]
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 9/9] drm/ttm: remove the init_mem_type callback
2020-07-23 15:17 ` [PATCH 9/9] drm/ttm: remove the init_mem_type callback Christian König
2020-07-23 20:31 ` Alex Deucher
@ 2020-07-24 6:51 ` Thomas Zimmermann
1 sibling, 0 replies; 23+ messages in thread
From: Thomas Zimmermann @ 2020-07-24 6:51 UTC (permalink / raw)
To: Christian König, dri-devel
[-- Attachment #1.1.1: Type: text/plain, Size: 8768 bytes --]
Am 23.07.20 um 17:17 schrieb Christian König:
> It is a very strange concept to call a function which just
> calls back the caller for the functions parameters.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 7 -------
> drivers/gpu/drm/drm_gem_vram_helper.c | 7 -------
> drivers/gpu/drm/nouveau/nouveau_bo.c | 8 --------
> drivers/gpu/drm/qxl/qxl_ttm.c | 7 -------
> drivers/gpu/drm/radeon/radeon_ttm.c | 7 -------
> drivers/gpu/drm/ttm/ttm_bo.c | 4 ----
> drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 7 -------
> include/drm/ttm/ttm_bo_driver.h | 6 ------
> 8 files changed, 53 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index 98a77fc4a90c..da6434ea07f1 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -62,12 +62,6 @@
>
> #define AMDGPU_TTM_VRAM_MAX_DW_READ (size_t)128
>
> -static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> - struct ttm_mem_type_manager *man)
> -{
> - return 0;
> -}
> -
> static int amdgpu_ttm_init_vram(struct amdgpu_device *adev)
> {
>
> @@ -1727,7 +1721,6 @@ static struct ttm_bo_driver amdgpu_bo_driver = {
> .ttm_tt_create = &amdgpu_ttm_tt_create,
> .ttm_tt_populate = &amdgpu_ttm_tt_populate,
> .ttm_tt_unpopulate = &amdgpu_ttm_tt_unpopulate,
> - .init_mem_type = &amdgpu_init_mem_type,
> .eviction_valuable = amdgpu_ttm_bo_eviction_valuable,
> .evict_flags = &amdgpu_evict_flags,
> .move = &amdgpu_bo_move,
> diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
> index f7f93a49cd7f..5f03c6137ef9 100644
> --- a/drivers/gpu/drm/drm_gem_vram_helper.c
> +++ b/drivers/gpu/drm/drm_gem_vram_helper.c
> @@ -1004,12 +1004,6 @@ static struct ttm_tt *bo_driver_ttm_tt_create(struct ttm_buffer_object *bo,
> return NULL;
> }
>
> -static int bo_driver_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> - struct ttm_mem_type_manager *man)
> -{
> - return 0;
> -}
> -
> static void bo_driver_evict_flags(struct ttm_buffer_object *bo,
> struct ttm_placement *placement)
> {
> @@ -1069,7 +1063,6 @@ static struct ttm_bo_driver bo_driver = {
> .ttm_tt_create = bo_driver_ttm_tt_create,
> .ttm_tt_populate = ttm_pool_populate,
> .ttm_tt_unpopulate = ttm_pool_unpopulate,
> - .init_mem_type = bo_driver_init_mem_type,
> .eviction_valuable = ttm_bo_eviction_valuable,
> .evict_flags = bo_driver_evict_flags,
> .move_notify = bo_driver_move_notify,
> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
> index 23ef9b1aaabc..5efc572c14cc 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
> @@ -646,13 +646,6 @@ nouveau_ttm_tt_create(struct ttm_buffer_object *bo, uint32_t page_flags)
> return nouveau_sgdma_create_ttm(bo, page_flags);
> }
>
> -static int
> -nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> - struct ttm_mem_type_manager *man)
> -{
> - return 0;
> -}
> -
> static void
> nouveau_bo_evict_flags(struct ttm_buffer_object *bo, struct ttm_placement *pl)
> {
> @@ -1643,7 +1636,6 @@ struct ttm_bo_driver nouveau_bo_driver = {
> .ttm_tt_create = &nouveau_ttm_tt_create,
> .ttm_tt_populate = &nouveau_ttm_tt_populate,
> .ttm_tt_unpopulate = &nouveau_ttm_tt_unpopulate,
> - .init_mem_type = nouveau_bo_init_mem_type,
> .eviction_valuable = ttm_bo_eviction_valuable,
> .evict_flags = nouveau_bo_evict_flags,
> .move_notify = nouveau_bo_move_ntfy,
> diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
> index 852089d7f783..32069e4799f3 100644
> --- a/drivers/gpu/drm/qxl/qxl_ttm.c
> +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
> @@ -48,12 +48,6 @@ static struct qxl_device *qxl_get_qdev(struct ttm_bo_device *bdev)
> return qdev;
> }
>
> -static int qxl_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> - struct ttm_mem_type_manager *man)
> -{
> - return 0;
> -}
> -
> static void qxl_evict_flags(struct ttm_buffer_object *bo,
> struct ttm_placement *placement)
> {
> @@ -215,7 +209,6 @@ static void qxl_bo_move_notify(struct ttm_buffer_object *bo,
>
> static struct ttm_bo_driver qxl_bo_driver = {
> .ttm_tt_create = &qxl_ttm_tt_create,
> - .init_mem_type = &qxl_init_mem_type,
> .eviction_valuable = ttm_bo_eviction_valuable,
> .evict_flags = &qxl_evict_flags,
> .move = &qxl_bo_move,
> diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
> index b0b59c553785..f499d02917ac 100644
> --- a/drivers/gpu/drm/radeon/radeon_ttm.c
> +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
> @@ -66,12 +66,6 @@ struct radeon_device *radeon_get_rdev(struct ttm_bo_device *bdev)
> return rdev;
> }
>
> -static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> - struct ttm_mem_type_manager *man)
> -{
> - return 0;
> -}
> -
> static int radeon_ttm_init_vram(struct radeon_device *rdev)
> {
> struct ttm_mem_type_manager *man = &rdev->mman.bdev.man[TTM_PL_VRAM];
> @@ -753,7 +747,6 @@ static struct ttm_bo_driver radeon_bo_driver = {
> .ttm_tt_create = &radeon_ttm_tt_create,
> .ttm_tt_populate = &radeon_ttm_tt_populate,
> .ttm_tt_unpopulate = &radeon_ttm_tt_unpopulate,
> - .init_mem_type = &radeon_init_mem_type,
> .eviction_valuable = ttm_bo_eviction_valuable,
> .evict_flags = &radeon_evict_flags,
> .move = &radeon_bo_move,
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index 6dea56dce350..2a6d8ed6dd86 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -1527,10 +1527,6 @@ int ttm_bo_init_mm(struct ttm_bo_device *bdev, unsigned type,
> mutex_init(&man->io_reserve_mutex);
> spin_lock_init(&man->move_lock);
> INIT_LIST_HEAD(&man->io_reserve_lru);
> -
> - ret = bdev->driver->init_mem_type(bdev, type, man);
> - if (ret)
> - return ret;
> man->bdev = bdev;
>
> if (type != TTM_PL_SYSTEM) {
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> index db4b2e2e4edb..0e2897895327 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> @@ -736,12 +736,6 @@ static struct ttm_tt *vmw_ttm_tt_create(struct ttm_buffer_object *bo,
> return NULL;
> }
>
> -static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> - struct ttm_mem_type_manager *man)
> -{
> - return 0;
> -}
> -
> static void vmw_evict_flags(struct ttm_buffer_object *bo,
> struct ttm_placement *placement)
> {
> @@ -817,7 +811,6 @@ struct ttm_bo_driver vmw_bo_driver = {
> .ttm_tt_create = &vmw_ttm_tt_create,
> .ttm_tt_populate = &vmw_ttm_populate,
> .ttm_tt_unpopulate = &vmw_ttm_unpopulate,
> - .init_mem_type = vmw_init_mem_type,
> .eviction_valuable = ttm_bo_eviction_valuable,
> .evict_flags = vmw_evict_flags,
> .move = NULL,
> diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
> index adac4cd0ba23..f76f1332fdc5 100644
> --- a/include/drm/ttm/ttm_bo_driver.h
> +++ b/include/drm/ttm/ttm_bo_driver.h
> @@ -157,7 +157,6 @@ struct ttm_mem_type_manager_func {
> * @move: The fence of the last pipelined move operation.
> *
> * This structure is used to identify and manage memory types for a device.
> - * It's set up by the ttm_bo_driver::init_mem_type method.
> */
>
>
> @@ -203,8 +202,6 @@ struct ttm_mem_type_manager {
> * struct ttm_bo_driver
> *
> * @create_ttm_backend_entry: Callback to create a struct ttm_backend.
> - * @init_mem_type: Callback to initialize a struct ttm_mem_type_manager
> - * structure.
> * @evict_flags: Callback to obtain placement flags when a buffer is evicted.
> * @move: Callback for a driver to hook in accelerated functions to
> * move a buffer.
> @@ -247,9 +244,6 @@ struct ttm_bo_driver {
> */
> void (*ttm_tt_unpopulate)(struct ttm_tt *ttm);
>
> - int (*init_mem_type)(struct ttm_bo_device *bdev, uint32_t type,
> - struct ttm_mem_type_manager *man);
> -
> /**
> * struct ttm_bo_driver member eviction_valuable
> *
>
--
Thomas Zimmermann
Graphics Driver Developer
SUSE Software Solutions Germany GmbH
Maxfeldstr. 5, 90409 Nürnberg, Germany
(HRB 36809, AG Nürnberg)
Geschäftsführer: Felix Imendörffer
[-- Attachment #1.2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 516 bytes --]
[-- Attachment #2: Type: text/plain, Size: 160 bytes --]
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 2/9] drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED
2020-07-24 6:50 ` Thomas Zimmermann
@ 2020-07-24 7:27 ` Christian König
0 siblings, 0 replies; 23+ messages in thread
From: Christian König @ 2020-07-24 7:27 UTC (permalink / raw)
To: Thomas Zimmermann, dri-devel
Am 24.07.20 um 08:50 schrieb Thomas Zimmermann:
>
> Am 23.07.20 um 17:17 schrieb Christian König:
>> Instead use a boolean field in the memory manager structure.
>>
>> Also invert the meaning of the field since the use of a TT
>> structure is the special case here.
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
> There's a comment further below. In any case
>
> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
>
>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 4 +---
>> drivers/gpu/drm/drm_gem_vram_helper.c | 1 -
>> drivers/gpu/drm/nouveau/nouveau_bo.c | 4 +---
>> drivers/gpu/drm/qxl/qxl_ttm.c | 1 -
>> drivers/gpu/drm/radeon/radeon_ttm.c | 3 +--
>> drivers/gpu/drm/ttm/ttm_bo.c | 14 +++++++-------
>> drivers/gpu/drm/ttm/ttm_bo_util.c | 12 ++++++------
>> drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 3 ++-
>> include/drm/ttm/ttm_bo_driver.h | 4 +---
>> 9 files changed, 19 insertions(+), 27 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> index e57c49a91b73..406bcb03df48 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> @@ -87,15 +87,14 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> break;
>> case TTM_PL_TT:
>> /* GTT memory */
>> + man->use_tt = true;
>> man->func = &amdgpu_gtt_mgr_func;
>> man->available_caching = TTM_PL_MASK_CACHING;
>> man->default_caching = TTM_PL_FLAG_CACHED;
>> - man->flags = 0;
>> break;
>> case TTM_PL_VRAM:
>> /* "On-card" video ram */
>> man->func = &amdgpu_vram_mgr_func;
>> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
>> man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
>> man->default_caching = TTM_PL_FLAG_WC;
>> break;
>> @@ -104,7 +103,6 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> case AMDGPU_PL_OA:
>> /* On-chip GDS memory*/
>> man->func = &ttm_bo_manager_func;
>> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
>> man->available_caching = TTM_PL_FLAG_UNCACHED;
>> man->default_caching = TTM_PL_FLAG_UNCACHED;
>> break;
>> diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
>> index be177afdeb9a..801a14c6e9e0 100644
>> --- a/drivers/gpu/drm/drm_gem_vram_helper.c
>> +++ b/drivers/gpu/drm/drm_gem_vram_helper.c
>> @@ -1012,7 +1012,6 @@ static int bo_driver_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> break;
>> case TTM_PL_VRAM:
>> man->func = &ttm_bo_manager_func;
>> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
>> man->available_caching = TTM_PL_FLAG_UNCACHED |
>> TTM_PL_FLAG_WC;
>> man->default_caching = TTM_PL_FLAG_WC;
>> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
>> index 53af25020bb2..a3ad66ad3817 100644
>> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
>> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
>> @@ -657,7 +657,6 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> case TTM_PL_SYSTEM:
>> break;
>> case TTM_PL_VRAM:
>> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
>> man->available_caching = TTM_PL_FLAG_UNCACHED |
>> TTM_PL_FLAG_WC;
>> man->default_caching = TTM_PL_FLAG_WC;
>> @@ -685,13 +684,12 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> else
>> man->func = &ttm_bo_manager_func;
>>
>> + man->use_tt = true;
>> if (drm->agp.bridge) {
>> - man->flags = 0;
>> man->available_caching = TTM_PL_FLAG_UNCACHED |
>> TTM_PL_FLAG_WC;
>> man->default_caching = TTM_PL_FLAG_WC;
>> } else {
>> - man->flags = 0;
>> man->available_caching = TTM_PL_MASK_CACHING;
>> man->default_caching = TTM_PL_FLAG_CACHED;
>> }
>> diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
>> index e9b8c921c1f0..abb9fa4d80cf 100644
>> --- a/drivers/gpu/drm/qxl/qxl_ttm.c
>> +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
>> @@ -59,7 +59,6 @@ static int qxl_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> case TTM_PL_PRIV:
>> /* "On-card" video ram */
>> man->func = &ttm_bo_manager_func;
>> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
>> man->available_caching = TTM_PL_MASK_CACHING;
>> man->default_caching = TTM_PL_FLAG_CACHED;
>> break;
>> diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
>> index b4cb75361577..9aba18a143e7 100644
>> --- a/drivers/gpu/drm/radeon/radeon_ttm.c
>> +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
>> @@ -81,7 +81,7 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> man->func = &ttm_bo_manager_func;
>> man->available_caching = TTM_PL_MASK_CACHING;
>> man->default_caching = TTM_PL_FLAG_CACHED;
>> - man->flags = 0;
>> + man->use_tt = true;
>> #if IS_ENABLED(CONFIG_AGP)
>> if (rdev->flags & RADEON_IS_AGP) {
>> if (!rdev->ddev->agp) {
>> @@ -98,7 +98,6 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> case TTM_PL_VRAM:
>> /* "On-card" video ram */
>> man->func = &ttm_bo_manager_func;
>> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
>> man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
>> man->default_caching = TTM_PL_FLAG_WC;
>> break;
>> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
>> index 1f1f9e463265..6dea56dce350 100644
>> --- a/drivers/gpu/drm/ttm/ttm_bo.c
>> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
>> @@ -84,7 +84,7 @@ static void ttm_mem_type_debug(struct ttm_bo_device *bdev, struct drm_printer *p
>>
>> drm_printf(p, " has_type: %d\n", man->has_type);
>> drm_printf(p, " use_type: %d\n", man->use_type);
>> - drm_printf(p, " flags: 0x%08X\n", man->flags);
>> + drm_printf(p, " use_tt: %d\n", man->use_tt);
>> drm_printf(p, " size: %llu\n", man->size);
>> drm_printf(p, " available_caching: 0x%08X\n", man->available_caching);
>> drm_printf(p, " default_caching: 0x%08X\n", man->default_caching);
>> @@ -159,7 +159,7 @@ static void ttm_bo_add_mem_to_lru(struct ttm_buffer_object *bo,
>> man = &bdev->man[mem->mem_type];
>> list_add_tail(&bo->lru, &man->lru[bo->priority]);
>>
>> - if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED) && bo->ttm &&
>> + if (man->use_tt && bo->ttm &&
>> !(bo->ttm->page_flags & (TTM_PAGE_FLAG_SG |
>> TTM_PAGE_FLAG_SWAPPED))) {
>> list_add_tail(&bo->swap, &ttm_bo_glob.swap_lru[bo->priority]);
>> @@ -286,8 +286,8 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
>> * Create and bind a ttm if required.
>> */
>>
>> - if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED)) {
>> - bool zero = !(old_man->flags & TTM_MEMTYPE_FLAG_FIXED);
>> + if (new_man->use_tt) {
>> + bool zero = old_man->use_tt;
> There's little use in copying to zero.
>
>>
>> ret = ttm_tt_create(bo, zero);
> Maybe rather pass old_man->use_tt directly and leave a comment why that
> makes sense.
Good point, going to fix that.
Thanks,
Christian.
>
> Best regards
> Thomas
>
>> if (ret)
>> @@ -314,8 +314,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
>> if (bdev->driver->move_notify)
>> bdev->driver->move_notify(bo, evict, mem);
>>
>> - if (!(old_man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
>> - !(new_man->flags & TTM_MEMTYPE_FLAG_FIXED))
>> + if (old_man->use_tt && new_man->use_tt)
>> ret = ttm_bo_move_ttm(bo, ctx, mem);
>> else if (bdev->driver->move)
>> ret = bdev->driver->move(bo, evict, ctx, mem);
>> @@ -340,7 +339,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
>>
>> out_err:
>> new_man = &bdev->man[bo->mem.mem_type];
>> - if (new_man->flags & TTM_MEMTYPE_FLAG_FIXED) {
>> + if (!new_man->use_tt) {
>> ttm_tt_destroy(bo->ttm);
>> bo->ttm = NULL;
>> }
>> @@ -1677,6 +1676,7 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev,
>> * Initialize the system memory buffer type.
>> * Other types need to be driver / IOCTL initialized.
>> */
>> + bdev->man[TTM_PL_SYSTEM].use_tt = true;
>> bdev->man[TTM_PL_SYSTEM].available_caching = TTM_PL_MASK_CACHING;
>> bdev->man[TTM_PL_SYSTEM].default_caching = TTM_PL_FLAG_CACHED;
>> ret = ttm_bo_init_mm(bdev, TTM_PL_SYSTEM, 0);
>> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
>> index 7fb3e0bcbab4..1f502be0b646 100644
>> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
>> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
>> @@ -384,7 +384,7 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,
>> *old_mem = *new_mem;
>> new_mem->mm_node = NULL;
>>
>> - if (man->flags & TTM_MEMTYPE_FLAG_FIXED) {
>> + if (!man->use_tt) {
>> ttm_tt_destroy(ttm);
>> bo->ttm = NULL;
>> }
>> @@ -645,7 +645,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
>> if (ret)
>> return ret;
>>
>> - if (man->flags & TTM_MEMTYPE_FLAG_FIXED) {
>> + if (!man->use_tt) {
>> ttm_tt_destroy(bo->ttm);
>> bo->ttm = NULL;
>> }
>> @@ -674,7 +674,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
>> * bo to be unbound and destroyed.
>> */
>>
>> - if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED))
>> + if (man->use_tt)
>> ghost_obj->ttm = NULL;
>> else
>> bo->ttm = NULL;
>> @@ -730,7 +730,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
>> * bo to be unbound and destroyed.
>> */
>>
>> - if (!(to->flags & TTM_MEMTYPE_FLAG_FIXED))
>> + if (to->use_tt)
>> ghost_obj->ttm = NULL;
>> else
>> bo->ttm = NULL;
>> @@ -738,7 +738,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
>> dma_resv_unlock(&ghost_obj->base._resv);
>> ttm_bo_put(ghost_obj);
>>
>> - } else if (from->flags & TTM_MEMTYPE_FLAG_FIXED) {
>> + } else if (!from->use_tt) {
>>
>> /**
>> * BO doesn't have a TTM we need to bind/unbind. Just remember
>> @@ -768,7 +768,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
>> if (ret)
>> return ret;
>>
>> - if (to->flags & TTM_MEMTYPE_FLAG_FIXED) {
>> + if (!to->use_tt) {
>> ttm_tt_destroy(bo->ttm);
>> bo->ttm = NULL;
>> }
>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
>> index 00cef1a3a178..5d8179d9f394 100644
>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
>> @@ -746,7 +746,6 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> case TTM_PL_VRAM:
>> /* "On-card" video ram */
>> man->func = &vmw_thp_func;
>> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
>> man->available_caching = TTM_PL_FLAG_CACHED;
>> man->default_caching = TTM_PL_FLAG_CACHED;
>> break;
>> @@ -760,6 +759,8 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> man->func = &vmw_gmrid_manager_func;
>> man->available_caching = TTM_PL_FLAG_CACHED;
>> man->default_caching = TTM_PL_FLAG_CACHED;
>> + /* TODO: This is most likely not correct */
>> + man->use_tt = true;
>> break;
>> default:
>> DRM_ERROR("Unsupported memory type %u\n", (unsigned)type);
>> diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
>> index 9b251853afe2..adac4cd0ba23 100644
>> --- a/include/drm/ttm/ttm_bo_driver.h
>> +++ b/include/drm/ttm/ttm_bo_driver.h
>> @@ -45,8 +45,6 @@
>>
>> #define TTM_MAX_BO_PRIORITY 4U
>>
>> -#define TTM_MEMTYPE_FLAG_FIXED (1 << 0) /* Fixed (on-card) PCI memory */
>> -
>> struct ttm_mem_type_manager;
>>
>> struct ttm_mem_type_manager_func {
>> @@ -173,7 +171,7 @@ struct ttm_mem_type_manager {
>>
>> bool has_type;
>> bool use_type;
>> - uint32_t flags;
>> + bool use_tt;
>> uint64_t size;
>> uint32_t available_caching;
>> uint32_t default_caching;
>>
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 1/9] drm/ttm: initialize the system domain with defaults
2020-07-24 6:43 ` Thomas Zimmermann
@ 2020-07-29 6:21 ` Dave Airlie
2020-07-29 6:23 ` Dave Airlie
0 siblings, 1 reply; 23+ messages in thread
From: Dave Airlie @ 2020-07-29 6:21 UTC (permalink / raw)
To: Thomas Zimmermann; +Cc: Christian König, dri-devel
On Fri, 24 Jul 2020 at 16:43, Thomas Zimmermann <tzimmermann@suse.de> wrote:
>
>
>
> Am 23.07.20 um 17:17 schrieb Christian König:
> > Instead of repeating that in each driver.
> >
> > Signed-off-by: Christian König <christian.koenig@amd.com>
>
> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
I'm not sure what happened but the patchwork copies of this series are
mangled badly, I expect AMD email with the crappy headers or something
got in there somewhere.
Can we get them in drm-misc-next at some point so I can cleanly look at them.
Dave.
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 1/9] drm/ttm: initialize the system domain with defaults
2020-07-29 6:21 ` Dave Airlie
@ 2020-07-29 6:23 ` Dave Airlie
2020-07-29 9:47 ` Christian König
0 siblings, 1 reply; 23+ messages in thread
From: Dave Airlie @ 2020-07-29 6:23 UTC (permalink / raw)
To: Thomas Zimmermann; +Cc: Christian König, dri-devel
On Wed, 29 Jul 2020 at 16:21, Dave Airlie <airlied@gmail.com> wrote:
>
> On Fri, 24 Jul 2020 at 16:43, Thomas Zimmermann <tzimmermann@suse.de> wrote:
> >
> >
> >
> > Am 23.07.20 um 17:17 schrieb Christian König:
> > > Instead of repeating that in each driver.
> > >
> > > Signed-off-by: Christian König <christian.koenig@amd.com>
> >
> > Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
>
> I'm not sure what happened but the patchwork copies of this series are
> mangled badly, I expect AMD email with the crappy headers or something
> got in there somewhere.
>
> Can we get them in drm-misc-next at some point so I can cleanly look at them.
Oh it looks like they are there already, I'm not sure why I'm having
trouble applying the next set. will dig a bit more.
Dave.
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 1/9] drm/ttm: initialize the system domain with defaults
2020-07-29 6:23 ` Dave Airlie
@ 2020-07-29 9:47 ` Christian König
0 siblings, 0 replies; 23+ messages in thread
From: Christian König @ 2020-07-29 9:47 UTC (permalink / raw)
To: Dave Airlie, Thomas Zimmermann; +Cc: dri-devel
Am 29.07.20 um 08:23 schrieb Dave Airlie:
> On Wed, 29 Jul 2020 at 16:21, Dave Airlie <airlied@gmail.com> wrote:
>> On Fri, 24 Jul 2020 at 16:43, Thomas Zimmermann <tzimmermann@suse.de> wrote:
>>>
>>>
>>> Am 23.07.20 um 17:17 schrieb Christian König:
>>>> Instead of repeating that in each driver.
>>>>
>>>> Signed-off-by: Christian König <christian.koenig@amd.com>
>>> Reviewed-by: Thomas Zimmermann <tzimmermann@suse.de>
>> I'm not sure what happened but the patchwork copies of this series are
>> mangled badly, I expect AMD email with the crappy headers or something
>> got in there somewhere.
>>
>> Can we get them in drm-misc-next at some point so I can cleanly look at them.
> Oh it looks like they are there already, I'm not sure why I'm having
> trouble applying the next set. will dig a bit more.
Wanted to send that one out once more today anyway since I would like to
keep the special VMWGFX bits Daniel pointed for now.
Give me a few hours to clean that up,
Christian.
>
> Dave.
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 2/9] drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED
2020-07-27 9:54 ` Christian König
@ 2020-07-27 10:27 ` daniel
0 siblings, 0 replies; 23+ messages in thread
From: daniel @ 2020-07-27 10:27 UTC (permalink / raw)
Cc: dri-devel
On Mon, Jul 27, 2020 at 11:54:41AM +0200, Christian König wrote:
> Am 27.07.20 um 11:48 schrieb daniel@ffwll.ch:
> > On Thu, Jul 23, 2020 at 05:16:14PM +0200, Christian König wrote:
> > > Instead use a boolean field in the memory manager structure.
> > >
> > > Also invert the meaning of the field since the use of a TT
> > > structure is the special case here.
> > >
> > > Signed-off-by: Christian König <christian.koenig@amd.com>
> > > ---
> > > drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 4 +---
> > > drivers/gpu/drm/drm_gem_vram_helper.c | 1 -
> > > drivers/gpu/drm/nouveau/nouveau_bo.c | 4 +---
> > > drivers/gpu/drm/qxl/qxl_ttm.c | 1 -
> > > drivers/gpu/drm/radeon/radeon_ttm.c | 3 +--
> > > drivers/gpu/drm/ttm/ttm_bo.c | 14 +++++++-------
> > > drivers/gpu/drm/ttm/ttm_bo_util.c | 12 ++++++------
> > > drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 3 ++-
> > > include/drm/ttm/ttm_bo_driver.h | 4 +---
> > > 9 files changed, 19 insertions(+), 27 deletions(-)
> > >
> > > diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> > > index e57c49a91b73..406bcb03df48 100644
> > > --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> > > +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> > > @@ -87,15 +87,14 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> > > break;
> > > case TTM_PL_TT:
> > > /* GTT memory */
> > > + man->use_tt = true;
> > > man->func = &amdgpu_gtt_mgr_func;
> > > man->available_caching = TTM_PL_MASK_CACHING;
> > > man->default_caching = TTM_PL_FLAG_CACHED;
> > > - man->flags = 0;
> > > break;
> > > case TTM_PL_VRAM:
> > > /* "On-card" video ram */
> > > man->func = &amdgpu_vram_mgr_func;
> > > - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> > > man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
> > > man->default_caching = TTM_PL_FLAG_WC;
> > > break;
> > > @@ -104,7 +103,6 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> > > case AMDGPU_PL_OA:
> > > /* On-chip GDS memory*/
> > > man->func = &ttm_bo_manager_func;
> > > - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> > > man->available_caching = TTM_PL_FLAG_UNCACHED;
> > > man->default_caching = TTM_PL_FLAG_UNCACHED;
> > > break;
> > > diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
> > > index be177afdeb9a..801a14c6e9e0 100644
> > > --- a/drivers/gpu/drm/drm_gem_vram_helper.c
> > > +++ b/drivers/gpu/drm/drm_gem_vram_helper.c
> > > @@ -1012,7 +1012,6 @@ static int bo_driver_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> > > break;
> > > case TTM_PL_VRAM:
> > > man->func = &ttm_bo_manager_func;
> > > - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> > > man->available_caching = TTM_PL_FLAG_UNCACHED |
> > > TTM_PL_FLAG_WC;
> > > man->default_caching = TTM_PL_FLAG_WC;
> > > diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
> > > index 53af25020bb2..a3ad66ad3817 100644
> > > --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
> > > +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
> > > @@ -657,7 +657,6 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> > > case TTM_PL_SYSTEM:
> > > break;
> > > case TTM_PL_VRAM:
> > > - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> > > man->available_caching = TTM_PL_FLAG_UNCACHED |
> > > TTM_PL_FLAG_WC;
> > > man->default_caching = TTM_PL_FLAG_WC;
> > > @@ -685,13 +684,12 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> > > else
> > > man->func = &ttm_bo_manager_func;
> > > + man->use_tt = true;
> > > if (drm->agp.bridge) {
> > > - man->flags = 0;
> > > man->available_caching = TTM_PL_FLAG_UNCACHED |
> > > TTM_PL_FLAG_WC;
> > > man->default_caching = TTM_PL_FLAG_WC;
> > > } else {
> > > - man->flags = 0;
> > > man->available_caching = TTM_PL_MASK_CACHING;
> > > man->default_caching = TTM_PL_FLAG_CACHED;
> > > }
> > > diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
> > > index e9b8c921c1f0..abb9fa4d80cf 100644
> > > --- a/drivers/gpu/drm/qxl/qxl_ttm.c
> > > +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
> > > @@ -59,7 +59,6 @@ static int qxl_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> > > case TTM_PL_PRIV:
> > > /* "On-card" video ram */
> > > man->func = &ttm_bo_manager_func;
> > > - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> > > man->available_caching = TTM_PL_MASK_CACHING;
> > > man->default_caching = TTM_PL_FLAG_CACHED;
> > > break;
> > > diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
> > > index b4cb75361577..9aba18a143e7 100644
> > > --- a/drivers/gpu/drm/radeon/radeon_ttm.c
> > > +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
> > > @@ -81,7 +81,7 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> > > man->func = &ttm_bo_manager_func;
> > > man->available_caching = TTM_PL_MASK_CACHING;
> > > man->default_caching = TTM_PL_FLAG_CACHED;
> > > - man->flags = 0;
> > > + man->use_tt = true;
> > > #if IS_ENABLED(CONFIG_AGP)
> > > if (rdev->flags & RADEON_IS_AGP) {
> > > if (!rdev->ddev->agp) {
> > > @@ -98,7 +98,6 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> > > case TTM_PL_VRAM:
> > > /* "On-card" video ram */
> > > man->func = &ttm_bo_manager_func;
> > > - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> > > man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
> > > man->default_caching = TTM_PL_FLAG_WC;
> > > break;
> > > diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> > > index 1f1f9e463265..6dea56dce350 100644
> > > --- a/drivers/gpu/drm/ttm/ttm_bo.c
> > > +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> > > @@ -84,7 +84,7 @@ static void ttm_mem_type_debug(struct ttm_bo_device *bdev, struct drm_printer *p
> > > drm_printf(p, " has_type: %d\n", man->has_type);
> > > drm_printf(p, " use_type: %d\n", man->use_type);
> > > - drm_printf(p, " flags: 0x%08X\n", man->flags);
> > > + drm_printf(p, " use_tt: %d\n", man->use_tt);
> > > drm_printf(p, " size: %llu\n", man->size);
> > > drm_printf(p, " available_caching: 0x%08X\n", man->available_caching);
> > > drm_printf(p, " default_caching: 0x%08X\n", man->default_caching);
> > > @@ -159,7 +159,7 @@ static void ttm_bo_add_mem_to_lru(struct ttm_buffer_object *bo,
> > > man = &bdev->man[mem->mem_type];
> > > list_add_tail(&bo->lru, &man->lru[bo->priority]);
> > > - if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED) && bo->ttm &&
> > > + if (man->use_tt && bo->ttm &&
> > > !(bo->ttm->page_flags & (TTM_PAGE_FLAG_SG |
> > > TTM_PAGE_FLAG_SWAPPED))) {
> > > list_add_tail(&bo->swap, &ttm_bo_glob.swap_lru[bo->priority]);
> > > @@ -286,8 +286,8 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
> > > * Create and bind a ttm if required.
> > > */
> > > - if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED)) {
> > > - bool zero = !(old_man->flags & TTM_MEMTYPE_FLAG_FIXED);
> > > + if (new_man->use_tt) {
> > > + bool zero = old_man->use_tt;
> > > ret = ttm_tt_create(bo, zero);
> > > if (ret)
> > > @@ -314,8 +314,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
> > > if (bdev->driver->move_notify)
> > > bdev->driver->move_notify(bo, evict, mem);
> > > - if (!(old_man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
> > > - !(new_man->flags & TTM_MEMTYPE_FLAG_FIXED))
> > > + if (old_man->use_tt && new_man->use_tt)
> > > ret = ttm_bo_move_ttm(bo, ctx, mem);
> > > else if (bdev->driver->move)
> > > ret = bdev->driver->move(bo, evict, ctx, mem);
> > > @@ -340,7 +339,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
> > > out_err:
> > > new_man = &bdev->man[bo->mem.mem_type];
> > > - if (new_man->flags & TTM_MEMTYPE_FLAG_FIXED) {
> > > + if (!new_man->use_tt) {
> > > ttm_tt_destroy(bo->ttm);
> > > bo->ttm = NULL;
> > > }
> > > @@ -1677,6 +1676,7 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev,
> > > * Initialize the system memory buffer type.
> > > * Other types need to be driver / IOCTL initialized.
> > > */
> > > + bdev->man[TTM_PL_SYSTEM].use_tt = true;
> > > bdev->man[TTM_PL_SYSTEM].available_caching = TTM_PL_MASK_CACHING;
> > > bdev->man[TTM_PL_SYSTEM].default_caching = TTM_PL_FLAG_CACHED;
> > > ret = ttm_bo_init_mm(bdev, TTM_PL_SYSTEM, 0);
> > > diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
> > > index 7fb3e0bcbab4..1f502be0b646 100644
> > > --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
> > > +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
> > > @@ -384,7 +384,7 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,
> > > *old_mem = *new_mem;
> > > new_mem->mm_node = NULL;
> > > - if (man->flags & TTM_MEMTYPE_FLAG_FIXED) {
> > > + if (!man->use_tt) {
> > > ttm_tt_destroy(ttm);
> > > bo->ttm = NULL;
> > > }
> > > @@ -645,7 +645,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
> > > if (ret)
> > > return ret;
> > > - if (man->flags & TTM_MEMTYPE_FLAG_FIXED) {
> > > + if (!man->use_tt) {
> > > ttm_tt_destroy(bo->ttm);
> > > bo->ttm = NULL;
> > > }
> > > @@ -674,7 +674,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
> > > * bo to be unbound and destroyed.
> > > */
> > > - if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED))
> > > + if (man->use_tt)
> > > ghost_obj->ttm = NULL;
> > > else
> > > bo->ttm = NULL;
> > > @@ -730,7 +730,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
> > > * bo to be unbound and destroyed.
> > > */
> > > - if (!(to->flags & TTM_MEMTYPE_FLAG_FIXED))
> > > + if (to->use_tt)
> > > ghost_obj->ttm = NULL;
> > > else
> > > bo->ttm = NULL;
> > > @@ -738,7 +738,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
> > > dma_resv_unlock(&ghost_obj->base._resv);
> > > ttm_bo_put(ghost_obj);
> > > - } else if (from->flags & TTM_MEMTYPE_FLAG_FIXED) {
> > > + } else if (!from->use_tt) {
> > > /**
> > > * BO doesn't have a TTM we need to bind/unbind. Just remember
> > > @@ -768,7 +768,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
> > > if (ret)
> > > return ret;
> > > - if (to->flags & TTM_MEMTYPE_FLAG_FIXED) {
> > > + if (!to->use_tt) {
> > > ttm_tt_destroy(bo->ttm);
> > > bo->ttm = NULL;
> > > }
> > > diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> > > index 00cef1a3a178..5d8179d9f394 100644
> > > --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> > > +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> > > @@ -746,7 +746,6 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> > > case TTM_PL_VRAM:
> > > /* "On-card" video ram */
> > > man->func = &vmw_thp_func;
> > > - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> > > man->available_caching = TTM_PL_FLAG_CACHED;
> > > man->default_caching = TTM_PL_FLAG_CACHED;
> > > break;
> > > @@ -760,6 +759,8 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> > > man->func = &vmw_gmrid_manager_func;
> > > man->available_caching = TTM_PL_FLAG_CACHED;
> > > man->default_caching = TTM_PL_FLAG_CACHED;
> > > + /* TODO: This is most likely not correct */
> > Comment suggests it's a remapping thing, and I've seen some idr allocator
> > thing in vmwgfx before, i.e. it allocates remapping ids for bo, instead of
> > remapping space. So I think this is all ok, and no need for the TODO here.
>
> Yeah and exactly because of this I think that allocating a TT structure
> doesn't make much sense.
>
> Why should I need an pages array and backing page if I just want to allocate
> a number from an idr?
>
> My best guess is that we don't leak memory and because of this nobody has
> ever noticed this.
Hm yeah, I guess that's a question for vmwgfx folks to answer then. Feel
free to leave the todo in there.
-Daniel
>
> Christian.
>
> >
> > With that:
> >
> > Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> >
> > > + man->use_tt = true;
> > > break;
> > > default:
> > > DRM_ERROR("Unsupported memory type %u\n", (unsigned)type);
> > > diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
> > > index 9b251853afe2..adac4cd0ba23 100644
> > > --- a/include/drm/ttm/ttm_bo_driver.h
> > > +++ b/include/drm/ttm/ttm_bo_driver.h
> > > @@ -45,8 +45,6 @@
> > > #define TTM_MAX_BO_PRIORITY 4U
> > > -#define TTM_MEMTYPE_FLAG_FIXED (1 << 0) /* Fixed (on-card) PCI memory */
> > > -
> > > struct ttm_mem_type_manager;
> > > struct ttm_mem_type_manager_func {
> > > @@ -173,7 +171,7 @@ struct ttm_mem_type_manager {
> > > bool has_type;
> > > bool use_type;
> > > - uint32_t flags;
> > > + bool use_tt;
> > > uint64_t size;
> > > uint32_t available_caching;
> > > uint32_t default_caching;
> > > --
> > > 2.17.1
> > >
> > > _______________________________________________
> > > dri-devel mailing list
> > > dri-devel@lists.freedesktop.org
> > > https://lists.freedesktop.org/mailman/listinfo/dri-devel
>
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 2/9] drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED
2020-07-27 9:48 ` daniel
@ 2020-07-27 9:54 ` Christian König
2020-07-27 10:27 ` daniel
0 siblings, 1 reply; 23+ messages in thread
From: Christian König @ 2020-07-27 9:54 UTC (permalink / raw)
To: daniel; +Cc: dri-devel
Am 27.07.20 um 11:48 schrieb daniel@ffwll.ch:
> On Thu, Jul 23, 2020 at 05:16:14PM +0200, Christian König wrote:
>> Instead use a boolean field in the memory manager structure.
>>
>> Also invert the meaning of the field since the use of a TT
>> structure is the special case here.
>>
>> Signed-off-by: Christian König <christian.koenig@amd.com>
>> ---
>> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 4 +---
>> drivers/gpu/drm/drm_gem_vram_helper.c | 1 -
>> drivers/gpu/drm/nouveau/nouveau_bo.c | 4 +---
>> drivers/gpu/drm/qxl/qxl_ttm.c | 1 -
>> drivers/gpu/drm/radeon/radeon_ttm.c | 3 +--
>> drivers/gpu/drm/ttm/ttm_bo.c | 14 +++++++-------
>> drivers/gpu/drm/ttm/ttm_bo_util.c | 12 ++++++------
>> drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 3 ++-
>> include/drm/ttm/ttm_bo_driver.h | 4 +---
>> 9 files changed, 19 insertions(+), 27 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> index e57c49a91b73..406bcb03df48 100644
>> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
>> @@ -87,15 +87,14 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> break;
>> case TTM_PL_TT:
>> /* GTT memory */
>> + man->use_tt = true;
>> man->func = &amdgpu_gtt_mgr_func;
>> man->available_caching = TTM_PL_MASK_CACHING;
>> man->default_caching = TTM_PL_FLAG_CACHED;
>> - man->flags = 0;
>> break;
>> case TTM_PL_VRAM:
>> /* "On-card" video ram */
>> man->func = &amdgpu_vram_mgr_func;
>> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
>> man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
>> man->default_caching = TTM_PL_FLAG_WC;
>> break;
>> @@ -104,7 +103,6 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> case AMDGPU_PL_OA:
>> /* On-chip GDS memory*/
>> man->func = &ttm_bo_manager_func;
>> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
>> man->available_caching = TTM_PL_FLAG_UNCACHED;
>> man->default_caching = TTM_PL_FLAG_UNCACHED;
>> break;
>> diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
>> index be177afdeb9a..801a14c6e9e0 100644
>> --- a/drivers/gpu/drm/drm_gem_vram_helper.c
>> +++ b/drivers/gpu/drm/drm_gem_vram_helper.c
>> @@ -1012,7 +1012,6 @@ static int bo_driver_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> break;
>> case TTM_PL_VRAM:
>> man->func = &ttm_bo_manager_func;
>> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
>> man->available_caching = TTM_PL_FLAG_UNCACHED |
>> TTM_PL_FLAG_WC;
>> man->default_caching = TTM_PL_FLAG_WC;
>> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
>> index 53af25020bb2..a3ad66ad3817 100644
>> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
>> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
>> @@ -657,7 +657,6 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> case TTM_PL_SYSTEM:
>> break;
>> case TTM_PL_VRAM:
>> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
>> man->available_caching = TTM_PL_FLAG_UNCACHED |
>> TTM_PL_FLAG_WC;
>> man->default_caching = TTM_PL_FLAG_WC;
>> @@ -685,13 +684,12 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> else
>> man->func = &ttm_bo_manager_func;
>>
>> + man->use_tt = true;
>> if (drm->agp.bridge) {
>> - man->flags = 0;
>> man->available_caching = TTM_PL_FLAG_UNCACHED |
>> TTM_PL_FLAG_WC;
>> man->default_caching = TTM_PL_FLAG_WC;
>> } else {
>> - man->flags = 0;
>> man->available_caching = TTM_PL_MASK_CACHING;
>> man->default_caching = TTM_PL_FLAG_CACHED;
>> }
>> diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
>> index e9b8c921c1f0..abb9fa4d80cf 100644
>> --- a/drivers/gpu/drm/qxl/qxl_ttm.c
>> +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
>> @@ -59,7 +59,6 @@ static int qxl_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> case TTM_PL_PRIV:
>> /* "On-card" video ram */
>> man->func = &ttm_bo_manager_func;
>> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
>> man->available_caching = TTM_PL_MASK_CACHING;
>> man->default_caching = TTM_PL_FLAG_CACHED;
>> break;
>> diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
>> index b4cb75361577..9aba18a143e7 100644
>> --- a/drivers/gpu/drm/radeon/radeon_ttm.c
>> +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
>> @@ -81,7 +81,7 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> man->func = &ttm_bo_manager_func;
>> man->available_caching = TTM_PL_MASK_CACHING;
>> man->default_caching = TTM_PL_FLAG_CACHED;
>> - man->flags = 0;
>> + man->use_tt = true;
>> #if IS_ENABLED(CONFIG_AGP)
>> if (rdev->flags & RADEON_IS_AGP) {
>> if (!rdev->ddev->agp) {
>> @@ -98,7 +98,6 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> case TTM_PL_VRAM:
>> /* "On-card" video ram */
>> man->func = &ttm_bo_manager_func;
>> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
>> man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
>> man->default_caching = TTM_PL_FLAG_WC;
>> break;
>> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
>> index 1f1f9e463265..6dea56dce350 100644
>> --- a/drivers/gpu/drm/ttm/ttm_bo.c
>> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
>> @@ -84,7 +84,7 @@ static void ttm_mem_type_debug(struct ttm_bo_device *bdev, struct drm_printer *p
>>
>> drm_printf(p, " has_type: %d\n", man->has_type);
>> drm_printf(p, " use_type: %d\n", man->use_type);
>> - drm_printf(p, " flags: 0x%08X\n", man->flags);
>> + drm_printf(p, " use_tt: %d\n", man->use_tt);
>> drm_printf(p, " size: %llu\n", man->size);
>> drm_printf(p, " available_caching: 0x%08X\n", man->available_caching);
>> drm_printf(p, " default_caching: 0x%08X\n", man->default_caching);
>> @@ -159,7 +159,7 @@ static void ttm_bo_add_mem_to_lru(struct ttm_buffer_object *bo,
>> man = &bdev->man[mem->mem_type];
>> list_add_tail(&bo->lru, &man->lru[bo->priority]);
>>
>> - if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED) && bo->ttm &&
>> + if (man->use_tt && bo->ttm &&
>> !(bo->ttm->page_flags & (TTM_PAGE_FLAG_SG |
>> TTM_PAGE_FLAG_SWAPPED))) {
>> list_add_tail(&bo->swap, &ttm_bo_glob.swap_lru[bo->priority]);
>> @@ -286,8 +286,8 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
>> * Create and bind a ttm if required.
>> */
>>
>> - if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED)) {
>> - bool zero = !(old_man->flags & TTM_MEMTYPE_FLAG_FIXED);
>> + if (new_man->use_tt) {
>> + bool zero = old_man->use_tt;
>>
>> ret = ttm_tt_create(bo, zero);
>> if (ret)
>> @@ -314,8 +314,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
>> if (bdev->driver->move_notify)
>> bdev->driver->move_notify(bo, evict, mem);
>>
>> - if (!(old_man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
>> - !(new_man->flags & TTM_MEMTYPE_FLAG_FIXED))
>> + if (old_man->use_tt && new_man->use_tt)
>> ret = ttm_bo_move_ttm(bo, ctx, mem);
>> else if (bdev->driver->move)
>> ret = bdev->driver->move(bo, evict, ctx, mem);
>> @@ -340,7 +339,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
>>
>> out_err:
>> new_man = &bdev->man[bo->mem.mem_type];
>> - if (new_man->flags & TTM_MEMTYPE_FLAG_FIXED) {
>> + if (!new_man->use_tt) {
>> ttm_tt_destroy(bo->ttm);
>> bo->ttm = NULL;
>> }
>> @@ -1677,6 +1676,7 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev,
>> * Initialize the system memory buffer type.
>> * Other types need to be driver / IOCTL initialized.
>> */
>> + bdev->man[TTM_PL_SYSTEM].use_tt = true;
>> bdev->man[TTM_PL_SYSTEM].available_caching = TTM_PL_MASK_CACHING;
>> bdev->man[TTM_PL_SYSTEM].default_caching = TTM_PL_FLAG_CACHED;
>> ret = ttm_bo_init_mm(bdev, TTM_PL_SYSTEM, 0);
>> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
>> index 7fb3e0bcbab4..1f502be0b646 100644
>> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
>> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
>> @@ -384,7 +384,7 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,
>> *old_mem = *new_mem;
>> new_mem->mm_node = NULL;
>>
>> - if (man->flags & TTM_MEMTYPE_FLAG_FIXED) {
>> + if (!man->use_tt) {
>> ttm_tt_destroy(ttm);
>> bo->ttm = NULL;
>> }
>> @@ -645,7 +645,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
>> if (ret)
>> return ret;
>>
>> - if (man->flags & TTM_MEMTYPE_FLAG_FIXED) {
>> + if (!man->use_tt) {
>> ttm_tt_destroy(bo->ttm);
>> bo->ttm = NULL;
>> }
>> @@ -674,7 +674,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
>> * bo to be unbound and destroyed.
>> */
>>
>> - if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED))
>> + if (man->use_tt)
>> ghost_obj->ttm = NULL;
>> else
>> bo->ttm = NULL;
>> @@ -730,7 +730,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
>> * bo to be unbound and destroyed.
>> */
>>
>> - if (!(to->flags & TTM_MEMTYPE_FLAG_FIXED))
>> + if (to->use_tt)
>> ghost_obj->ttm = NULL;
>> else
>> bo->ttm = NULL;
>> @@ -738,7 +738,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
>> dma_resv_unlock(&ghost_obj->base._resv);
>> ttm_bo_put(ghost_obj);
>>
>> - } else if (from->flags & TTM_MEMTYPE_FLAG_FIXED) {
>> + } else if (!from->use_tt) {
>>
>> /**
>> * BO doesn't have a TTM we need to bind/unbind. Just remember
>> @@ -768,7 +768,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
>> if (ret)
>> return ret;
>>
>> - if (to->flags & TTM_MEMTYPE_FLAG_FIXED) {
>> + if (!to->use_tt) {
>> ttm_tt_destroy(bo->ttm);
>> bo->ttm = NULL;
>> }
>> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
>> index 00cef1a3a178..5d8179d9f394 100644
>> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
>> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
>> @@ -746,7 +746,6 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> case TTM_PL_VRAM:
>> /* "On-card" video ram */
>> man->func = &vmw_thp_func;
>> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
>> man->available_caching = TTM_PL_FLAG_CACHED;
>> man->default_caching = TTM_PL_FLAG_CACHED;
>> break;
>> @@ -760,6 +759,8 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
>> man->func = &vmw_gmrid_manager_func;
>> man->available_caching = TTM_PL_FLAG_CACHED;
>> man->default_caching = TTM_PL_FLAG_CACHED;
>> + /* TODO: This is most likely not correct */
> Comment suggests it's a remapping thing, and I've seen some idr allocator
> thing in vmwgfx before, i.e. it allocates remapping ids for bo, instead of
> remapping space. So I think this is all ok, and no need for the TODO here.
Yeah and exactly because of this I think that allocating a TT structure
doesn't make much sense.
Why should I need an pages array and backing page if I just want to
allocate a number from an idr?
My best guess is that we don't leak memory and because of this nobody
has ever noticed this.
Christian.
>
> With that:
>
> Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
>
>> + man->use_tt = true;
>> break;
>> default:
>> DRM_ERROR("Unsupported memory type %u\n", (unsigned)type);
>> diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
>> index 9b251853afe2..adac4cd0ba23 100644
>> --- a/include/drm/ttm/ttm_bo_driver.h
>> +++ b/include/drm/ttm/ttm_bo_driver.h
>> @@ -45,8 +45,6 @@
>>
>> #define TTM_MAX_BO_PRIORITY 4U
>>
>> -#define TTM_MEMTYPE_FLAG_FIXED (1 << 0) /* Fixed (on-card) PCI memory */
>> -
>> struct ttm_mem_type_manager;
>>
>> struct ttm_mem_type_manager_func {
>> @@ -173,7 +171,7 @@ struct ttm_mem_type_manager {
>>
>> bool has_type;
>> bool use_type;
>> - uint32_t flags;
>> + bool use_tt;
>> uint64_t size;
>> uint32_t available_caching;
>> uint32_t default_caching;
>> --
>> 2.17.1
>>
>> _______________________________________________
>> dri-devel mailing list
>> dri-devel@lists.freedesktop.org
>> https://lists.freedesktop.org/mailman/listinfo/dri-devel
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 23+ messages in thread
* Re: [PATCH 2/9] drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED
2020-07-23 15:16 ` [PATCH 2/9] drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED Christian König
@ 2020-07-27 9:48 ` daniel
2020-07-27 9:54 ` Christian König
0 siblings, 1 reply; 23+ messages in thread
From: daniel @ 2020-07-27 9:48 UTC (permalink / raw)
Cc: dri-devel
On Thu, Jul 23, 2020 at 05:16:14PM +0200, Christian König wrote:
> Instead use a boolean field in the memory manager structure.
>
> Also invert the meaning of the field since the use of a TT
> structure is the special case here.
>
> Signed-off-by: Christian König <christian.koenig@amd.com>
> ---
> drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 4 +---
> drivers/gpu/drm/drm_gem_vram_helper.c | 1 -
> drivers/gpu/drm/nouveau/nouveau_bo.c | 4 +---
> drivers/gpu/drm/qxl/qxl_ttm.c | 1 -
> drivers/gpu/drm/radeon/radeon_ttm.c | 3 +--
> drivers/gpu/drm/ttm/ttm_bo.c | 14 +++++++-------
> drivers/gpu/drm/ttm/ttm_bo_util.c | 12 ++++++------
> drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 3 ++-
> include/drm/ttm/ttm_bo_driver.h | 4 +---
> 9 files changed, 19 insertions(+), 27 deletions(-)
>
> diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> index e57c49a91b73..406bcb03df48 100644
> --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
> @@ -87,15 +87,14 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> break;
> case TTM_PL_TT:
> /* GTT memory */
> + man->use_tt = true;
> man->func = &amdgpu_gtt_mgr_func;
> man->available_caching = TTM_PL_MASK_CACHING;
> man->default_caching = TTM_PL_FLAG_CACHED;
> - man->flags = 0;
> break;
> case TTM_PL_VRAM:
> /* "On-card" video ram */
> man->func = &amdgpu_vram_mgr_func;
> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
> man->default_caching = TTM_PL_FLAG_WC;
> break;
> @@ -104,7 +103,6 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> case AMDGPU_PL_OA:
> /* On-chip GDS memory*/
> man->func = &ttm_bo_manager_func;
> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> man->available_caching = TTM_PL_FLAG_UNCACHED;
> man->default_caching = TTM_PL_FLAG_UNCACHED;
> break;
> diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
> index be177afdeb9a..801a14c6e9e0 100644
> --- a/drivers/gpu/drm/drm_gem_vram_helper.c
> +++ b/drivers/gpu/drm/drm_gem_vram_helper.c
> @@ -1012,7 +1012,6 @@ static int bo_driver_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> break;
> case TTM_PL_VRAM:
> man->func = &ttm_bo_manager_func;
> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> man->available_caching = TTM_PL_FLAG_UNCACHED |
> TTM_PL_FLAG_WC;
> man->default_caching = TTM_PL_FLAG_WC;
> diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
> index 53af25020bb2..a3ad66ad3817 100644
> --- a/drivers/gpu/drm/nouveau/nouveau_bo.c
> +++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
> @@ -657,7 +657,6 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> case TTM_PL_SYSTEM:
> break;
> case TTM_PL_VRAM:
> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> man->available_caching = TTM_PL_FLAG_UNCACHED |
> TTM_PL_FLAG_WC;
> man->default_caching = TTM_PL_FLAG_WC;
> @@ -685,13 +684,12 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> else
> man->func = &ttm_bo_manager_func;
>
> + man->use_tt = true;
> if (drm->agp.bridge) {
> - man->flags = 0;
> man->available_caching = TTM_PL_FLAG_UNCACHED |
> TTM_PL_FLAG_WC;
> man->default_caching = TTM_PL_FLAG_WC;
> } else {
> - man->flags = 0;
> man->available_caching = TTM_PL_MASK_CACHING;
> man->default_caching = TTM_PL_FLAG_CACHED;
> }
> diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
> index e9b8c921c1f0..abb9fa4d80cf 100644
> --- a/drivers/gpu/drm/qxl/qxl_ttm.c
> +++ b/drivers/gpu/drm/qxl/qxl_ttm.c
> @@ -59,7 +59,6 @@ static int qxl_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> case TTM_PL_PRIV:
> /* "On-card" video ram */
> man->func = &ttm_bo_manager_func;
> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> man->available_caching = TTM_PL_MASK_CACHING;
> man->default_caching = TTM_PL_FLAG_CACHED;
> break;
> diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
> index b4cb75361577..9aba18a143e7 100644
> --- a/drivers/gpu/drm/radeon/radeon_ttm.c
> +++ b/drivers/gpu/drm/radeon/radeon_ttm.c
> @@ -81,7 +81,7 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> man->func = &ttm_bo_manager_func;
> man->available_caching = TTM_PL_MASK_CACHING;
> man->default_caching = TTM_PL_FLAG_CACHED;
> - man->flags = 0;
> + man->use_tt = true;
> #if IS_ENABLED(CONFIG_AGP)
> if (rdev->flags & RADEON_IS_AGP) {
> if (!rdev->ddev->agp) {
> @@ -98,7 +98,6 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> case TTM_PL_VRAM:
> /* "On-card" video ram */
> man->func = &ttm_bo_manager_func;
> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
> man->default_caching = TTM_PL_FLAG_WC;
> break;
> diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
> index 1f1f9e463265..6dea56dce350 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo.c
> @@ -84,7 +84,7 @@ static void ttm_mem_type_debug(struct ttm_bo_device *bdev, struct drm_printer *p
>
> drm_printf(p, " has_type: %d\n", man->has_type);
> drm_printf(p, " use_type: %d\n", man->use_type);
> - drm_printf(p, " flags: 0x%08X\n", man->flags);
> + drm_printf(p, " use_tt: %d\n", man->use_tt);
> drm_printf(p, " size: %llu\n", man->size);
> drm_printf(p, " available_caching: 0x%08X\n", man->available_caching);
> drm_printf(p, " default_caching: 0x%08X\n", man->default_caching);
> @@ -159,7 +159,7 @@ static void ttm_bo_add_mem_to_lru(struct ttm_buffer_object *bo,
> man = &bdev->man[mem->mem_type];
> list_add_tail(&bo->lru, &man->lru[bo->priority]);
>
> - if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED) && bo->ttm &&
> + if (man->use_tt && bo->ttm &&
> !(bo->ttm->page_flags & (TTM_PAGE_FLAG_SG |
> TTM_PAGE_FLAG_SWAPPED))) {
> list_add_tail(&bo->swap, &ttm_bo_glob.swap_lru[bo->priority]);
> @@ -286,8 +286,8 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
> * Create and bind a ttm if required.
> */
>
> - if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED)) {
> - bool zero = !(old_man->flags & TTM_MEMTYPE_FLAG_FIXED);
> + if (new_man->use_tt) {
> + bool zero = old_man->use_tt;
>
> ret = ttm_tt_create(bo, zero);
> if (ret)
> @@ -314,8 +314,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
> if (bdev->driver->move_notify)
> bdev->driver->move_notify(bo, evict, mem);
>
> - if (!(old_man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
> - !(new_man->flags & TTM_MEMTYPE_FLAG_FIXED))
> + if (old_man->use_tt && new_man->use_tt)
> ret = ttm_bo_move_ttm(bo, ctx, mem);
> else if (bdev->driver->move)
> ret = bdev->driver->move(bo, evict, ctx, mem);
> @@ -340,7 +339,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
>
> out_err:
> new_man = &bdev->man[bo->mem.mem_type];
> - if (new_man->flags & TTM_MEMTYPE_FLAG_FIXED) {
> + if (!new_man->use_tt) {
> ttm_tt_destroy(bo->ttm);
> bo->ttm = NULL;
> }
> @@ -1677,6 +1676,7 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev,
> * Initialize the system memory buffer type.
> * Other types need to be driver / IOCTL initialized.
> */
> + bdev->man[TTM_PL_SYSTEM].use_tt = true;
> bdev->man[TTM_PL_SYSTEM].available_caching = TTM_PL_MASK_CACHING;
> bdev->man[TTM_PL_SYSTEM].default_caching = TTM_PL_FLAG_CACHED;
> ret = ttm_bo_init_mm(bdev, TTM_PL_SYSTEM, 0);
> diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
> index 7fb3e0bcbab4..1f502be0b646 100644
> --- a/drivers/gpu/drm/ttm/ttm_bo_util.c
> +++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
> @@ -384,7 +384,7 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,
> *old_mem = *new_mem;
> new_mem->mm_node = NULL;
>
> - if (man->flags & TTM_MEMTYPE_FLAG_FIXED) {
> + if (!man->use_tt) {
> ttm_tt_destroy(ttm);
> bo->ttm = NULL;
> }
> @@ -645,7 +645,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
> if (ret)
> return ret;
>
> - if (man->flags & TTM_MEMTYPE_FLAG_FIXED) {
> + if (!man->use_tt) {
> ttm_tt_destroy(bo->ttm);
> bo->ttm = NULL;
> }
> @@ -674,7 +674,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
> * bo to be unbound and destroyed.
> */
>
> - if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED))
> + if (man->use_tt)
> ghost_obj->ttm = NULL;
> else
> bo->ttm = NULL;
> @@ -730,7 +730,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
> * bo to be unbound and destroyed.
> */
>
> - if (!(to->flags & TTM_MEMTYPE_FLAG_FIXED))
> + if (to->use_tt)
> ghost_obj->ttm = NULL;
> else
> bo->ttm = NULL;
> @@ -738,7 +738,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
> dma_resv_unlock(&ghost_obj->base._resv);
> ttm_bo_put(ghost_obj);
>
> - } else if (from->flags & TTM_MEMTYPE_FLAG_FIXED) {
> + } else if (!from->use_tt) {
>
> /**
> * BO doesn't have a TTM we need to bind/unbind. Just remember
> @@ -768,7 +768,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
> if (ret)
> return ret;
>
> - if (to->flags & TTM_MEMTYPE_FLAG_FIXED) {
> + if (!to->use_tt) {
> ttm_tt_destroy(bo->ttm);
> bo->ttm = NULL;
> }
> diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> index 00cef1a3a178..5d8179d9f394 100644
> --- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> +++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
> @@ -746,7 +746,6 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> case TTM_PL_VRAM:
> /* "On-card" video ram */
> man->func = &vmw_thp_func;
> - man->flags = TTM_MEMTYPE_FLAG_FIXED;
> man->available_caching = TTM_PL_FLAG_CACHED;
> man->default_caching = TTM_PL_FLAG_CACHED;
> break;
> @@ -760,6 +759,8 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
> man->func = &vmw_gmrid_manager_func;
> man->available_caching = TTM_PL_FLAG_CACHED;
> man->default_caching = TTM_PL_FLAG_CACHED;
> + /* TODO: This is most likely not correct */
Comment suggests it's a remapping thing, and I've seen some idr allocator
thing in vmwgfx before, i.e. it allocates remapping ids for bo, instead of
remapping space. So I think this is all ok, and no need for the TODO here.
With that:
Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch>
> + man->use_tt = true;
> break;
> default:
> DRM_ERROR("Unsupported memory type %u\n", (unsigned)type);
> diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
> index 9b251853afe2..adac4cd0ba23 100644
> --- a/include/drm/ttm/ttm_bo_driver.h
> +++ b/include/drm/ttm/ttm_bo_driver.h
> @@ -45,8 +45,6 @@
>
> #define TTM_MAX_BO_PRIORITY 4U
>
> -#define TTM_MEMTYPE_FLAG_FIXED (1 << 0) /* Fixed (on-card) PCI memory */
> -
> struct ttm_mem_type_manager;
>
> struct ttm_mem_type_manager_func {
> @@ -173,7 +171,7 @@ struct ttm_mem_type_manager {
>
> bool has_type;
> bool use_type;
> - uint32_t flags;
> + bool use_tt;
> uint64_t size;
> uint32_t available_caching;
> uint32_t default_caching;
> --
> 2.17.1
>
> _______________________________________________
> dri-devel mailing list
> dri-devel@lists.freedesktop.org
> https://lists.freedesktop.org/mailman/listinfo/dri-devel
--
Daniel Vetter
Software Engineer, Intel Corporation
http://blog.ffwll.ch
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply [flat|nested] 23+ messages in thread
* [PATCH 2/9] drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED
2020-07-23 15:16 [PATCH 1/9] drm/ttm: initialize the system domain with defaults Christian König
@ 2020-07-23 15:16 ` Christian König
2020-07-27 9:48 ` daniel
0 siblings, 1 reply; 23+ messages in thread
From: Christian König @ 2020-07-23 15:16 UTC (permalink / raw)
To: dri-devel
Instead use a boolean field in the memory manager structure.
Also invert the meaning of the field since the use of a TT
structure is the special case here.
Signed-off-by: Christian König <christian.koenig@amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 4 +---
drivers/gpu/drm/drm_gem_vram_helper.c | 1 -
drivers/gpu/drm/nouveau/nouveau_bo.c | 4 +---
drivers/gpu/drm/qxl/qxl_ttm.c | 1 -
drivers/gpu/drm/radeon/radeon_ttm.c | 3 +--
drivers/gpu/drm/ttm/ttm_bo.c | 14 +++++++-------
drivers/gpu/drm/ttm/ttm_bo_util.c | 12 ++++++------
drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c | 3 ++-
include/drm/ttm/ttm_bo_driver.h | 4 +---
9 files changed, 19 insertions(+), 27 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index e57c49a91b73..406bcb03df48 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -87,15 +87,14 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
break;
case TTM_PL_TT:
/* GTT memory */
+ man->use_tt = true;
man->func = &amdgpu_gtt_mgr_func;
man->available_caching = TTM_PL_MASK_CACHING;
man->default_caching = TTM_PL_FLAG_CACHED;
- man->flags = 0;
break;
case TTM_PL_VRAM:
/* "On-card" video ram */
man->func = &amdgpu_vram_mgr_func;
- man->flags = TTM_MEMTYPE_FLAG_FIXED;
man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
man->default_caching = TTM_PL_FLAG_WC;
break;
@@ -104,7 +103,6 @@ static int amdgpu_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
case AMDGPU_PL_OA:
/* On-chip GDS memory*/
man->func = &ttm_bo_manager_func;
- man->flags = TTM_MEMTYPE_FLAG_FIXED;
man->available_caching = TTM_PL_FLAG_UNCACHED;
man->default_caching = TTM_PL_FLAG_UNCACHED;
break;
diff --git a/drivers/gpu/drm/drm_gem_vram_helper.c b/drivers/gpu/drm/drm_gem_vram_helper.c
index be177afdeb9a..801a14c6e9e0 100644
--- a/drivers/gpu/drm/drm_gem_vram_helper.c
+++ b/drivers/gpu/drm/drm_gem_vram_helper.c
@@ -1012,7 +1012,6 @@ static int bo_driver_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
break;
case TTM_PL_VRAM:
man->func = &ttm_bo_manager_func;
- man->flags = TTM_MEMTYPE_FLAG_FIXED;
man->available_caching = TTM_PL_FLAG_UNCACHED |
TTM_PL_FLAG_WC;
man->default_caching = TTM_PL_FLAG_WC;
diff --git a/drivers/gpu/drm/nouveau/nouveau_bo.c b/drivers/gpu/drm/nouveau/nouveau_bo.c
index 53af25020bb2..a3ad66ad3817 100644
--- a/drivers/gpu/drm/nouveau/nouveau_bo.c
+++ b/drivers/gpu/drm/nouveau/nouveau_bo.c
@@ -657,7 +657,6 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
case TTM_PL_SYSTEM:
break;
case TTM_PL_VRAM:
- man->flags = TTM_MEMTYPE_FLAG_FIXED;
man->available_caching = TTM_PL_FLAG_UNCACHED |
TTM_PL_FLAG_WC;
man->default_caching = TTM_PL_FLAG_WC;
@@ -685,13 +684,12 @@ nouveau_bo_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
else
man->func = &ttm_bo_manager_func;
+ man->use_tt = true;
if (drm->agp.bridge) {
- man->flags = 0;
man->available_caching = TTM_PL_FLAG_UNCACHED |
TTM_PL_FLAG_WC;
man->default_caching = TTM_PL_FLAG_WC;
} else {
- man->flags = 0;
man->available_caching = TTM_PL_MASK_CACHING;
man->default_caching = TTM_PL_FLAG_CACHED;
}
diff --git a/drivers/gpu/drm/qxl/qxl_ttm.c b/drivers/gpu/drm/qxl/qxl_ttm.c
index e9b8c921c1f0..abb9fa4d80cf 100644
--- a/drivers/gpu/drm/qxl/qxl_ttm.c
+++ b/drivers/gpu/drm/qxl/qxl_ttm.c
@@ -59,7 +59,6 @@ static int qxl_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
case TTM_PL_PRIV:
/* "On-card" video ram */
man->func = &ttm_bo_manager_func;
- man->flags = TTM_MEMTYPE_FLAG_FIXED;
man->available_caching = TTM_PL_MASK_CACHING;
man->default_caching = TTM_PL_FLAG_CACHED;
break;
diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
index b4cb75361577..9aba18a143e7 100644
--- a/drivers/gpu/drm/radeon/radeon_ttm.c
+++ b/drivers/gpu/drm/radeon/radeon_ttm.c
@@ -81,7 +81,7 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
man->func = &ttm_bo_manager_func;
man->available_caching = TTM_PL_MASK_CACHING;
man->default_caching = TTM_PL_FLAG_CACHED;
- man->flags = 0;
+ man->use_tt = true;
#if IS_ENABLED(CONFIG_AGP)
if (rdev->flags & RADEON_IS_AGP) {
if (!rdev->ddev->agp) {
@@ -98,7 +98,6 @@ static int radeon_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
case TTM_PL_VRAM:
/* "On-card" video ram */
man->func = &ttm_bo_manager_func;
- man->flags = TTM_MEMTYPE_FLAG_FIXED;
man->available_caching = TTM_PL_FLAG_UNCACHED | TTM_PL_FLAG_WC;
man->default_caching = TTM_PL_FLAG_WC;
break;
diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
index 1f1f9e463265..6dea56dce350 100644
--- a/drivers/gpu/drm/ttm/ttm_bo.c
+++ b/drivers/gpu/drm/ttm/ttm_bo.c
@@ -84,7 +84,7 @@ static void ttm_mem_type_debug(struct ttm_bo_device *bdev, struct drm_printer *p
drm_printf(p, " has_type: %d\n", man->has_type);
drm_printf(p, " use_type: %d\n", man->use_type);
- drm_printf(p, " flags: 0x%08X\n", man->flags);
+ drm_printf(p, " use_tt: %d\n", man->use_tt);
drm_printf(p, " size: %llu\n", man->size);
drm_printf(p, " available_caching: 0x%08X\n", man->available_caching);
drm_printf(p, " default_caching: 0x%08X\n", man->default_caching);
@@ -159,7 +159,7 @@ static void ttm_bo_add_mem_to_lru(struct ttm_buffer_object *bo,
man = &bdev->man[mem->mem_type];
list_add_tail(&bo->lru, &man->lru[bo->priority]);
- if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED) && bo->ttm &&
+ if (man->use_tt && bo->ttm &&
!(bo->ttm->page_flags & (TTM_PAGE_FLAG_SG |
TTM_PAGE_FLAG_SWAPPED))) {
list_add_tail(&bo->swap, &ttm_bo_glob.swap_lru[bo->priority]);
@@ -286,8 +286,8 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
* Create and bind a ttm if required.
*/
- if (!(new_man->flags & TTM_MEMTYPE_FLAG_FIXED)) {
- bool zero = !(old_man->flags & TTM_MEMTYPE_FLAG_FIXED);
+ if (new_man->use_tt) {
+ bool zero = old_man->use_tt;
ret = ttm_tt_create(bo, zero);
if (ret)
@@ -314,8 +314,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
if (bdev->driver->move_notify)
bdev->driver->move_notify(bo, evict, mem);
- if (!(old_man->flags & TTM_MEMTYPE_FLAG_FIXED) &&
- !(new_man->flags & TTM_MEMTYPE_FLAG_FIXED))
+ if (old_man->use_tt && new_man->use_tt)
ret = ttm_bo_move_ttm(bo, ctx, mem);
else if (bdev->driver->move)
ret = bdev->driver->move(bo, evict, ctx, mem);
@@ -340,7 +339,7 @@ static int ttm_bo_handle_move_mem(struct ttm_buffer_object *bo,
out_err:
new_man = &bdev->man[bo->mem.mem_type];
- if (new_man->flags & TTM_MEMTYPE_FLAG_FIXED) {
+ if (!new_man->use_tt) {
ttm_tt_destroy(bo->ttm);
bo->ttm = NULL;
}
@@ -1677,6 +1676,7 @@ int ttm_bo_device_init(struct ttm_bo_device *bdev,
* Initialize the system memory buffer type.
* Other types need to be driver / IOCTL initialized.
*/
+ bdev->man[TTM_PL_SYSTEM].use_tt = true;
bdev->man[TTM_PL_SYSTEM].available_caching = TTM_PL_MASK_CACHING;
bdev->man[TTM_PL_SYSTEM].default_caching = TTM_PL_FLAG_CACHED;
ret = ttm_bo_init_mm(bdev, TTM_PL_SYSTEM, 0);
diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
index 7fb3e0bcbab4..1f502be0b646 100644
--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
+++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
@@ -384,7 +384,7 @@ int ttm_bo_move_memcpy(struct ttm_buffer_object *bo,
*old_mem = *new_mem;
new_mem->mm_node = NULL;
- if (man->flags & TTM_MEMTYPE_FLAG_FIXED) {
+ if (!man->use_tt) {
ttm_tt_destroy(ttm);
bo->ttm = NULL;
}
@@ -645,7 +645,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
if (ret)
return ret;
- if (man->flags & TTM_MEMTYPE_FLAG_FIXED) {
+ if (!man->use_tt) {
ttm_tt_destroy(bo->ttm);
bo->ttm = NULL;
}
@@ -674,7 +674,7 @@ int ttm_bo_move_accel_cleanup(struct ttm_buffer_object *bo,
* bo to be unbound and destroyed.
*/
- if (!(man->flags & TTM_MEMTYPE_FLAG_FIXED))
+ if (man->use_tt)
ghost_obj->ttm = NULL;
else
bo->ttm = NULL;
@@ -730,7 +730,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
* bo to be unbound and destroyed.
*/
- if (!(to->flags & TTM_MEMTYPE_FLAG_FIXED))
+ if (to->use_tt)
ghost_obj->ttm = NULL;
else
bo->ttm = NULL;
@@ -738,7 +738,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
dma_resv_unlock(&ghost_obj->base._resv);
ttm_bo_put(ghost_obj);
- } else if (from->flags & TTM_MEMTYPE_FLAG_FIXED) {
+ } else if (!from->use_tt) {
/**
* BO doesn't have a TTM we need to bind/unbind. Just remember
@@ -768,7 +768,7 @@ int ttm_bo_pipeline_move(struct ttm_buffer_object *bo,
if (ret)
return ret;
- if (to->flags & TTM_MEMTYPE_FLAG_FIXED) {
+ if (!to->use_tt) {
ttm_tt_destroy(bo->ttm);
bo->ttm = NULL;
}
diff --git a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
index 00cef1a3a178..5d8179d9f394 100644
--- a/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
+++ b/drivers/gpu/drm/vmwgfx/vmwgfx_ttm_buffer.c
@@ -746,7 +746,6 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
case TTM_PL_VRAM:
/* "On-card" video ram */
man->func = &vmw_thp_func;
- man->flags = TTM_MEMTYPE_FLAG_FIXED;
man->available_caching = TTM_PL_FLAG_CACHED;
man->default_caching = TTM_PL_FLAG_CACHED;
break;
@@ -760,6 +759,8 @@ static int vmw_init_mem_type(struct ttm_bo_device *bdev, uint32_t type,
man->func = &vmw_gmrid_manager_func;
man->available_caching = TTM_PL_FLAG_CACHED;
man->default_caching = TTM_PL_FLAG_CACHED;
+ /* TODO: This is most likely not correct */
+ man->use_tt = true;
break;
default:
DRM_ERROR("Unsupported memory type %u\n", (unsigned)type);
diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
index 9b251853afe2..adac4cd0ba23 100644
--- a/include/drm/ttm/ttm_bo_driver.h
+++ b/include/drm/ttm/ttm_bo_driver.h
@@ -45,8 +45,6 @@
#define TTM_MAX_BO_PRIORITY 4U
-#define TTM_MEMTYPE_FLAG_FIXED (1 << 0) /* Fixed (on-card) PCI memory */
-
struct ttm_mem_type_manager;
struct ttm_mem_type_manager_func {
@@ -173,7 +171,7 @@ struct ttm_mem_type_manager {
bool has_type;
bool use_type;
- uint32_t flags;
+ bool use_tt;
uint64_t size;
uint32_t available_caching;
uint32_t default_caching;
--
2.17.1
_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
^ permalink raw reply related [flat|nested] 23+ messages in thread
end of thread, other threads:[~2020-07-29 9:47 UTC | newest]
Thread overview: 23+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-07-23 15:17 More TTM cleanups Christian König
2020-07-23 15:17 ` [PATCH 1/9] drm/ttm: initialize the system domain with defaults Christian König
2020-07-24 6:43 ` Thomas Zimmermann
2020-07-29 6:21 ` Dave Airlie
2020-07-29 6:23 ` Dave Airlie
2020-07-29 9:47 ` Christian König
2020-07-23 15:17 ` [PATCH 2/9] drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED Christian König
2020-07-24 6:50 ` Thomas Zimmermann
2020-07-24 7:27 ` Christian König
2020-07-23 15:17 ` [PATCH 3/9] drm/radeon: stop implementing init_mem_type Christian König
2020-07-23 15:17 ` [PATCH 4/9] drm/amdgpu: " Christian König
2020-07-23 15:17 ` [PATCH 5/9] drm/vmwgfx: " Christian König
2020-07-23 15:17 ` [PATCH 6/9] drm/nouveau: " Christian König
2020-07-23 15:17 ` [PATCH 7/9] drm/qxl: " Christian König
2020-07-23 15:17 ` [PATCH 8/9] drm/vram-helper: " Christian König
2020-07-24 6:51 ` Thomas Zimmermann
2020-07-23 15:17 ` [PATCH 9/9] drm/ttm: remove the init_mem_type callback Christian König
2020-07-23 20:31 ` Alex Deucher
2020-07-24 6:51 ` Thomas Zimmermann
-- strict thread matches above, loose matches on Subject: below --
2020-07-23 15:16 [PATCH 1/9] drm/ttm: initialize the system domain with defaults Christian König
2020-07-23 15:16 ` [PATCH 2/9] drm/ttm: remove TTM_MEMTYPE_FLAG_FIXED Christian König
2020-07-27 9:48 ` daniel
2020-07-27 9:54 ` Christian König
2020-07-27 10:27 ` daniel
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.