[Intel-gfx] [RFC] drm/i915: Remove FIXME_lrc_ctx backpointer

2014-10-24 Thread Nick Hoath
The first pass implementation of execlists required a backpointer to the 
context to be held
in the intel_ringbuffer. However the context pointer is available higher in the 
call stack.
Remove the backpointer from the ring buffer structure and instead pass it down 
through the
call stack.
Signed-off-by: Nick Hoath nicholas.ho...@intel.com
---
 drivers/gpu/drm/i915/i915_gem.c |  7 ++--
 drivers/gpu/drm/i915/intel_lrc.c| 65 -
 drivers/gpu/drm/i915/intel_lrc.h| 10 +++--
 drivers/gpu/drm/i915/intel_ringbuffer.h | 14 +++
 4 files changed, 56 insertions(+), 40 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index e9c783d..724bbdf 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2322,6 +2322,7 @@ int __i915_add_request(struct intel_engine_cs *ring,
struct drm_i915_gem_request *request;
struct intel_ringbuffer *ringbuf;
u32 request_ring_position, request_start;
+   struct intel_context *ctx = NULL;
int ret;
 
request = ring-preallocated_lazy_request;
@@ -2329,7 +2330,7 @@ int __i915_add_request(struct intel_engine_cs *ring,
return -ENOMEM;
 
if (i915.enable_execlists) {
-   struct intel_context *ctx = request-ctx;
+   ctx = request-ctx;
ringbuf = ctx-engine[ring-id].ringbuf;
} else
ringbuf = ring-buffer;
@@ -2343,7 +2344,7 @@ int __i915_add_request(struct intel_engine_cs *ring,
 * what.
 */
if (i915.enable_execlists) {
-   ret = logical_ring_flush_all_caches(ringbuf);
+   ret = logical_ring_flush_all_caches(ringbuf, ctx);
if (ret)
return ret;
} else {
@@ -2360,7 +2361,7 @@ int __i915_add_request(struct intel_engine_cs *ring,
request_ring_position = intel_ring_get_tail(ringbuf);
 
if (i915.enable_execlists) {
-   ret = ring-emit_request(ringbuf);
+   ret = ring-emit_request(ringbuf, ctx);
if (ret)
return ret;
} else {
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 803fc38..1be836a 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -578,7 +578,8 @@ static int execlists_context_queue(struct intel_engine_cs 
*ring,
return 0;
 }
 
-static int logical_ring_invalidate_all_caches(struct intel_ringbuffer *ringbuf)
+static int logical_ring_invalidate_all_caches(struct intel_ringbuffer *ringbuf,
+ struct intel_context *ctx)
 {
struct intel_engine_cs *ring = ringbuf-ring;
uint32_t flush_domains;
@@ -588,7 +589,8 @@ static int logical_ring_invalidate_all_caches(struct 
intel_ringbuffer *ringbuf)
if (ring-gpu_caches_dirty)
flush_domains = I915_GEM_GPU_DOMAINS;
 
-   ret = ring-emit_flush(ringbuf, I915_GEM_GPU_DOMAINS, flush_domains);
+   ret = ring-emit_flush(ringbuf, ctx,
+  I915_GEM_GPU_DOMAINS, flush_domains);
if (ret)
return ret;
 
@@ -597,6 +599,7 @@ static int logical_ring_invalidate_all_caches(struct 
intel_ringbuffer *ringbuf)
 }
 
 static int execlists_move_to_gpu(struct intel_ringbuffer *ringbuf,
+struct intel_context *ctx,
 struct list_head *vmas)
 {
struct intel_engine_cs *ring = ringbuf-ring;
@@ -624,7 +627,7 @@ static int execlists_move_to_gpu(struct intel_ringbuffer 
*ringbuf,
/* Unconditionally invalidate gpu caches and ensure that we do flush
 * any residual writes from the previous batch.
 */
-   return logical_ring_invalidate_all_caches(ringbuf);
+   return logical_ring_invalidate_all_caches(ringbuf, ctx);
 }
 
 /**
@@ -704,13 +707,13 @@ int intel_execlists_submission(struct drm_device *dev, 
struct drm_file *file,
return -EINVAL;
}
 
-   ret = execlists_move_to_gpu(ringbuf, vmas);
+   ret = execlists_move_to_gpu(ringbuf, ctx, vmas);
if (ret)
return ret;
 
if (ring == dev_priv-ring[RCS] 
instp_mode != dev_priv-relative_constants_mode) {
-   ret = intel_logical_ring_begin(ringbuf, 4);
+   ret = intel_logical_ring_begin(ringbuf, ctx, 4);
if (ret)
return ret;
 
@@ -723,7 +726,7 @@ int intel_execlists_submission(struct drm_device *dev, 
struct drm_file *file,
dev_priv-relative_constants_mode = instp_mode;
}
 
-   ret = ring-emit_bb_start(ringbuf, exec_start, flags);
+   ret = ring-emit_bb_start(ringbuf, ctx, exec_start, flags);
if (ret)
return ret;
 
@@ -755,7 +758,8 @@ void intel_logical_ring_stop(struct intel_engine_cs *ring)

[Intel-gfx] [RFC] drm/i915: Remove FIXME_lrc_ctx backpointer

2014-10-15 Thread Nick Hoath
The first pass implementation of execlists required a backpointer to the 
context to be held
in the intel_ringbuffer. However the context pointer is available higher in the 
call stack.
Remove the backpointer from the ring buffer structure and instead pass it down 
through the
call stack.
Signed-off-by: Nick Hoath nicholas.ho...@intel.com
CC: Chris Harris chris.har...@intel.com
---
 drivers/gpu/drm/i915/i915_gem.c |  7 ++--
 drivers/gpu/drm/i915/intel_lrc.c| 65 -
 drivers/gpu/drm/i915/intel_lrc.h| 10 +++--
 drivers/gpu/drm/i915/intel_ringbuffer.h | 14 +++
 4 files changed, 56 insertions(+), 40 deletions(-)

diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index e9c783d..724bbdf 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -2322,6 +2322,7 @@ int __i915_add_request(struct intel_engine_cs *ring,
struct drm_i915_gem_request *request;
struct intel_ringbuffer *ringbuf;
u32 request_ring_position, request_start;
+   struct intel_context *ctx = NULL;
int ret;
 
request = ring-preallocated_lazy_request;
@@ -2329,7 +2330,7 @@ int __i915_add_request(struct intel_engine_cs *ring,
return -ENOMEM;
 
if (i915.enable_execlists) {
-   struct intel_context *ctx = request-ctx;
+   ctx = request-ctx;
ringbuf = ctx-engine[ring-id].ringbuf;
} else
ringbuf = ring-buffer;
@@ -2343,7 +2344,7 @@ int __i915_add_request(struct intel_engine_cs *ring,
 * what.
 */
if (i915.enable_execlists) {
-   ret = logical_ring_flush_all_caches(ringbuf);
+   ret = logical_ring_flush_all_caches(ringbuf, ctx);
if (ret)
return ret;
} else {
@@ -2360,7 +2361,7 @@ int __i915_add_request(struct intel_engine_cs *ring,
request_ring_position = intel_ring_get_tail(ringbuf);
 
if (i915.enable_execlists) {
-   ret = ring-emit_request(ringbuf);
+   ret = ring-emit_request(ringbuf, ctx);
if (ret)
return ret;
} else {
diff --git a/drivers/gpu/drm/i915/intel_lrc.c b/drivers/gpu/drm/i915/intel_lrc.c
index 803fc38..1be836a 100644
--- a/drivers/gpu/drm/i915/intel_lrc.c
+++ b/drivers/gpu/drm/i915/intel_lrc.c
@@ -578,7 +578,8 @@ static int execlists_context_queue(struct intel_engine_cs 
*ring,
return 0;
 }
 
-static int logical_ring_invalidate_all_caches(struct intel_ringbuffer *ringbuf)
+static int logical_ring_invalidate_all_caches(struct intel_ringbuffer *ringbuf,
+ struct intel_context *ctx)
 {
struct intel_engine_cs *ring = ringbuf-ring;
uint32_t flush_domains;
@@ -588,7 +589,8 @@ static int logical_ring_invalidate_all_caches(struct 
intel_ringbuffer *ringbuf)
if (ring-gpu_caches_dirty)
flush_domains = I915_GEM_GPU_DOMAINS;
 
-   ret = ring-emit_flush(ringbuf, I915_GEM_GPU_DOMAINS, flush_domains);
+   ret = ring-emit_flush(ringbuf, ctx,
+  I915_GEM_GPU_DOMAINS, flush_domains);
if (ret)
return ret;
 
@@ -597,6 +599,7 @@ static int logical_ring_invalidate_all_caches(struct 
intel_ringbuffer *ringbuf)
 }
 
 static int execlists_move_to_gpu(struct intel_ringbuffer *ringbuf,
+struct intel_context *ctx,
 struct list_head *vmas)
 {
struct intel_engine_cs *ring = ringbuf-ring;
@@ -624,7 +627,7 @@ static int execlists_move_to_gpu(struct intel_ringbuffer 
*ringbuf,
/* Unconditionally invalidate gpu caches and ensure that we do flush
 * any residual writes from the previous batch.
 */
-   return logical_ring_invalidate_all_caches(ringbuf);
+   return logical_ring_invalidate_all_caches(ringbuf, ctx);
 }
 
 /**
@@ -704,13 +707,13 @@ int intel_execlists_submission(struct drm_device *dev, 
struct drm_file *file,
return -EINVAL;
}
 
-   ret = execlists_move_to_gpu(ringbuf, vmas);
+   ret = execlists_move_to_gpu(ringbuf, ctx, vmas);
if (ret)
return ret;
 
if (ring == dev_priv-ring[RCS] 
instp_mode != dev_priv-relative_constants_mode) {
-   ret = intel_logical_ring_begin(ringbuf, 4);
+   ret = intel_logical_ring_begin(ringbuf, ctx, 4);
if (ret)
return ret;
 
@@ -723,7 +726,7 @@ int intel_execlists_submission(struct drm_device *dev, 
struct drm_file *file,
dev_priv-relative_constants_mode = instp_mode;
}
 
-   ret = ring-emit_bb_start(ringbuf, exec_start, flags);
+   ret = ring-emit_bb_start(ringbuf, ctx, exec_start, flags);
if (ret)
return ret;
 
@@ -755,7 +758,8 @@ void