aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem.c
diff options
context:
space:
mode:
authorChris Wilson <chris@chris-wilson.co.uk>2010-12-07 23:00:20 +0000
committerChris Wilson <chris@chris-wilson.co.uk>2010-12-07 23:02:08 +0000
commit1a1c69762a14f50dd574a9cbabbfa1b1542f580e (patch)
tree117fc29dc9f936f0125e08206c9a60a4e5ffbad7 /drivers/gpu/drm/i915/i915_gem.c
parent0be732841fb925b6f1242211ea211c022b6ac26c (diff)
parent1b39d6f37622f1da70aa2cfd38bfff9a52c13e05 (diff)
downloadkernel_samsung_smdk4412-1a1c69762a14f50dd574a9cbabbfa1b1542f580e.zip
kernel_samsung_smdk4412-1a1c69762a14f50dd574a9cbabbfa1b1542f580e.tar.gz
kernel_samsung_smdk4412-1a1c69762a14f50dd574a9cbabbfa1b1542f580e.tar.bz2
Merge branch 'drm-intel-fixes' into drm-intel-next
Conflicts: drivers/gpu/drm/i915/i915_gem.c drivers/gpu/drm/i915/intel_dp.c
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c17
1 files changed, 16 insertions, 1 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
index b57ce03..27fa2a1 100644
--- a/drivers/gpu/drm/i915/i915_gem.c
+++ b/drivers/gpu/drm/i915/i915_gem.c
@@ -3356,9 +3356,24 @@ i915_gem_busy_ioctl(struct drm_device *dev, void *data,
* use this buffer rather sooner than later, so issuing the required
* flush earlier is beneficial.
*/
- if (obj->base.write_domain & I915_GEM_GPU_DOMAINS)
+ if (obj->base.write_domain & I915_GEM_GPU_DOMAINS) {
i915_gem_flush_ring(dev, obj->ring,
0, obj->base.write_domain);
+ } else if (obj->ring->outstanding_lazy_request ==
+ obj->last_rendering_seqno) {
+ struct drm_i915_gem_request *request;
+
+ /* This ring is not being cleared by active usage,
+ * so emit a request to do so.
+ */
+ request = kzalloc(sizeof(*request), GFP_KERNEL);
+ if (request)
+ ret = i915_add_request(dev,
+ NULL, request,
+ obj->ring);
+ else
+ ret = -ENOMEM;
+ }
/* Update the active list for the hardware's current position.
* Otherwise this only updates on a delayed timer or when irqs