diff options
author | Christian König <christian.koenig@amd.com> | 2015-12-18 16:13:12 -0500 |
---|---|---|
committer | Alex Deucher <alexander.deucher@amd.com> | 2016-02-10 14:16:47 -0500 |
commit | 1ea863fd736eed8217a0b7bc5d0bd0de6b267b80 (patch) | |
tree | 1f983a945fd5971de31eeabd51af615b4bbfad39 /drivers | |
parent | 636ce25c30010a8f393f5a1e67d5d4b7b66739e7 (diff) |
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>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu.h | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | 10 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | 14 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | 15 | ||||
-rw-r--r-- | drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | 4 |
6 files changed, 29 insertions, 34 deletions
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu.h b/drivers/gpu/drm/amd/amdgpu/amdgpu.h index b7056649062a..7410d5bd37b9 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu.h +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu.h | |||
@@ -484,8 +484,6 @@ struct amdgpu_bo_list_entry { | |||
484 | struct amdgpu_bo *robj; | 484 | struct amdgpu_bo *robj; |
485 | struct ttm_validate_buffer tv; | 485 | struct ttm_validate_buffer tv; |
486 | struct amdgpu_bo_va *bo_va; | 486 | struct amdgpu_bo_va *bo_va; |
487 | unsigned prefered_domains; | ||
488 | unsigned allowed_domains; | ||
489 | uint32_t priority; | 487 | uint32_t priority; |
490 | }; | 488 | }; |
491 | 489 | ||
@@ -522,7 +520,8 @@ struct amdgpu_bo { | |||
522 | /* Protected by gem.mutex */ | 520 | /* Protected by gem.mutex */ |
523 | struct list_head list; | 521 | struct list_head list; |
524 | /* Protected by tbo.reserved */ | 522 | /* Protected by tbo.reserved */ |
525 | u32 initial_domain; | 523 | u32 prefered_domains; |
524 | u32 allowed_domains; | ||
526 | struct ttm_place placements[AMDGPU_GEM_DOMAIN_MAX + 1]; | 525 | struct ttm_place placements[AMDGPU_GEM_DOMAIN_MAX + 1]; |
527 | struct ttm_placement placement; | 526 | struct ttm_placement placement; |
528 | struct ttm_buffer_object tbo; | 527 | struct ttm_buffer_object tbo; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c index 9da4bd02cec3..c4341dd4b6a4 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c | |||
@@ -111,23 +111,16 @@ static int amdgpu_bo_list_set(struct amdgpu_device *adev, | |||
111 | drm_gem_object_unreference_unlocked(gobj); | 111 | drm_gem_object_unreference_unlocked(gobj); |
112 | entry->priority = min(info[i].bo_priority, | 112 | entry->priority = min(info[i].bo_priority, |
113 | AMDGPU_BO_LIST_MAX_PRIORITY); | 113 | AMDGPU_BO_LIST_MAX_PRIORITY); |
114 | entry->prefered_domains = entry->robj->initial_domain; | 114 | if (amdgpu_ttm_tt_has_userptr(entry->robj->tbo.ttm)) |
115 | entry->allowed_domains = entry->prefered_domains; | ||
116 | if (entry->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM) | ||
117 | entry->allowed_domains |= AMDGPU_GEM_DOMAIN_GTT; | ||
118 | if (amdgpu_ttm_tt_has_userptr(entry->robj->tbo.ttm)) { | ||
119 | has_userptr = true; | 115 | has_userptr = true; |
120 | entry->prefered_domains = AMDGPU_GEM_DOMAIN_GTT; | ||
121 | entry->allowed_domains = AMDGPU_GEM_DOMAIN_GTT; | ||
122 | } | ||
123 | entry->tv.bo = &entry->robj->tbo; | 116 | entry->tv.bo = &entry->robj->tbo; |
124 | entry->tv.shared = true; | 117 | entry->tv.shared = true; |
125 | 118 | ||
126 | if (entry->prefered_domains == AMDGPU_GEM_DOMAIN_GDS) | 119 | if (entry->robj->prefered_domains == AMDGPU_GEM_DOMAIN_GDS) |
127 | gds_obj = entry->robj; | 120 | gds_obj = entry->robj; |
128 | if (entry->prefered_domains == AMDGPU_GEM_DOMAIN_GWS) | 121 | if (entry->robj->prefered_domains == AMDGPU_GEM_DOMAIN_GWS) |
129 | gws_obj = entry->robj; | 122 | gws_obj = entry->robj; |
130 | if (entry->prefered_domains == AMDGPU_GEM_DOMAIN_OA) | 123 | if (entry->robj->prefered_domains == AMDGPU_GEM_DOMAIN_OA) |
131 | oa_obj = entry->robj; | 124 | oa_obj = entry->robj; |
132 | 125 | ||
133 | trace_amdgpu_bo_list_set(list, entry->robj); | 126 | trace_amdgpu_bo_list_set(list, entry->robj); |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c index d249e9e0a4ea..a610465c5e0b 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c | |||
@@ -107,8 +107,6 @@ static int amdgpu_cs_user_fence_chunk(struct amdgpu_cs_parser *p, | |||
107 | } | 107 | } |
108 | 108 | ||
109 | p->uf_entry.robj = amdgpu_bo_ref(p->uf.bo); | 109 | p->uf_entry.robj = amdgpu_bo_ref(p->uf.bo); |
110 | p->uf_entry.prefered_domains = AMDGPU_GEM_DOMAIN_GTT; | ||
111 | p->uf_entry.allowed_domains = AMDGPU_GEM_DOMAIN_GTT; | ||
112 | p->uf_entry.priority = 0; | 110 | p->uf_entry.priority = 0; |
113 | p->uf_entry.tv.bo = &p->uf_entry.robj->tbo; | 111 | p->uf_entry.tv.bo = &p->uf_entry.robj->tbo; |
114 | p->uf_entry.tv.shared = true; | 112 | p->uf_entry.tv.shared = true; |
@@ -315,9 +313,9 @@ int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p, | |||
315 | * completely. | 313 | * completely. |
316 | */ | 314 | */ |
317 | if (p->bytes_moved <= p->bytes_moved_threshold) | 315 | if (p->bytes_moved <= p->bytes_moved_threshold) |
318 | domain = lobj->prefered_domains; | 316 | domain = bo->prefered_domains; |
319 | else | 317 | else |
320 | domain = lobj->allowed_domains; | 318 | domain = bo->allowed_domains; |
321 | 319 | ||
322 | retry: | 320 | retry: |
323 | amdgpu_ttm_placement_from_domain(bo, domain); | 321 | amdgpu_ttm_placement_from_domain(bo, domain); |
@@ -327,8 +325,8 @@ int amdgpu_cs_list_validate(struct amdgpu_cs_parser *p, | |||
327 | initial_bytes_moved; | 325 | initial_bytes_moved; |
328 | 326 | ||
329 | if (unlikely(r)) { | 327 | if (unlikely(r)) { |
330 | if (r != -ERESTARTSYS && domain != lobj->allowed_domains) { | 328 | if (r != -ERESTARTSYS && domain != bo->allowed_domains) { |
331 | domain = lobj->allowed_domains; | 329 | domain = bo->allowed_domains; |
332 | goto retry; | 330 | goto retry; |
333 | } | 331 | } |
334 | return r; | 332 | return r; |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c index 7380f782cd14..84e850f81f39 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c | |||
@@ -252,6 +252,8 @@ int amdgpu_gem_userptr_ioctl(struct drm_device *dev, void *data, | |||
252 | goto handle_lockup; | 252 | goto handle_lockup; |
253 | 253 | ||
254 | bo = gem_to_amdgpu_bo(gobj); | 254 | bo = gem_to_amdgpu_bo(gobj); |
255 | bo->prefered_domains = AMDGPU_GEM_DOMAIN_GTT; | ||
256 | bo->allowed_domains = AMDGPU_GEM_DOMAIN_GTT; | ||
255 | r = amdgpu_ttm_tt_set_userptr(bo->tbo.ttm, args->addr, args->flags); | 257 | r = amdgpu_ttm_tt_set_userptr(bo->tbo.ttm, args->addr, args->flags); |
256 | if (r) | 258 | if (r) |
257 | goto release_object; | 259 | goto release_object; |
@@ -628,7 +630,7 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data, | |||
628 | 630 | ||
629 | info.bo_size = robj->gem_base.size; | 631 | info.bo_size = robj->gem_base.size; |
630 | info.alignment = robj->tbo.mem.page_alignment << PAGE_SHIFT; | 632 | info.alignment = robj->tbo.mem.page_alignment << PAGE_SHIFT; |
631 | info.domains = robj->initial_domain; | 633 | info.domains = robj->prefered_domains; |
632 | info.domain_flags = robj->flags; | 634 | info.domain_flags = robj->flags; |
633 | amdgpu_bo_unreserve(robj); | 635 | amdgpu_bo_unreserve(robj); |
634 | if (copy_to_user(out, &info, sizeof(info))) | 636 | if (copy_to_user(out, &info, sizeof(info))) |
@@ -641,9 +643,13 @@ int amdgpu_gem_op_ioctl(struct drm_device *dev, void *data, | |||
641 | amdgpu_bo_unreserve(robj); | 643 | amdgpu_bo_unreserve(robj); |
642 | break; | 644 | break; |
643 | } | 645 | } |
644 | robj->initial_domain = args->value & (AMDGPU_GEM_DOMAIN_VRAM | | 646 | robj->prefered_domains = args->value & (AMDGPU_GEM_DOMAIN_VRAM | |
645 | AMDGPU_GEM_DOMAIN_GTT | | 647 | AMDGPU_GEM_DOMAIN_GTT | |
646 | AMDGPU_GEM_DOMAIN_CPU); | 648 | AMDGPU_GEM_DOMAIN_CPU); |
649 | robj->allowed_domains = robj->prefered_domains; | ||
650 | if (robj->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM) | ||
651 | robj->allowed_domains |= AMDGPU_GEM_DOMAIN_GTT; | ||
652 | |||
647 | amdgpu_bo_unreserve(robj); | 653 | amdgpu_bo_unreserve(robj); |
648 | break; | 654 | break; |
649 | default: | 655 | default: |
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c index b8fbbd7699e4..8c1fc1f56342 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_object.c | |||
@@ -254,12 +254,15 @@ int amdgpu_bo_create_restricted(struct amdgpu_device *adev, | |||
254 | bo->adev = adev; | 254 | bo->adev = adev; |
255 | INIT_LIST_HEAD(&bo->list); | 255 | INIT_LIST_HEAD(&bo->list); |
256 | INIT_LIST_HEAD(&bo->va); | 256 | INIT_LIST_HEAD(&bo->va); |
257 | bo->initial_domain = domain & (AMDGPU_GEM_DOMAIN_VRAM | | 257 | bo->prefered_domains = domain & (AMDGPU_GEM_DOMAIN_VRAM | |
258 | AMDGPU_GEM_DOMAIN_GTT | | 258 | AMDGPU_GEM_DOMAIN_GTT | |
259 | AMDGPU_GEM_DOMAIN_CPU | | 259 | AMDGPU_GEM_DOMAIN_CPU | |
260 | AMDGPU_GEM_DOMAIN_GDS | | 260 | AMDGPU_GEM_DOMAIN_GDS | |
261 | AMDGPU_GEM_DOMAIN_GWS | | 261 | AMDGPU_GEM_DOMAIN_GWS | |
262 | AMDGPU_GEM_DOMAIN_OA); | 262 | AMDGPU_GEM_DOMAIN_OA); |
263 | bo->allowed_domains = bo->prefered_domains; | ||
264 | if (!kernel && bo->allowed_domains == AMDGPU_GEM_DOMAIN_VRAM) | ||
265 | bo->allowed_domains |= AMDGPU_GEM_DOMAIN_GTT; | ||
263 | 266 | ||
264 | bo->flags = flags; | 267 | bo->flags = flags; |
265 | 268 | ||
diff --git a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c index 9599f7559b3d..7e6414cffbef 100644 --- a/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c +++ b/drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c | |||
@@ -89,8 +89,6 @@ void amdgpu_vm_get_pd_bo(struct amdgpu_vm *vm, | |||
89 | struct amdgpu_bo_list_entry *entry) | 89 | struct amdgpu_bo_list_entry *entry) |
90 | { | 90 | { |
91 | entry->robj = vm->page_directory; | 91 | entry->robj = vm->page_directory; |
92 | entry->prefered_domains = AMDGPU_GEM_DOMAIN_VRAM; | ||
93 | entry->allowed_domains = AMDGPU_GEM_DOMAIN_VRAM; | ||
94 | entry->priority = 0; | 92 | entry->priority = 0; |
95 | entry->tv.bo = &vm->page_directory->tbo; | 93 | entry->tv.bo = &vm->page_directory->tbo; |
96 | entry->tv.shared = true; | 94 | entry->tv.shared = true; |
@@ -1124,8 +1122,6 @@ int amdgpu_vm_bo_map(struct amdgpu_device *adev, | |||
1124 | } | 1122 | } |
1125 | 1123 | ||
1126 | entry->robj = pt; | 1124 | entry->robj = pt; |
1127 | entry->prefered_domains = AMDGPU_GEM_DOMAIN_VRAM; | ||
1128 | entry->allowed_domains = AMDGPU_GEM_DOMAIN_VRAM; | ||
1129 | entry->priority = 0; | 1125 | entry->priority = 0; |
1130 | entry->tv.bo = &entry->robj->tbo; | 1126 | entry->tv.bo = &entry->robj->tbo; |
1131 | entry->tv.shared = true; | 1127 | entry->tv.shared = true; |