summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/intel_ringbuffer.c
diff options
context:
space:
mode:
authorJohn Harrison <John.C.Harrison@Intel.com>2014-11-24 18:49:23 +0000
committerDaniel Vetter <daniel.vetter@ffwll.ch>2014-12-03 09:35:13 +0100
commit9eba5d4a1d79d5094321469479b4dbe418f60110 (patch)
tree56d6943719a6ee93a44314faf59af6c442957686 /drivers/gpu/drm/i915/intel_ringbuffer.c
parentf61ccae333c6f523adf75aa61605c14a275d2aca (diff)
drm/i915: Ensure OLS & PLR are always in sync
The aim is to replace seqno values with request structures. A step along the way is to switch to using the PLR in preference to the OLS. That requires the PLR to only be valid when and only when the OLS is also valid. I.e., the two must be kept in lock step. Then, code which was using the OLS can be safely switched over to using the PLR instead. 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>
Diffstat (limited to 'drivers/gpu/drm/i915/intel_ringbuffer.c')
-rw-r--r--drivers/gpu/drm/i915/intel_ringbuffer.c29
1 files changed, 21 insertions, 8 deletions
diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
index 1d01b51ff05..9fe13075e5f 100644
--- a/drivers/gpu/drm/i915/intel_ringbuffer.c
+++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
@@ -2024,20 +2024,33 @@ int intel_ring_idle(struct intel_engine_cs *ring)
static int
intel_ring_alloc_seqno(struct intel_engine_cs *ring)
{
- if (ring->outstanding_lazy_seqno)
+ int ret;
+ struct drm_i915_gem_request *request;
+
+ /* XXX: The aim is to replace seqno values with request structures.
+ * A step along the way is to switch to using the PLR in preference
+ * to the OLS. That requires the PLR to only be valid when the OLS
+ * is also valid. I.e., the two must be kept in step. */
+
+ if (ring->outstanding_lazy_seqno) {
+ WARN_ON(ring->preallocated_lazy_request == NULL);
return 0;
+ }
- if (ring->preallocated_lazy_request == NULL) {
- struct drm_i915_gem_request *request;
+ WARN_ON(ring->preallocated_lazy_request != NULL);
- request = kmalloc(sizeof(*request), GFP_KERNEL);
- if (request == NULL)
- return -ENOMEM;
+ request = kmalloc(sizeof(*request), GFP_KERNEL);
+ if (request == NULL)
+ return -ENOMEM;
- ring->preallocated_lazy_request = request;
+ ret = i915_gem_get_seqno(ring->dev, &ring->outstanding_lazy_seqno);
+ if (ret) {
+ kfree(request);
+ return ret;
}
- return i915_gem_get_seqno(ring->dev, &ring->outstanding_lazy_seqno);
+ ring->preallocated_lazy_request = request;
+ return 0;
}
static int __intel_ring_prepare(struct intel_engine_cs *ring,