[PATCH 02/13] drm/amdgpu: rename vram_mgr functions to bar_mgr
Christian König
christian.koenig at amd.com
Mon Feb 6 11:20:51 UTC 2023
Am 03.02.23 um 20:08 schrieb Shashank Sharma:
> From: Alex Deucher <alexander.deucher at amd.com>
>
> Rename the VRAM manager functions so they can be resused to manage
> doorbell BAR as well.
Yeah, as said before Alex did this before we had the buddy allocator.
This doesn't makes sense any more and should probably be dropped completely.
Christian.
>
> 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
More information about the amd-gfx
mailing list