drm/amdgpu: Add memory partition mem_id to amdgpu_bo
Add mem_id_plus1 parameter to amdgpu_gem_object_create and pass it to amdgpu_bo_create. For dGPU mode allocation, mem_id is used by VRAM manager to get the memory partition fpfn, lpfn from xcp manager. For APU native mode allocation, mem_id is used to get NUMA node id from xcp manager, then pass to TTM as numa pool id to alloc memory from the specific NUMA node. mem_id -1 means for entire VRAM or any NUMA nodes. Signed-off-by: Philip Yang <Philip.Yang@amd.com> Reviewed-by: Felix Kuehling <Felix.Kuehling@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
4c6ce75fdd
commit
f24e924b7e
|
@ -290,7 +290,7 @@ create_dmamap_sg_bo(struct amdgpu_device *adev,
|
|||
|
||||
ret = amdgpu_gem_object_create(adev, mem->bo->tbo.base.size, 1,
|
||||
AMDGPU_GEM_DOMAIN_CPU, AMDGPU_GEM_CREATE_PREEMPTIBLE | flags,
|
||||
ttm_bo_type_sg, mem->bo->tbo.base.resv, &gem_obj);
|
||||
ttm_bo_type_sg, mem->bo->tbo.base.resv, &gem_obj, 0);
|
||||
|
||||
amdgpu_bo_unreserve(mem->bo);
|
||||
|
||||
|
@ -1721,7 +1721,7 @@ int amdgpu_amdkfd_gpuvm_alloc_memory_of_gpu(
|
|||
va, (*mem)->aql_queue ? size << 1 : size, domain_string(alloc_domain));
|
||||
|
||||
ret = amdgpu_gem_object_create(adev, aligned_size, 1, alloc_domain, alloc_flags,
|
||||
bo_type, NULL, &gobj);
|
||||
bo_type, NULL, &gobj, 0);
|
||||
if (ret) {
|
||||
pr_debug("Failed to create BO on domain %s. ret %d\n",
|
||||
domain_string(alloc_domain), ret);
|
||||
|
|
|
@ -336,7 +336,7 @@ amdgpu_dma_buf_create_obj(struct drm_device *dev, struct dma_buf *dma_buf)
|
|||
|
||||
ret = amdgpu_gem_object_create(adev, dma_buf->size, PAGE_SIZE,
|
||||
AMDGPU_GEM_DOMAIN_CPU, flags,
|
||||
ttm_bo_type_sg, resv, &gobj);
|
||||
ttm_bo_type_sg, resv, &gobj, 0);
|
||||
if (ret)
|
||||
goto error;
|
||||
|
||||
|
|
|
@ -98,7 +98,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
|
|||
int alignment, u32 initial_domain,
|
||||
u64 flags, enum ttm_bo_type type,
|
||||
struct dma_resv *resv,
|
||||
struct drm_gem_object **obj)
|
||||
struct drm_gem_object **obj, int8_t mem_id_plus1)
|
||||
{
|
||||
struct amdgpu_bo *bo;
|
||||
struct amdgpu_bo_user *ubo;
|
||||
|
@ -116,6 +116,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
|
|||
bp.flags = flags;
|
||||
bp.domain = initial_domain;
|
||||
bp.bo_ptr_size = sizeof(struct amdgpu_bo);
|
||||
bp.mem_id_plus1 = mem_id_plus1;
|
||||
|
||||
r = amdgpu_bo_create_user(adev, &bp, &ubo);
|
||||
if (r)
|
||||
|
@ -336,7 +337,7 @@ int amdgpu_gem_create_ioctl(struct drm_device *dev, void *data,
|
|||
retry:
|
||||
r = amdgpu_gem_object_create(adev, size, args->in.alignment,
|
||||
initial_domain,
|
||||
flags, ttm_bo_type_device, resv, &gobj);
|
||||
flags, ttm_bo_type_device, resv, &gobj, 0);
|
||||
if (r && r != -ERESTARTSYS) {
|
||||
if (flags & AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED) {
|
||||
flags &= ~AMDGPU_GEM_CREATE_CPU_ACCESS_REQUIRED;
|
||||
|
@ -405,7 +406,7 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data,
|
|||
|
||||
/* create a gem object to contain this object in */
|
||||
r = amdgpu_gem_object_create(adev, args->size, 0, AMDGPU_GEM_DOMAIN_CPU,
|
||||
0, ttm_bo_type_device, NULL, &gobj);
|
||||
0, ttm_bo_type_device, NULL, &gobj, 0);
|
||||
if (r)
|
||||
return r;
|
||||
|
||||
|
@ -931,7 +932,7 @@ int amdgpu_mode_dumb_create(struct drm_file *file_priv,
|
|||
domain = amdgpu_bo_get_preferred_domain(adev,
|
||||
amdgpu_display_supported_domains(adev, flags));
|
||||
r = amdgpu_gem_object_create(adev, args->size, 0, domain, flags,
|
||||
ttm_bo_type_device, NULL, &gobj);
|
||||
ttm_bo_type_device, NULL, &gobj, 0);
|
||||
if (r)
|
||||
return -ENOMEM;
|
||||
|
||||
|
|
|
@ -43,8 +43,7 @@ int amdgpu_gem_object_create(struct amdgpu_device *adev, unsigned long size,
|
|||
int alignment, u32 initial_domain,
|
||||
u64 flags, enum ttm_bo_type type,
|
||||
struct dma_resv *resv,
|
||||
struct drm_gem_object **obj);
|
||||
|
||||
struct drm_gem_object **obj, int8_t mem_id_plus1);
|
||||
int amdgpu_mode_dumb_create(struct drm_file *file_priv,
|
||||
struct drm_device *dev,
|
||||
struct drm_mode_create_dumb *args);
|
||||
|
|
|
@ -574,6 +574,9 @@ int amdgpu_bo_create(struct amdgpu_device *adev,
|
|||
|
||||
bo->flags = bp->flags;
|
||||
|
||||
/* bo->mem_id -1 means any partition */
|
||||
bo->mem_id = bp->mem_id_plus1 - 1;
|
||||
|
||||
if (!amdgpu_bo_support_uswc(bo->flags))
|
||||
bo->flags &= ~AMDGPU_GEM_CREATE_CPU_GTT_USWC;
|
||||
|
||||
|
|
|
@ -56,6 +56,8 @@ struct amdgpu_bo_param {
|
|||
bool no_wait_gpu;
|
||||
struct dma_resv *resv;
|
||||
void (*destroy)(struct ttm_buffer_object *bo);
|
||||
/* memory partition number plus 1, 0 means any partition */
|
||||
int8_t mem_id_plus1;
|
||||
};
|
||||
|
||||
/* bo virtual addresses in a vm */
|
||||
|
@ -108,6 +110,9 @@ struct amdgpu_bo {
|
|||
struct mmu_interval_notifier notifier;
|
||||
#endif
|
||||
struct kgd_mem *kfd_bo;
|
||||
|
||||
/* memory partition number, -1 means any partition */
|
||||
int8_t mem_id;
|
||||
};
|
||||
|
||||
struct amdgpu_bo_user {
|
||||
|
|
Loading…
Reference in New Issue