[PATCH 02/13] drm/amdgpu: rename vram_mgr functions to bar_mgr
Shashank Sharma
shashank.sharma at amd.com
Fri Feb 3 19:08:19 UTC 2023
From: Alex Deucher <alexander.deucher at amd.com>
Rename the VRAM manager functions so they can be resused to manage
doorbell BAR as well.
Cc: Christian Koenig <christian.koenig at amd.com>
Signed-off-by: Alex Deucher <alexander.deucher at amd.com>
Signed-off-by: Shashank Sharma <shashank.sharma at amd.com>
---
drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c | 8 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 4 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c | 4 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 4 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c | 4 +-
.../gpu/drm/amd/amdgpu/amdgpu_res_cursor.h | 14 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c | 4 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h | 36 ++--
drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c | 2 +-
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c | 200 ++++++++++--------
drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h | 18 +-
12 files changed, 157 insertions(+), 143 deletions(-)
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
index 7b5ce00f0602..e34eae8d64cf 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c
@@ -723,7 +723,7 @@ static void amdgpu_cs_get_threshold_for_moves(struct amdgpu_device *adev,
if (!amdgpu_gmc_vram_full_visible(&adev->gmc)) {
u64 total_vis_vram = adev->gmc.visible_vram_size;
u64 used_vis_vram =
- amdgpu_vram_mgr_vis_usage(&adev->mman.vram_mgr);
+ amdgpu_bar_mgr_vis_usage(&adev->mman.vram_mgr);
if (used_vis_vram < total_vis_vram) {
u64 free_vis_vram = total_vis_vram - used_vis_vram;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
index 271e30e34d93..c48ccde281c3 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_dma_buf.c
@@ -179,9 +179,9 @@ static struct sg_table *amdgpu_dma_buf_map(struct dma_buf_attachment *attach,
break;
case TTM_PL_VRAM:
- r = amdgpu_vram_mgr_alloc_sgt(adev, bo->tbo.resource, 0,
- bo->tbo.base.size, attach->dev,
- dir, &sgt);
+ r = amdgpu_bar_mgr_alloc_sgt(adev, bo->tbo.resource, 0,
+ bo->tbo.base.size, attach->dev,
+ dir, &sgt);
if (r)
return ERR_PTR(r);
break;
@@ -215,7 +215,7 @@ static void amdgpu_dma_buf_unmap(struct dma_buf_attachment *attach,
sg_free_table(sgt);
kfree(sgt);
} else {
- amdgpu_vram_mgr_free_sgt(attach->dev, dir, sgt);
+ amdgpu_bar_mgr_free_sgt(attach->dev, dir, sgt);
}
}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
index cd4caaa29528..9f148ea7ca66 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c
@@ -2807,12 +2807,12 @@ static struct pci_error_handlers amdgpu_pci_err_handler = {
.resume = amdgpu_pci_resume,
};
-extern const struct attribute_group amdgpu_vram_mgr_attr_group;
+extern const struct attribute_group amdgpu_bar_mgr_attr_group;
extern const struct attribute_group amdgpu_gtt_mgr_attr_group;
extern const struct attribute_group amdgpu_vbios_version_attr_group;
static const struct attribute_group *amdgpu_sysfs_groups[] = {
- &amdgpu_vram_mgr_attr_group,
+ &amdgpu_bar_mgr_attr_group,
&amdgpu_gtt_mgr_attr_group,
&amdgpu_vbios_version_attr_group,
NULL,
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
index 7aa7e52ca784..2ce11434fb22 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_kms.c
@@ -650,7 +650,7 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
ui64 = ttm_resource_manager_usage(&adev->mman.vram_mgr.manager);
return copy_to_user(out, &ui64, min(size, 8u)) ? -EFAULT : 0;
case AMDGPU_INFO_VIS_VRAM_USAGE:
- ui64 = amdgpu_vram_mgr_vis_usage(&adev->mman.vram_mgr);
+ ui64 = amdgpu_bar_mgr_vis_usage(&adev->mman.vram_mgr);
return copy_to_user(out, &ui64, min(size, 8u)) ? -EFAULT : 0;
case AMDGPU_INFO_GTT_USAGE:
ui64 = ttm_resource_manager_usage(&adev->mman.gtt_mgr.manager);
@@ -704,7 +704,7 @@ int amdgpu_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
atomic64_read(&adev->visible_pin_size),
mem.vram.usable_heap_size);
mem.cpu_accessible_vram.heap_usage =
- amdgpu_vram_mgr_vis_usage(&adev->mman.vram_mgr);
+ amdgpu_bar_mgr_vis_usage(&adev->mman.vram_mgr);
mem.cpu_accessible_vram.max_allocation =
mem.cpu_accessible_vram.usable_heap_size * 3 / 4;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
index 25a68d8888e0..ca85d64a72c2 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c
@@ -958,7 +958,7 @@ int amdgpu_bo_pin_restricted(struct amdgpu_bo *bo, u32 domain,
domain = amdgpu_mem_type_to_domain(bo->tbo.resource->mem_type);
if (domain == AMDGPU_GEM_DOMAIN_VRAM) {
atomic64_add(amdgpu_bo_size(bo), &adev->vram_pin_size);
- atomic64_add(amdgpu_vram_mgr_bo_visible_size(bo),
+ atomic64_add(amdgpu_bar_mgr_bo_visible_size(bo),
&adev->visible_pin_size);
} else if (domain == AMDGPU_GEM_DOMAIN_GTT) {
atomic64_add(amdgpu_bo_size(bo), &adev->gart_pin_size);
@@ -1009,7 +1009,7 @@ void amdgpu_bo_unpin(struct amdgpu_bo *bo)
if (bo->tbo.resource->mem_type == TTM_PL_VRAM) {
atomic64_sub(amdgpu_bo_size(bo), &adev->vram_pin_size);
- atomic64_sub(amdgpu_vram_mgr_bo_visible_size(bo),
+ atomic64_sub(amdgpu_bar_mgr_bo_visible_size(bo),
&adev->visible_pin_size);
} else if (bo->tbo.resource->mem_type == TTM_PL_TT) {
atomic64_sub(amdgpu_bo_size(bo), &adev->gart_pin_size);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
index ad490c1e2f57..4e64a035d49d 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ras.c
@@ -1899,7 +1899,7 @@ static int amdgpu_ras_badpages_read(struct amdgpu_device *adev,
.size = AMDGPU_GPU_PAGE_SIZE,
.flags = AMDGPU_RAS_RETIRE_PAGE_RESERVED,
};
- status = amdgpu_vram_mgr_query_page_status(&adev->mman.vram_mgr,
+ status = amdgpu_bar_mgr_query_page_status(&adev->mman.vram_mgr,
data->bps[i].retired_page);
if (status == -EBUSY)
(*bps)[i].flags = AMDGPU_RAS_RETIRE_PAGE_PENDING;
@@ -2012,7 +2012,7 @@ int amdgpu_ras_add_bad_pages(struct amdgpu_device *adev,
goto out;
}
- amdgpu_vram_mgr_reserve_range(&adev->mman.vram_mgr,
+ amdgpu_bar_mgr_reserve_range(&adev->mman.vram_mgr,
bps[i].retired_page << AMDGPU_GPU_PAGE_SHIFT,
AMDGPU_GPU_PAGE_SIZE);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
index 5c4f93ee0c57..dd2b43acc600 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_res_cursor.h
@@ -68,7 +68,7 @@ static inline void amdgpu_res_first(struct ttm_resource *res,
switch (cur->mem_type) {
case TTM_PL_VRAM:
- head = &to_amdgpu_vram_mgr_resource(res)->blocks;
+ head = &to_amdgpu_bar_mgr_resource(res)->blocks;
block = list_first_entry_or_null(head,
struct drm_buddy_block,
@@ -76,16 +76,16 @@ static inline void amdgpu_res_first(struct ttm_resource *res,
if (!block)
goto fallback;
- while (start >= amdgpu_vram_mgr_block_size(block)) {
- start -= amdgpu_vram_mgr_block_size(block);
+ while (start >= amdgpu_bar_mgr_block_size(block)) {
+ start -= amdgpu_bar_mgr_block_size(block);
next = block->link.next;
if (next != head)
block = list_entry(next, struct drm_buddy_block, link);
}
- cur->start = amdgpu_vram_mgr_block_start(block) + start;
- cur->size = min(amdgpu_vram_mgr_block_size(block) - start, size);
+ cur->start = amdgpu_bar_mgr_block_start(block) + start;
+ cur->size = min(amdgpu_bar_mgr_block_size(block) - start, size);
cur->remaining = size;
cur->node = block;
break;
@@ -148,8 +148,8 @@ static inline void amdgpu_res_next(struct amdgpu_res_cursor *cur, uint64_t size)
block = list_entry(next, struct drm_buddy_block, link);
cur->node = block;
- cur->start = amdgpu_vram_mgr_block_start(block);
- cur->size = min(amdgpu_vram_mgr_block_size(block), cur->remaining);
+ cur->start = amdgpu_bar_mgr_block_start(block);
+ cur->size = min(amdgpu_bar_mgr_block_size(block), cur->remaining);
break;
case TTM_PL_TT:
node = cur->node;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
index 55e0284b2bdd..668826653591 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.c
@@ -1735,7 +1735,7 @@ int amdgpu_ttm_init(struct amdgpu_device *adev)
adev->mman.initialized = true;
/* Initialize VRAM pool with all of VRAM divided into pages */
- r = amdgpu_vram_mgr_init(adev);
+ r = amdgpu_bar_mgr_init(adev, TTM_PL_VRAM);
if (r) {
DRM_ERROR("Failed initializing VRAM heap.\n");
return r;
@@ -1911,7 +1911,7 @@ void amdgpu_ttm_fini(struct amdgpu_device *adev)
drm_dev_exit(idx);
}
- amdgpu_vram_mgr_fini(adev);
+ amdgpu_bar_mgr_fini(adev, TTM_PL_VRAM);
amdgpu_gtt_mgr_fini(adev);
amdgpu_preempt_mgr_fini(adev);
ttm_range_man_fini(&adev->mman.bdev, AMDGPU_PL_GDS);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
index e2cd5894afc9..a918bbd67004 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_ttm.h
@@ -61,7 +61,7 @@ struct amdgpu_mman {
/* Scheduler entity for buffer moves */
struct drm_sched_entity entity;
- struct amdgpu_vram_mgr vram_mgr;
+ struct amdgpu_bar_mgr vram_mgr;
struct amdgpu_gtt_mgr gtt_mgr;
struct ttm_resource_manager preempt_mgr;
@@ -107,29 +107,29 @@ int amdgpu_gtt_mgr_init(struct amdgpu_device *adev, uint64_t gtt_size);
void amdgpu_gtt_mgr_fini(struct amdgpu_device *adev);
int amdgpu_preempt_mgr_init(struct amdgpu_device *adev);
void amdgpu_preempt_mgr_fini(struct amdgpu_device *adev);
-int amdgpu_vram_mgr_init(struct amdgpu_device *adev);
-void amdgpu_vram_mgr_fini(struct amdgpu_device *adev);
+int amdgpu_bar_mgr_init(struct amdgpu_device *adev, u32 domain);
+void amdgpu_bar_mgr_fini(struct amdgpu_device *adev, u32 domain);
bool amdgpu_gtt_mgr_has_gart_addr(struct ttm_resource *mem);
void amdgpu_gtt_mgr_recover(struct amdgpu_gtt_mgr *mgr);
uint64_t amdgpu_preempt_mgr_usage(struct ttm_resource_manager *man);
-u64 amdgpu_vram_mgr_bo_visible_size(struct amdgpu_bo *bo);
-int amdgpu_vram_mgr_alloc_sgt(struct amdgpu_device *adev,
- struct ttm_resource *mem,
- u64 offset, u64 size,
- struct device *dev,
- enum dma_data_direction dir,
- struct sg_table **sgt);
-void amdgpu_vram_mgr_free_sgt(struct device *dev,
- enum dma_data_direction dir,
- struct sg_table *sgt);
-uint64_t amdgpu_vram_mgr_vis_usage(struct amdgpu_vram_mgr *mgr);
-int amdgpu_vram_mgr_reserve_range(struct amdgpu_vram_mgr *mgr,
- uint64_t start, uint64_t size);
-int amdgpu_vram_mgr_query_page_status(struct amdgpu_vram_mgr *mgr,
- uint64_t start);
+u64 amdgpu_bar_mgr_bo_visible_size(struct amdgpu_bo *bo);
+int amdgpu_bar_mgr_alloc_sgt(struct amdgpu_device *adev,
+ struct ttm_resource *mem,
+ u64 offset, u64 size,
+ struct device *dev,
+ enum dma_data_direction dir,
+ struct sg_table **sgt);
+void amdgpu_bar_mgr_free_sgt(struct device *dev,
+ enum dma_data_direction dir,
+ struct sg_table *sgt);
+uint64_t amdgpu_bar_mgr_vis_usage(struct amdgpu_bar_mgr *mgr);
+int amdgpu_bar_mgr_reserve_range(struct amdgpu_bar_mgr *mgr,
+ uint64_t start, uint64_t size);
+int amdgpu_bar_mgr_query_page_status(struct amdgpu_bar_mgr *mgr,
+ uint64_t start);
int amdgpu_ttm_init(struct amdgpu_device *adev);
void amdgpu_ttm_fini(struct amdgpu_device *adev);
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
index 2994b9db196f..fc9edc3028b6 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_virt.c
@@ -599,7 +599,7 @@ static int amdgpu_virt_write_vf2pf_data(struct amdgpu_device *adev)
vf2pf_info->fb_usage =
ttm_resource_manager_usage(&adev->mman.vram_mgr.manager) >> 20;
vf2pf_info->fb_vis_usage =
- amdgpu_vram_mgr_vis_usage(&adev->mman.vram_mgr) >> 20;
+ amdgpu_bar_mgr_vis_usage(&adev->mman.vram_mgr) >> 20;
vf2pf_info->fb_size = adev->gmc.real_vram_size >> 20;
vf2pf_info->fb_vis_size = adev->gmc.visible_vram_size >> 20;
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
index 9fa1d814508a..30d68e3a2469 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.c
@@ -31,46 +31,46 @@
#include "amdgpu_atomfirmware.h"
#include "atom.h"
-struct amdgpu_vram_reservation {
+struct amdgpu_bar_reservation {
u64 start;
u64 size;
struct list_head allocated;
struct list_head blocks;
};
-static inline struct amdgpu_vram_mgr *
-to_vram_mgr(struct ttm_resource_manager *man)
+static inline struct amdgpu_bar_mgr *
+to_bar_mgr(struct ttm_resource_manager *man)
{
- return container_of(man, struct amdgpu_vram_mgr, manager);
+ return container_of(man, struct amdgpu_bar_mgr, manager);
}
static inline struct amdgpu_device *
-to_amdgpu_device(struct amdgpu_vram_mgr *mgr)
+to_amdgpu_device(struct amdgpu_bar_mgr *mgr)
{
return container_of(mgr, struct amdgpu_device, mman.vram_mgr);
}
static inline struct drm_buddy_block *
-amdgpu_vram_mgr_first_block(struct list_head *list)
+amdgpu_bar_mgr_first_block(struct list_head *list)
{
return list_first_entry_or_null(list, struct drm_buddy_block, link);
}
-static inline bool amdgpu_is_vram_mgr_blocks_contiguous(struct list_head *head)
+static inline bool amdgpu_is_bar_mgr_blocks_contiguous(struct list_head *head)
{
struct drm_buddy_block *block;
u64 start, size;
- block = amdgpu_vram_mgr_first_block(head);
+ block = amdgpu_bar_mgr_first_block(head);
if (!block)
return false;
while (head != block->link.next) {
- start = amdgpu_vram_mgr_block_start(block);
- size = amdgpu_vram_mgr_block_size(block);
+ start = amdgpu_bar_mgr_block_start(block);
+ size = amdgpu_bar_mgr_block_size(block);
block = list_entry(block->link.next, struct drm_buddy_block, link);
- if (start + size != amdgpu_vram_mgr_block_start(block))
+ if (start + size != amdgpu_bar_mgr_block_start(block))
return false;
}
@@ -100,7 +100,7 @@ static ssize_t amdgpu_mem_info_vram_total_show(struct device *dev,
* DOC: mem_info_vis_vram_total
*
* The amdgpu driver provides a sysfs API for reporting current total
- * visible VRAM available on the device
+ * visible BAR available on the device
* The file mem_info_vis_vram_total is used for this and returns the total
* amount of visible VRAM in bytes
*/
@@ -148,7 +148,7 @@ static ssize_t amdgpu_mem_info_vis_vram_used_show(struct device *dev,
struct amdgpu_device *adev = drm_to_adev(ddev);
return sysfs_emit(buf, "%llu\n",
- amdgpu_vram_mgr_vis_usage(&adev->mman.vram_mgr));
+ amdgpu_bar_mgr_vis_usage(&adev->mman.vram_mgr));
}
/**
@@ -203,7 +203,7 @@ static DEVICE_ATTR(mem_info_vis_vram_used, S_IRUGO,
static DEVICE_ATTR(mem_info_vram_vendor, S_IRUGO,
amdgpu_mem_info_vram_vendor, NULL);
-static struct attribute *amdgpu_vram_mgr_attributes[] = {
+static struct attribute *amdgpu_bar_mgr_attributes[] = {
&dev_attr_mem_info_vram_total.attr,
&dev_attr_mem_info_vis_vram_total.attr,
&dev_attr_mem_info_vram_used.attr,
@@ -212,23 +212,23 @@ static struct attribute *amdgpu_vram_mgr_attributes[] = {
NULL
};
-const struct attribute_group amdgpu_vram_mgr_attr_group = {
- .attrs = amdgpu_vram_mgr_attributes
+const struct attribute_group amdgpu_bar_mgr_attr_group = {
+ .attrs = amdgpu_bar_mgr_attributes
};
/**
- * amdgpu_vram_mgr_vis_size - Calculate visible block size
+ * amdgpu_bar_mgr_vis_size - Calculate visible block size
*
* @adev: amdgpu_device pointer
* @block: DRM BUDDY block structure
*
* Calculate how many bytes of the DRM BUDDY block are inside visible VRAM
*/
-static u64 amdgpu_vram_mgr_vis_size(struct amdgpu_device *adev,
+static u64 amdgpu_bar_mgr_vis_size(struct amdgpu_device *adev,
struct drm_buddy_block *block)
{
- u64 start = amdgpu_vram_mgr_block_start(block);
- u64 end = start + amdgpu_vram_mgr_block_size(block);
+ u64 start = amdgpu_bar_mgr_block_start(block);
+ u64 end = start + amdgpu_bar_mgr_block_size(block);
if (start >= adev->gmc.visible_vram_size)
return 0;
@@ -238,18 +238,18 @@ static u64 amdgpu_vram_mgr_vis_size(struct amdgpu_device *adev,
}
/**
- * amdgpu_vram_mgr_bo_visible_size - CPU visible BO size
+ * amdgpu_bar_mgr_bo_visible_size - CPU visible BO size
*
* @bo: &amdgpu_bo buffer object (must be in VRAM)
*
* Returns:
* How much of the given &amdgpu_bo buffer object lies in CPU visible VRAM.
*/
-u64 amdgpu_vram_mgr_bo_visible_size(struct amdgpu_bo *bo)
+u64 amdgpu_bar_mgr_bo_visible_size(struct amdgpu_bo *bo)
{
struct amdgpu_device *adev = amdgpu_ttm_adev(bo->tbo.bdev);
struct ttm_resource *res = bo->tbo.resource;
- struct amdgpu_vram_mgr_resource *vres = to_amdgpu_vram_mgr_resource(res);
+ struct amdgpu_bar_mgr_resource *vres = to_amdgpu_bar_mgr_resource(res);
struct drm_buddy_block *block;
u64 usage = 0;
@@ -260,18 +260,18 @@ u64 amdgpu_vram_mgr_bo_visible_size(struct amdgpu_bo *bo)
return 0;
list_for_each_entry(block, &vres->blocks, link)
- usage += amdgpu_vram_mgr_vis_size(adev, block);
+ usage += amdgpu_bar_mgr_vis_size(adev, block);
return usage;
}
/* Commit the reservation of VRAM pages */
-static void amdgpu_vram_mgr_do_reserve(struct ttm_resource_manager *man)
+static void amdgpu_bar_mgr_do_reserve(struct ttm_resource_manager *man)
{
- struct amdgpu_vram_mgr *mgr = to_vram_mgr(man);
+ struct amdgpu_bar_mgr *mgr = to_bar_mgr(man);
struct amdgpu_device *adev = to_amdgpu_device(mgr);
struct drm_buddy *mm = &mgr->mm;
- struct amdgpu_vram_reservation *rsv, *temp;
+ struct amdgpu_bar_reservation *rsv, *temp;
struct drm_buddy_block *block;
uint64_t vis_usage;
@@ -281,14 +281,14 @@ static void amdgpu_vram_mgr_do_reserve(struct ttm_resource_manager *man)
DRM_BUDDY_RANGE_ALLOCATION))
continue;
- block = amdgpu_vram_mgr_first_block(&rsv->allocated);
+ block = amdgpu_bar_mgr_first_block(&rsv->allocated);
if (!block)
continue;
dev_dbg(adev->dev, "Reservation 0x%llx - %lld, Succeeded\n",
rsv->start, rsv->size);
- vis_usage = amdgpu_vram_mgr_vis_size(adev, block);
+ vis_usage = amdgpu_bar_mgr_vis_size(adev, block);
atomic64_add(vis_usage, &mgr->vis_usage);
spin_lock(&man->bdev->lru_lock);
man->usage += rsv->size;
@@ -298,18 +298,18 @@ static void amdgpu_vram_mgr_do_reserve(struct ttm_resource_manager *man)
}
/**
- * amdgpu_vram_mgr_reserve_range - Reserve a range from VRAM
+ * amdgpu_bar_mgr_reserve_range - Reserve a range from VRAM
*
- * @mgr: amdgpu_vram_mgr pointer
+ * @mgr: amdgpu_bar_mgr pointer
* @start: start address of the range in VRAM
* @size: size of the range
*
* Reserve memory from start address with the specified size in VRAM
*/
-int amdgpu_vram_mgr_reserve_range(struct amdgpu_vram_mgr *mgr,
+int amdgpu_bar_mgr_reserve_range(struct amdgpu_bar_mgr *mgr,
uint64_t start, uint64_t size)
{
- struct amdgpu_vram_reservation *rsv;
+ struct amdgpu_bar_reservation *rsv;
rsv = kzalloc(sizeof(*rsv), GFP_KERNEL);
if (!rsv)
@@ -323,16 +323,16 @@ int amdgpu_vram_mgr_reserve_range(struct amdgpu_vram_mgr *mgr,
mutex_lock(&mgr->lock);
list_add_tail(&rsv->blocks, &mgr->reservations_pending);
- amdgpu_vram_mgr_do_reserve(&mgr->manager);
+ amdgpu_bar_mgr_do_reserve(&mgr->manager);
mutex_unlock(&mgr->lock);
return 0;
}
/**
- * amdgpu_vram_mgr_query_page_status - query the reservation status
+ * amdgpu_bar_mgr_query_page_status - query the reservation status
*
- * @mgr: amdgpu_vram_mgr pointer
+ * @mgr: amdgpu_bar_mgr pointer
* @start: start address of a page in VRAM
*
* Returns:
@@ -340,10 +340,10 @@ int amdgpu_vram_mgr_reserve_range(struct amdgpu_vram_mgr *mgr,
* 0: the page has been reserved
* -ENOENT: the input page is not a reservation
*/
-int amdgpu_vram_mgr_query_page_status(struct amdgpu_vram_mgr *mgr,
+int amdgpu_bar_mgr_query_page_status(struct amdgpu_bar_mgr *mgr,
uint64_t start)
{
- struct amdgpu_vram_reservation *rsv;
+ struct amdgpu_bar_reservation *rsv;
int ret;
mutex_lock(&mgr->lock);
@@ -371,7 +371,7 @@ int amdgpu_vram_mgr_query_page_status(struct amdgpu_vram_mgr *mgr,
}
/**
- * amdgpu_vram_mgr_new - allocate new ranges
+ * amdgpu_bar_mgr_new - allocate new ranges
*
* @man: TTM memory type manager
* @tbo: TTM BO we need this range for
@@ -380,15 +380,15 @@ int amdgpu_vram_mgr_query_page_status(struct amdgpu_vram_mgr *mgr,
*
* Allocate VRAM for the given BO.
*/
-static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
+static int amdgpu_bar_mgr_new(struct ttm_resource_manager *man,
struct ttm_buffer_object *tbo,
const struct ttm_place *place,
struct ttm_resource **res)
{
u64 vis_usage = 0, max_bytes, cur_size, min_block_size;
- struct amdgpu_vram_mgr *mgr = to_vram_mgr(man);
+ struct amdgpu_bar_mgr *mgr = to_bar_mgr(man);
struct amdgpu_device *adev = to_amdgpu_device(mgr);
- struct amdgpu_vram_mgr_resource *vres;
+ struct amdgpu_bar_mgr_resource *vres;
u64 size, remaining_size, lpfn, fpfn;
struct drm_buddy *mm = &mgr->mm;
struct drm_buddy_block *block;
@@ -512,7 +512,7 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
* Compute the original_size value by subtracting the
* last block size with (aligned size - original size)
*/
- original_size = amdgpu_vram_mgr_block_size(block) - (size - cur_size);
+ original_size = amdgpu_bar_mgr_block_size(block) - (size - cur_size);
}
mutex_lock(&mgr->lock);
@@ -529,8 +529,8 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
list_for_each_entry(block, &vres->blocks, link) {
unsigned long start;
- start = amdgpu_vram_mgr_block_start(block) +
- amdgpu_vram_mgr_block_size(block);
+ start = amdgpu_bar_mgr_block_start(block) +
+ amdgpu_bar_mgr_block_size(block);
start >>= PAGE_SHIFT;
if (start > PFN_UP(vres->base.size))
@@ -539,10 +539,10 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
start = 0;
vres->base.start = max(vres->base.start, start);
- vis_usage += amdgpu_vram_mgr_vis_size(adev, block);
+ vis_usage += amdgpu_bar_mgr_vis_size(adev, block);
}
- if (amdgpu_is_vram_mgr_blocks_contiguous(&vres->blocks))
+ if (amdgpu_is_bar_mgr_blocks_contiguous(&vres->blocks))
vres->base.placement |= TTM_PL_FLAG_CONTIGUOUS;
if (adev->gmc.xgmi.connected_to_cpu)
@@ -565,18 +565,18 @@ static int amdgpu_vram_mgr_new(struct ttm_resource_manager *man,
}
/**
- * amdgpu_vram_mgr_del - free ranges
+ * amdgpu_bar_mgr_del - free ranges
*
* @man: TTM memory type manager
* @res: TTM memory object
*
* Free the allocated VRAM again.
*/
-static void amdgpu_vram_mgr_del(struct ttm_resource_manager *man,
+static void amdgpu_bar_mgr_del(struct ttm_resource_manager *man,
struct ttm_resource *res)
{
- struct amdgpu_vram_mgr_resource *vres = to_amdgpu_vram_mgr_resource(res);
- struct amdgpu_vram_mgr *mgr = to_vram_mgr(man);
+ struct amdgpu_bar_mgr_resource *vres = to_amdgpu_bar_mgr_resource(res);
+ struct amdgpu_bar_mgr *mgr = to_bar_mgr(man);
struct amdgpu_device *adev = to_amdgpu_device(mgr);
struct drm_buddy *mm = &mgr->mm;
struct drm_buddy_block *block;
@@ -584,9 +584,9 @@ static void amdgpu_vram_mgr_del(struct ttm_resource_manager *man,
mutex_lock(&mgr->lock);
list_for_each_entry(block, &vres->blocks, link)
- vis_usage += amdgpu_vram_mgr_vis_size(adev, block);
+ vis_usage += amdgpu_bar_mgr_vis_size(adev, block);
- amdgpu_vram_mgr_do_reserve(man);
+ amdgpu_bar_mgr_do_reserve(man);
drm_buddy_free_list(mm, &vres->blocks);
mutex_unlock(&mgr->lock);
@@ -598,7 +598,7 @@ static void amdgpu_vram_mgr_del(struct ttm_resource_manager *man,
}
/**
- * amdgpu_vram_mgr_alloc_sgt - allocate and fill a sg table
+ * amdgpu_bar_mgr_alloc_sgt - allocate and fill a sg table
*
* @adev: amdgpu device pointer
* @res: TTM memory object
@@ -610,7 +610,7 @@ static void amdgpu_vram_mgr_del(struct ttm_resource_manager *man,
*
* Allocate and fill a sg table from a VRAM allocation.
*/
-int amdgpu_vram_mgr_alloc_sgt(struct amdgpu_device *adev,
+int amdgpu_bar_mgr_alloc_sgt(struct amdgpu_device *adev,
struct ttm_resource *res,
u64 offset, u64 length,
struct device *dev,
@@ -685,7 +685,7 @@ int amdgpu_vram_mgr_alloc_sgt(struct amdgpu_device *adev,
}
/**
- * amdgpu_vram_mgr_free_sgt - allocate and fill a sg table
+ * amdgpu_bar_mgr_free_sgt - allocate and fill a sg table
*
* @dev: device pointer
* @dir: data direction of resource to unmap
@@ -693,7 +693,7 @@ int amdgpu_vram_mgr_alloc_sgt(struct amdgpu_device *adev,
*
* Free a previously allocate sg table.
*/
-void amdgpu_vram_mgr_free_sgt(struct device *dev,
+void amdgpu_bar_mgr_free_sgt(struct device *dev,
enum dma_data_direction dir,
struct sg_table *sgt)
{
@@ -709,19 +709,19 @@ void amdgpu_vram_mgr_free_sgt(struct device *dev,
}
/**
- * amdgpu_vram_mgr_vis_usage - how many bytes are used in the visible part
+ * amdgpu_bar_mgr_vis_usage - how many bytes are used in the visible part
*
- * @mgr: amdgpu_vram_mgr pointer
+ * @mgr: amdgpu_bar_mgr pointer
*
* Returns how many bytes are used in the visible part of VRAM
*/
-uint64_t amdgpu_vram_mgr_vis_usage(struct amdgpu_vram_mgr *mgr)
+uint64_t amdgpu_bar_mgr_vis_usage(struct amdgpu_bar_mgr *mgr)
{
return atomic64_read(&mgr->vis_usage);
}
/**
- * amdgpu_vram_mgr_intersects - test each drm buddy block for intersection
+ * amdgpu_bar_mgr_intersects - test each drm buddy block for intersection
*
* @man: TTM memory type manager
* @res: The resource to test
@@ -730,20 +730,20 @@ uint64_t amdgpu_vram_mgr_vis_usage(struct amdgpu_vram_mgr *mgr)
*
* Test each drm buddy block for intersection for eviction decision.
*/
-static bool amdgpu_vram_mgr_intersects(struct ttm_resource_manager *man,
+static bool amdgpu_bar_mgr_intersects(struct ttm_resource_manager *man,
struct ttm_resource *res,
const struct ttm_place *place,
size_t size)
{
- struct amdgpu_vram_mgr_resource *mgr = to_amdgpu_vram_mgr_resource(res);
+ struct amdgpu_bar_mgr_resource *mgr = to_amdgpu_bar_mgr_resource(res);
struct drm_buddy_block *block;
/* Check each drm buddy block individually */
list_for_each_entry(block, &mgr->blocks, link) {
unsigned long fpfn =
- amdgpu_vram_mgr_block_start(block) >> PAGE_SHIFT;
+ amdgpu_bar_mgr_block_start(block) >> PAGE_SHIFT;
unsigned long lpfn = fpfn +
- (amdgpu_vram_mgr_block_size(block) >> PAGE_SHIFT);
+ (amdgpu_bar_mgr_block_size(block) >> PAGE_SHIFT);
if (place->fpfn < lpfn &&
(!place->lpfn || place->lpfn > fpfn))
@@ -754,7 +754,7 @@ static bool amdgpu_vram_mgr_intersects(struct ttm_resource_manager *man,
}
/**
- * amdgpu_vram_mgr_compatible - test each drm buddy block for compatibility
+ * amdgpu_bar_mgr_compatible - test each drm buddy block for compatibility
*
* @man: TTM memory type manager
* @res: The resource to test
@@ -763,20 +763,20 @@ static bool amdgpu_vram_mgr_intersects(struct ttm_resource_manager *man,
*
* Test each drm buddy block for placement compatibility.
*/
-static bool amdgpu_vram_mgr_compatible(struct ttm_resource_manager *man,
+static bool amdgpu_bar_mgr_compatible(struct ttm_resource_manager *man,
struct ttm_resource *res,
const struct ttm_place *place,
size_t size)
{
- struct amdgpu_vram_mgr_resource *mgr = to_amdgpu_vram_mgr_resource(res);
+ struct amdgpu_bar_mgr_resource *mgr = to_amdgpu_bar_mgr_resource(res);
struct drm_buddy_block *block;
/* Check each drm buddy block individually */
list_for_each_entry(block, &mgr->blocks, link) {
unsigned long fpfn =
- amdgpu_vram_mgr_block_start(block) >> PAGE_SHIFT;
+ amdgpu_bar_mgr_block_start(block) >> PAGE_SHIFT;
unsigned long lpfn = fpfn +
- (amdgpu_vram_mgr_block_size(block) >> PAGE_SHIFT);
+ (amdgpu_bar_mgr_block_size(block) >> PAGE_SHIFT);
if (fpfn < place->fpfn ||
(place->lpfn && lpfn > place->lpfn))
@@ -787,22 +787,22 @@ static bool amdgpu_vram_mgr_compatible(struct ttm_resource_manager *man,
}
/**
- * amdgpu_vram_mgr_debug - dump VRAM table
+ * amdgpu_bar_mgr_debug - dump VRAM table
*
* @man: TTM memory type manager
* @printer: DRM printer to use
*
* Dump the table content using printk.
*/
-static void amdgpu_vram_mgr_debug(struct ttm_resource_manager *man,
+static void amdgpu_bar_mgr_debug(struct ttm_resource_manager *man,
struct drm_printer *printer)
{
- struct amdgpu_vram_mgr *mgr = to_vram_mgr(man);
+ struct amdgpu_bar_mgr *mgr = to_bar_mgr(man);
struct drm_buddy *mm = &mgr->mm;
struct drm_buddy_block *block;
drm_printf(printer, " vis usage:%llu\n",
- amdgpu_vram_mgr_vis_usage(mgr));
+ amdgpu_bar_mgr_vis_usage(mgr));
mutex_lock(&mgr->lock);
drm_printf(printer, "default_page_size: %lluKiB\n",
@@ -816,31 +816,38 @@ static void amdgpu_vram_mgr_debug(struct ttm_resource_manager *man,
mutex_unlock(&mgr->lock);
}
-static const struct ttm_resource_manager_func amdgpu_vram_mgr_func = {
- .alloc = amdgpu_vram_mgr_new,
- .free = amdgpu_vram_mgr_del,
- .intersects = amdgpu_vram_mgr_intersects,
- .compatible = amdgpu_vram_mgr_compatible,
- .debug = amdgpu_vram_mgr_debug
+static const struct ttm_resource_manager_func amdgpu_bar_mgr_func = {
+ .alloc = amdgpu_bar_mgr_new,
+ .free = amdgpu_bar_mgr_del,
+ .intersects = amdgpu_bar_mgr_intersects,
+ .compatible = amdgpu_bar_mgr_compatible,
+ .debug = amdgpu_bar_mgr_debug
};
/**
- * amdgpu_vram_mgr_init - init VRAM manager and DRM MM
+ * amdgpu_bar_mgr_init - init BAR manager and DRM MM
*
* @adev: amdgpu_device pointer
+ * @domain: memory domain to initialize
*
* Allocate and initialize the VRAM manager.
*/
-int amdgpu_vram_mgr_init(struct amdgpu_device *adev)
+int amdgpu_bar_mgr_init(struct amdgpu_device *adev, u32 domain)
{
- struct amdgpu_vram_mgr *mgr = &adev->mman.vram_mgr;
- struct ttm_resource_manager *man = &mgr->manager;
+ struct amdgpu_bar_mgr *mgr;
+ struct ttm_resource_manager *man;
int err;
+ if (domain != TTM_PL_VRAM)
+ return -EINVAL;
+
+ mgr = &adev->mman.vram_mgr;
+ man = &mgr->manager;
+
ttm_resource_manager_init(man, &adev->mman.bdev,
adev->gmc.real_vram_size);
- man->func = &amdgpu_vram_mgr_func;
+ man->func = &amdgpu_bar_mgr_func;
err = drm_buddy_init(&mgr->mm, man->size, PAGE_SIZE);
if (err)
@@ -851,25 +858,32 @@ int amdgpu_vram_mgr_init(struct amdgpu_device *adev)
INIT_LIST_HEAD(&mgr->reserved_pages);
mgr->default_page_size = PAGE_SIZE;
- ttm_set_driver_manager(&adev->mman.bdev, TTM_PL_VRAM, &mgr->manager);
+ ttm_set_driver_manager(&adev->mman.bdev, domain, &mgr->manager);
ttm_resource_manager_set_used(man, true);
return 0;
}
/**
- * amdgpu_vram_mgr_fini - free and destroy VRAM manager
+ * amdgpu_bar_mgr_fini - free and destroy VRAM manager
*
* @adev: amdgpu_device pointer
+ * @domain: memory domain to destroy
*
- * Destroy and free the VRAM manager, returns -EBUSY if ranges are still
+ * Destroy and free the BAR manager, returns -EBUSY if ranges are still
* allocated inside it.
*/
-void amdgpu_vram_mgr_fini(struct amdgpu_device *adev)
+void amdgpu_bar_mgr_fini(struct amdgpu_device *adev, u32 domain)
{
- struct amdgpu_vram_mgr *mgr = &adev->mman.vram_mgr;
- struct ttm_resource_manager *man = &mgr->manager;
+ struct amdgpu_bar_mgr *mgr;
+ struct ttm_resource_manager *man;
int ret;
- struct amdgpu_vram_reservation *rsv, *temp;
+ struct amdgpu_bar_reservation *rsv, *temp;
+
+ if (domain != TTM_PL_VRAM)
+ return;
+
+ mgr = &adev->mman.vram_mgr;
+ man = &mgr->manager;
ttm_resource_manager_set_used(man, false);
@@ -889,5 +903,5 @@ void amdgpu_vram_mgr_fini(struct amdgpu_device *adev)
mutex_unlock(&mgr->lock);
ttm_resource_manager_cleanup(man);
- ttm_set_driver_manager(&adev->mman.bdev, TTM_PL_VRAM, NULL);
+ ttm_set_driver_manager(&adev->mman.bdev, domain, NULL);
}
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h
index 0e04e42cf809..241faba5ae55 100644
--- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h
+++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vram_mgr.h
@@ -21,12 +21,12 @@
*
*/
-#ifndef __AMDGPU_VRAM_MGR_H__
-#define __AMDGPU_VRAM_MGR_H__
+#ifndef __AMDGPU_BAR_MGR_H__
+#define __AMDGPU_BAR_MGR_H__
#include <drm/drm_buddy.h>
-struct amdgpu_vram_mgr {
+struct amdgpu_bar_mgr {
struct ttm_resource_manager manager;
struct drm_buddy mm;
/* protects access to buffer objects */
@@ -37,26 +37,26 @@ struct amdgpu_vram_mgr {
u64 default_page_size;
};
-struct amdgpu_vram_mgr_resource {
+struct amdgpu_bar_mgr_resource {
struct ttm_resource base;
struct list_head blocks;
unsigned long flags;
};
-static inline u64 amdgpu_vram_mgr_block_start(struct drm_buddy_block *block)
+static inline u64 amdgpu_bar_mgr_block_start(struct drm_buddy_block *block)
{
return drm_buddy_block_offset(block);
}
-static inline u64 amdgpu_vram_mgr_block_size(struct drm_buddy_block *block)
+static inline u64 amdgpu_bar_mgr_block_size(struct drm_buddy_block *block)
{
return (u64)PAGE_SIZE << drm_buddy_block_order(block);
}
-static inline struct amdgpu_vram_mgr_resource *
-to_amdgpu_vram_mgr_resource(struct ttm_resource *res)
+static inline struct amdgpu_bar_mgr_resource *
+to_amdgpu_bar_mgr_resource(struct ttm_resource *res)
{
- return container_of(res, struct amdgpu_vram_mgr_resource, base);
+ return container_of(res, struct amdgpu_bar_mgr_resource, base);
}
#endif
--
2.34.1
More information about the amd-gfx
mailing list