aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
authorChristian König <christian.koenig@amd.com>2015-12-18 16:13:12 -0500
committerAlex Deucher <alexander.deucher@amd.com>2016-02-10 14:16:47 -0500
commit1ea863fd736eed8217a0b7bc5d0bd0de6b267b80 (patch)
tree1f983a945fd5971de31eeabd51af615b4bbfad39 /drivers
parent636ce25c30010a8f393f5a1e67d5d4b7b66739e7 (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.h5
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_bo_list.c15
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_cs.c10
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_gem.c14
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_object.c15
-rw-r--r--drivers/gpu/drm/amd/amdgpu/amdgpu_vm.c4
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;