aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJohn Harrison <John.C.Harrison@Intel.com>2014-11-24 13:49:43 -0500
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-12-03 03:35:23 -0500
commit41c5241555d762810f975d5d9d70143aa93834cd (patch)
treef662d57a810fe52ed2fc47ebd5fe82fbd43e1e67
parent1b5a433a4dd967b125131da42b89b5cc0d5b1f57 (diff)
drm/i915: Remove the now redundant 'obj->ring'
The ring member of the object structure was always updated with the last_read_seqno member. Thus with the conversion to last_read_req, obj->ring is now a direct copy of obj->last_read_req->ring. This makes it somewhat redundant and potentially misleading (especially as there was no comment to explain its purpose). This checkin removes the redundant field. Many uses were simply testing for non-null to see if the object is active on the GPU. Some of these have been converted to check 'obj->active' instead. Others (where the last_read_req is about to be used anyway) have been changed to check obj->last_read_req. The rest simply pull the ring out from the request structure and proceed as before. For: VIZ-4377 Signed-off-by: John Harrison <John.C.Harrison@Intel.com> Reviewed-by: Thomas Daniel <Thomas.Daniel@intel.com> Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
-rw-r--r--drivers/gpu/drm/i915/i915_debugfs.c9
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h2
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c32
-rw-r--r--drivers/gpu/drm/i915/i915_gem_context.c3
-rw-r--r--drivers/gpu/drm/i915/i915_gpu_error.c3
-rw-r--r--drivers/gpu/drm/i915/intel_display.c7
6 files changed, 33 insertions, 23 deletions
diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
index a76aa31dd1cf..b2dca46989e0 100644
--- a/drivers/gpu/drm/i915/i915_debugfs.c
+++ b/drivers/gpu/drm/i915/i915_debugfs.c
@@ -166,8 +166,9 @@ describe_obj(struct seq_file *m, struct drm_i915_gem_object *obj)
166 *t = '\0'; 166 *t = '\0';
167 seq_printf(m, " (%s mappable)", s); 167 seq_printf(m, " (%s mappable)", s);
168 } 168 }
169 if (obj->ring != NULL) 169 if (obj->last_read_req != NULL)
170 seq_printf(m, " (%s)", obj->ring->name); 170 seq_printf(m, " (%s)",
171 i915_gem_request_get_ring(obj->last_read_req)->name);
171 if (obj->frontbuffer_bits) 172 if (obj->frontbuffer_bits)
172 seq_printf(m, " (frontbuffer: 0x%03x)", obj->frontbuffer_bits); 173 seq_printf(m, " (frontbuffer: 0x%03x)", obj->frontbuffer_bits);
173} 174}
@@ -334,7 +335,7 @@ static int per_file_stats(int id, void *ptr, void *data)
334 if (ppgtt->file_priv != stats->file_priv) 335 if (ppgtt->file_priv != stats->file_priv)
335 continue; 336 continue;
336 337
337 if (obj->ring) /* XXX per-vma statistic */ 338 if (obj->active) /* XXX per-vma statistic */
338 stats->active += obj->base.size; 339 stats->active += obj->base.size;
339 else 340 else
340 stats->inactive += obj->base.size; 341 stats->inactive += obj->base.size;
@@ -344,7 +345,7 @@ static int per_file_stats(int id, void *ptr, void *data)
344 } else { 345 } else {
345 if (i915_gem_obj_ggtt_bound(obj)) { 346 if (i915_gem_obj_ggtt_bound(obj)) {
346 stats->global += obj->base.size; 347 stats->global += obj->base.size;
347 if (obj->ring) 348 if (obj->active)
348 stats->active += obj->base.size; 349 stats->active += obj->base.size;
349 else 350 else
350 stats->inactive += obj->base.size; 351 stats->inactive += obj->base.size;
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 04fb96e67093..97804a3be67c 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1941,8 +1941,6 @@ struct drm_i915_gem_object {
1941 void *dma_buf_vmapping; 1941 void *dma_buf_vmapping;
1942 int vmapping_count; 1942 int vmapping_count;
1943 1943
1944 struct intel_engine_cs *ring;
1945
1946 /** Breadcrumb of last rendering to the buffer. */ 1944 /** Breadcrumb of last rendering to the buffer. */
1947 struct drm_i915_gem_request *last_read_req; 1945 struct drm_i915_gem_request *last_read_req;
1948 struct drm_i915_gem_request *last_write_req; 1946 struct drm_i915_gem_request *last_write_req;
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index 16a8445403a7..b9222a76e52f 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2263,14 +2263,18 @@ static void
2263i915_gem_object_move_to_active(struct drm_i915_gem_object *obj, 2263i915_gem_object_move_to_active(struct drm_i915_gem_object *obj,
2264 struct intel_engine_cs *ring) 2264 struct intel_engine_cs *ring)
2265{ 2265{
2266 struct drm_i915_gem_request *req = intel_ring_get_request(ring); 2266 struct drm_i915_gem_request *req;
2267 struct intel_engine_cs *old_ring;
2267 2268
2268 BUG_ON(ring == NULL); 2269 BUG_ON(ring == NULL);
2269 if (obj->ring != ring && obj->last_write_req) { 2270
2271 req = intel_ring_get_request(ring);
2272 old_ring = i915_gem_request_get_ring(obj->last_read_req);
2273
2274 if (old_ring != ring && obj->last_write_req) {
2270 /* Keep the request relative to the current ring */ 2275 /* Keep the request relative to the current ring */
2271 i915_gem_request_assign(&obj->last_write_req, req); 2276 i915_gem_request_assign(&obj->last_write_req, req);
2272 } 2277 }
2273 obj->ring = ring;
2274 2278
2275 /* Add a reference if we're newly entering the active list. */ 2279 /* Add a reference if we're newly entering the active list. */
2276 if (!obj->active) { 2280 if (!obj->active) {
@@ -2309,7 +2313,6 @@ i915_gem_object_move_to_inactive(struct drm_i915_gem_object *obj)
2309 intel_fb_obj_flush(obj, true); 2313 intel_fb_obj_flush(obj, true);
2310 2314
2311 list_del_init(&obj->ring_list); 2315 list_del_init(&obj->ring_list);
2312 obj->ring = NULL;
2313 2316
2314 i915_gem_request_assign(&obj->last_read_req, NULL); 2317 i915_gem_request_assign(&obj->last_read_req, NULL);
2315 i915_gem_request_assign(&obj->last_write_req, NULL); 2318 i915_gem_request_assign(&obj->last_write_req, NULL);
@@ -2326,9 +2329,7 @@ i915_gem_object_move_to_inactive(struct drm_i915_gem_object *obj)
2326static void 2329static void
2327i915_gem_object_retire(struct drm_i915_gem_object *obj) 2330i915_gem_object_retire(struct drm_i915_gem_object *obj)
2328{ 2331{
2329 struct intel_engine_cs *ring = obj->ring; 2332 if (obj->last_read_req == NULL)
2330
2331 if (ring == NULL)
2332 return; 2333 return;
2333 2334
2334 if (i915_gem_request_completed(obj->last_read_req, true)) 2335 if (i915_gem_request_completed(obj->last_read_req, true))
@@ -2861,14 +2862,17 @@ i915_gem_idle_work_handler(struct work_struct *work)
2861static int 2862static int
2862i915_gem_object_flush_active(struct drm_i915_gem_object *obj) 2863i915_gem_object_flush_active(struct drm_i915_gem_object *obj)
2863{ 2864{
2865 struct intel_engine_cs *ring;
2864 int ret; 2866 int ret;
2865 2867
2866 if (obj->active) { 2868 if (obj->active) {
2869 ring = i915_gem_request_get_ring(obj->last_read_req);
2870
2867 ret = i915_gem_check_olr(obj->last_read_req); 2871 ret = i915_gem_check_olr(obj->last_read_req);
2868 if (ret) 2872 if (ret)
2869 return ret; 2873 return ret;
2870 2874
2871 i915_gem_retire_requests_ring(obj->ring); 2875 i915_gem_retire_requests_ring(ring);
2872 } 2876 }
2873 2877
2874 return 0; 2878 return 0;
@@ -2971,10 +2975,12 @@ int
2971i915_gem_object_sync(struct drm_i915_gem_object *obj, 2975i915_gem_object_sync(struct drm_i915_gem_object *obj,
2972 struct intel_engine_cs *to) 2976 struct intel_engine_cs *to)
2973{ 2977{
2974 struct intel_engine_cs *from = obj->ring; 2978 struct intel_engine_cs *from;
2975 u32 seqno; 2979 u32 seqno;
2976 int ret, idx; 2980 int ret, idx;
2977 2981
2982 from = i915_gem_request_get_ring(obj->last_read_req);
2983
2978 if (from == NULL || to == from) 2984 if (from == NULL || to == from)
2979 return 0; 2985 return 0;
2980 2986
@@ -3929,7 +3935,7 @@ i915_gem_object_pin_to_display_plane(struct drm_i915_gem_object *obj,
3929 bool was_pin_display; 3935 bool was_pin_display;
3930 int ret; 3936 int ret;
3931 3937
3932 if (pipelined != obj->ring) { 3938 if (pipelined != i915_gem_request_get_ring(obj->last_read_req)) {
3933 ret = i915_gem_object_sync(obj, pipelined); 3939 ret = i915_gem_object_sync(obj, pipelined);
3934 if (ret) 3940 if (ret)
3935 return ret; 3941 return ret;
@@ -4284,9 +4290,11 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data,
4284 ret = i915_gem_object_flush_active(obj); 4290 ret = i915_gem_object_flush_active(obj);
4285 4291
4286 args->busy = obj->active; 4292 args->busy = obj->active;
4287 if (obj->ring) { 4293 if (obj->last_read_req) {
4294 struct intel_engine_cs *ring;
4288 BUILD_BUG_ON(I915_NUM_RINGS > 16); 4295 BUILD_BUG_ON(I915_NUM_RINGS > 16);
4289 args->busy |= intel_ring_flag(obj->ring) << 16; 4296 ring = i915_gem_request_get_ring(obj->last_read_req);
4297 args->busy |= intel_ring_flag(ring) << 16;
4290 } 4298 }
4291 4299
4292 drm_gem_object_unreference(&obj->base); 4300 drm_gem_object_unreference(&obj->base);
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
index d17ff435f276..3c3a9ff9eb54 100644
--- a/drivers/gpu/drm/i915/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/i915_gem_context.c
@@ -619,7 +619,8 @@ static int do_switch(struct intel_engine_cs *ring,
619 * swapped, but there is no way to do that yet. 619 * swapped, but there is no way to do that yet.
620 */ 620 */
621 from->legacy_hw_ctx.rcs_state->dirty = 1; 621 from->legacy_hw_ctx.rcs_state->dirty = 1;
622 BUG_ON(from->legacy_hw_ctx.rcs_state->ring != ring); 622 BUG_ON(i915_gem_request_get_ring(
623 from->legacy_hw_ctx.rcs_state->last_read_req) != ring);
623 624
624 /* obj is kept alive until the next request by its active ref */ 625 /* obj is kept alive until the next request by its active ref */
625 i915_gem_object_ggtt_unpin(from->legacy_hw_ctx.rcs_state); 626 i915_gem_object_ggtt_unpin(from->legacy_hw_ctx.rcs_state);
diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c
index af0ceeedda9b..c4536e185b75 100644
--- a/drivers/gpu/drm/i915/i915_gpu_error.c
+++ b/drivers/gpu/drm/i915/i915_gpu_error.c
@@ -683,7 +683,8 @@ static void capture_bo(struct drm_i915_error_buffer *err,
683 err->dirty = obj->dirty; 683 err->dirty = obj->dirty;
684 err->purgeable = obj->madv != I915_MADV_WILLNEED; 684 err->purgeable = obj->madv != I915_MADV_WILLNEED;
685 err->userptr = obj->userptr.mm != NULL; 685 err->userptr = obj->userptr.mm != NULL;
686 err->ring = obj->ring ? obj->ring->id : -1; 686 err->ring = obj->last_read_req ?
687 i915_gem_request_get_ring(obj->last_read_req)->id : -1;
687 err->cache_level = obj->cache_level; 688 err->cache_level = obj->cache_level;
688} 689}
689 690
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
index 92a0350c1df9..e216cb7d8729 100644
--- a/drivers/gpu/drm/i915/intel_display.c
+++ b/drivers/gpu/drm/i915/intel_display.c
@@ -9528,7 +9528,7 @@ static bool use_mmio_flip(struct intel_engine_cs *ring,
9528 else if (i915.enable_execlists) 9528 else if (i915.enable_execlists)
9529 return true; 9529 return true;
9530 else 9530 else
9531 return ring != obj->ring; 9531 return ring != i915_gem_request_get_ring(obj->last_read_req);
9532} 9532}
9533 9533
9534static void skl_do_mmio_flip(struct intel_crtc *intel_crtc) 9534static void skl_do_mmio_flip(struct intel_crtc *intel_crtc)
@@ -9888,7 +9888,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
9888 } else if (IS_IVYBRIDGE(dev)) { 9888 } else if (IS_IVYBRIDGE(dev)) {
9889 ring = &dev_priv->ring[BCS]; 9889 ring = &dev_priv->ring[BCS];
9890 } else if (INTEL_INFO(dev)->gen >= 7) { 9890 } else if (INTEL_INFO(dev)->gen >= 7) {
9891 ring = obj->ring; 9891 ring = i915_gem_request_get_ring(obj->last_read_req);
9892 if (ring == NULL || ring->id != RCS) 9892 if (ring == NULL || ring->id != RCS)
9893 ring = &dev_priv->ring[BCS]; 9893 ring = &dev_priv->ring[BCS];
9894 } else { 9894 } else {
@@ -9910,7 +9910,8 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc,
9910 9910
9911 i915_gem_request_assign(&work->flip_queued_req, 9911 i915_gem_request_assign(&work->flip_queued_req,
9912 obj->last_write_req); 9912 obj->last_write_req);
9913 work->flip_queued_ring = obj->ring; 9913 work->flip_queued_ring =
9914 i915_gem_request_get_ring(obj->last_write_req);
9914 } else { 9915 } else {
9915 ret = dev_priv->display.queue_flip(dev, crtc, fb, obj, ring, 9916 ret = dev_priv->display.queue_flip(dev, crtc, fb, obj, ring,
9916 page_flip_flags); 9917 page_flip_flags);