mirror of
git://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
synced 2025-09-18 22:14:16 +00:00
drm/amdgpu: keep the prefered/allowed domains in the BO
Stop copying that to the bo list entry, it doesn't change anyway. Signed-off-by: Christian König <christian.koenig@amd.com> Reviewed-by: Alex Deucher <alexander.deucher@amd.com> Signed-off-by: Alex Deucher <alexander.deucher@amd.com>
This commit is contained in:
parent
636ce25c30
commit
1ea863fd73
6 changed files with 29 additions and 34 deletions
|
@ -484,8 +484,6 @@ struct amdgpu_bo_list_entry {
|
||||||
struct amdgpu_bo *robj;
|
struct amdgpu_bo *robj;
|
||||||
struct ttm_validate_buffer tv;
|
struct ttm_validate_buffer tv;
|
||||||
struct amdgpu_bo_va *bo_va;
|
struct amdgpu_bo_va *bo_va;
|
||||||
unsigned prefered_domains;
|
|
||||||
unsigned allowed_domains;
|
|
||||||
uint32_t priority;
|
uint32_t priority;
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -522,7 +520,8 @@ struct amdgpu_bo {
|
||||||
/* Protected by gem.mutex */
|
/* Protected by gem.mutex */
|
||||||
struct list_head list;
|
struct list_head list;
|
||||||
/* Protected by tbo.reserved */
|
/* Protected by tbo.reserved */
|
||||||
u32 initial_domain;
|
u32 prefered_domains;
|
||||||
|
u32 allowed_domains;
|
||||||
struct ttm_place placements[AMDGPU_GEM_DOMAIN_MAX + 1];
|
struct ttm_place placements[AMDGPU_GEM_DOMAIN_MAX + 1];
|
||||||
struct ttm_placement placement;
|
struct ttm_placement placement;
|
||||||
struct ttm_buffer_object tbo;
|
struct ttm_buffer_object tbo;
|
||||||
|
|
|
@ -111,23 +111,16 @@ static int amdgpu_bo_list_set(struct amdgpu_device *adev,
|
||||||
drm_gem_object_unreference_unlocked(gobj);
|
drm_gem_object_unreference_unlocked(gobj);
|
||||||
entry->priority = min(info[i].bo_priority,
|
entry->priority = min(info[i].bo_priority,
|
||||||
AMDGPU_BO_LIST_MAX_PRIORITY);
|
AMDGPU_BO_LIST_MAX_PRIORITY);
|
||||||
entry->prefered_domains = entry->robj->initial_domain;
|
if (amdgpu_ttm_tt_has_userptr(entry->robj->tbo.ttm))
|
||||||
entry->allowed_domains = entry->prefered_domains;
|
|
||||||
if (entry->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM)
|
|
||||||
entry->allowed_domains |= AMDGPU_GEM_DOMAIN_GTT;
|
|
||||||
if (amdgpu_ttm_tt_has_userptr(entry->robj->tbo.ttm)) {
|
|
||||||
has_userptr = true;
|
has_userptr = true;
|
||||||
entry->prefered_domains = AMDGPU_GEM_DOMAIN_GTT;
|
|
||||||
entry->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
|
|
||||||
}
|
|
||||||
entry->tv.bo = &entry->robj->tbo;
|
entry->tv.bo = &entry->robj->tbo;
|
||||||
entry->tv.shared = true;
|
entry->tv.shared = true;
|
||||||
|
|
||||||
if (entry->prefered_domains == AMDGPU_GEM_DOMAIN_GDS)
|
if (entry->robj->prefered_domains == AMDGPU_GEM_DOMAIN_GDS)
|
||||||
gds_obj = entry->robj;
|
gds_obj = entry->robj;
|
||||||
if (entry->prefered_domains == AMDGPU_GEM_DOMAIN_GWS)
|
if (entry->robj->prefered_domains == AMDGPU_GEM_DOMAIN_GWS)
|
||||||
gws_obj = entry->robj;
|
gws_obj = entry->robj;
|
||||||
if (entry->prefered_domains == AMDGPU_GEM_DOMAIN_OA)
|
if (entry->robj->prefered_domains == AMDGPU_GEM_DOMAIN_OA)
|
||||||
oa_obj = entry->robj;
|
oa_obj = entry->robj;
|
||||||
|
|
||||||
trace_amdgpu_bo_list_set(list, entry->robj);
|
trace_amdgpu_bo_list_set(list, entry->robj);
|
||||||
|
|
|
@ -107,8 +107,6 @@ static int amdgpu_cs_user_fence_chunk(struct amdgpu_cs_parser *p,
|
||||||
}
|
}
|
||||||
|
|
||||||
p->uf_entry.robj = amdgpu_bo_ref(p->uf.bo);
|
p->uf_entry.robj = amdgpu_bo_ref(p->uf.bo);
|
||||||
p->uf_entry.prefered_domains = AMDGPU_GEM_DOMAIN_GTT;
|
|
||||||
p->uf_entry.allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
|
|
||||||
p->uf_entry.priority = 0;
|
p->uf_entry.priority = 0;
|
||||||
p->uf_entry.tv.bo = &p->uf_entry.robj->tbo;
|
p->uf_entry.tv.bo = &p->uf_entry.robj->tbo;
|
||||||
p->uf_entry.tv.shared = true;
|
p->uf_entry.tv.shared = true;
|
||||||
|
@ -315,9 +313,9 @@ int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p,
|
||||||
* completely.
|
* completely.
|
||||||
*/
|
*/
|
||||||
if (p->bytes_moved <= p->bytes_moved_threshold)
|
if (p->bytes_moved <= p->bytes_moved_threshold)
|
||||||
domain = lobj->prefered_domains;
|
domain = bo->prefered_domains;
|
||||||
else
|
else
|
||||||
domain = lobj->allowed_domains;
|
domain = bo->allowed_domains;
|
||||||
|
|
||||||
retry:
|
retry:
|
||||||
amdgpu_ttm_placement_from_domain(bo, domain);
|
amdgpu_ttm_placement_from_domain(bo, domain);
|
||||||
|
@ -327,8 +325,8 @@ int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p,
|
||||||
initial_bytes_moved;
|
initial_bytes_moved;
|
||||||
|
|
||||||
if (unlikely(r)) {
|
if (unlikely(r)) {
|
||||||
if (r != -ERESTARTSYS && domain != lobj->allowed_domains) {
|
if (r != -ERESTARTSYS && domain != bo->allowed_domains) {
|
||||||
domain = lobj->allowed_domains;
|
domain = bo->allowed_domains;
|
||||||
goto retry;
|
goto retry;
|
||||||
}
|
}
|
||||||
return r;
|
return r;
|
||||||
|
|
|
@ -252,6 +252,8 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data,
|
||||||
goto handle_lockup;
|
goto handle_lockup;
|
||||||
|
|
||||||
bo = gem_to_amdgpu_bo(gobj);
|
bo = gem_to_amdgpu_bo(gobj);
|
||||||
|
bo->prefered_domains = AMDGPU_GEM_DOMAIN_GTT;
|
||||||
|
bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT;
|
||||||
r = amdgpu_ttm_tt_set_userptr(bo->tbo.ttm, args->addr, args->flags);
|
r = amdgpu_ttm_tt_set_userptr(bo->tbo.ttm, args->addr, args->flags);
|
||||||
if (r)
|
if (r)
|
||||||
goto release_object;
|
goto release_object;
|
||||||
|
@ -628,7 +630,7 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data,
|
||||||
|
|
||||||
info.bo_size = robj->gem_base.size;
|
info.bo_size = robj->gem_base.size;
|
||||||
info.alignment = robj->tbo.mem.page_alignment << PAGE_SHIFT;
|
info.alignment = robj->tbo.mem.page_alignment << PAGE_SHIFT;
|
||||||
info.domains = robj->initial_domain;
|
info.domains = robj->prefered_domains;
|
||||||
info.domain_flags = robj->flags;
|
info.domain_flags = robj->flags;
|
||||||
amdgpu_bo_unreserve(robj);
|
amdgpu_bo_unreserve(robj);
|
||||||
if (copy_to_user(out, &info, sizeof(info)))
|
if (copy_to_user(out, &info, sizeof(info)))
|
||||||
|
@ -641,9 +643,13 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data,
|
||||||
amdgpu_bo_unreserve(robj);
|
amdgpu_bo_unreserve(robj);
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
robj->initial_domain = args->value & (AMDGPU_GEM_DOMAIN_VRAM |
|
robj->prefered_domains = args->value & (AMDGPU_GEM_DOMAIN_VRAM |
|
||||||
AMDGPU_GEM_DOMAIN_GTT |
|
AMDGPU_GEM_DOMAIN_GTT |
|
||||||
AMDGPU_GEM_DOMAIN_CPU);
|
AMDGPU_GEM_DOMAIN_CPU);
|
||||||
|
robj->allowed_domains = robj->prefered_domains;
|
||||||
|
if (robj->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM)
|
||||||
|
robj->allowed_domains |= AMDGPU_GEM_DOMAIN_GTT;
|
||||||
|
|
||||||
amdgpu_bo_unreserve(robj);
|
amdgpu_bo_unreserve(robj);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
|
|
|
@ -254,12 +254,15 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev,
|
||||||
bo->adev = adev;
|
bo->adev = adev;
|
||||||
INIT_LIST_HEAD(&bo->list);
|
INIT_LIST_HEAD(&bo->list);
|
||||||
INIT_LIST_HEAD(&bo->va);
|
INIT_LIST_HEAD(&bo->va);
|
||||||
bo->initial_domain = domain & (AMDGPU_GEM_DOMAIN_VRAM |
|
bo->prefered_domains = domain & (AMDGPU_GEM_DOMAIN_VRAM |
|
||||||
AMDGPU_GEM_DOMAIN_GTT |
|
AMDGPU_GEM_DOMAIN_GTT |
|
||||||
AMDGPU_GEM_DOMAIN_CPU |
|
AMDGPU_GEM_DOMAIN_CPU |
|
||||||
AMDGPU_GEM_DOMAIN_GDS |
|
AMDGPU_GEM_DOMAIN_GDS |
|
||||||
AMDGPU_GEM_DOMAIN_GWS |
|
AMDGPU_GEM_DOMAIN_GWS |
|
||||||
AMDGPU_GEM_DOMAIN_OA);
|
AMDGPU_GEM_DOMAIN_OA);
|
||||||
|
bo->allowed_domains = bo->prefered_domains;
|
||||||
|
if (!kernel && bo->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM)
|
||||||
|
bo->allowed_domains |= AMDGPU_GEM_DOMAIN_GTT;
|
||||||
|
|
||||||
bo->flags = flags;
|
bo->flags = flags;
|
||||||
|
|
||||||
|
|
|
@ -89,8 +89,6 @@ void amdgpu_vm_get_pd_bo(struct amdgpu_vm *vm,
|
||||||
struct amdgpu_bo_list_entry *entry)
|
struct amdgpu_bo_list_entry *entry)
|
||||||
{
|
{
|
||||||
entry->robj = vm->page_directory;
|
entry->robj = vm->page_directory;
|
||||||
entry->prefered_domains = AMDGPU_GEM_DOMAIN_VRAM;
|
|
||||||
entry->allowed_domains = AMDGPU_GEM_DOMAIN_VRAM;
|
|
||||||
entry->priority = 0;
|
entry->priority = 0;
|
||||||
entry->tv.bo = &vm->page_directory->tbo;
|
entry->tv.bo = &vm->page_directory->tbo;
|
||||||
entry->tv.shared = true;
|
entry->tv.shared = true;
|
||||||
|
@ -1124,8 +1122,6 @@ int amdgpu_vm_bo_map(struct amdgpu_device *adev,
|
||||||
}
|
}
|
||||||
|
|
||||||
entry->robj = pt;
|
entry->robj = pt;
|
||||||
entry->prefered_domains = AMDGPU_GEM_DOMAIN_VRAM;
|
|
||||||
entry->allowed_domains = AMDGPU_GEM_DOMAIN_VRAM;
|
|
||||||
entry->priority = 0;
|
entry->priority = 0;
|
||||||
entry->tv.bo = &entry->robj->tbo;
|
entry->tv.bo = &entry->robj->tbo;
|
||||||
entry->tv.shared = true;
|
entry->tv.shared = true;
|
||||||
|
|
Loading…
Add table
Reference in a new issue