diff options
author | Chris Wilson <chris@chris-wilson.co.uk> | 2010-09-23 06:00:38 -0400 |
---|---|---|
committer | Chris Wilson <chris@chris-wilson.co.uk> | 2010-09-23 06:02:55 -0400 |
commit | 20f0cd55f68e0678909214c60b3595a22124bdb0 (patch) | |
tree | c64fb737f3047896c387b7eb0de4936d0d500ebe /drivers | |
parent | 6ec3d0c0e9c0c605696e91048eebaca7b0c36695 (diff) |
drm/i915: Remove the broken flush_ring from page-flip
This is already performed with the pipelined flush, so by the time we
schedule the flush in the page-flip, the ring is NULL and we OOPs
instead.
Reported-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 2 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/intel_display.c | 7 |
3 files changed, 2 insertions, 12 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index 5fec2ca619e8..ac41ca1157a5 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h | |||
@@ -1007,11 +1007,6 @@ int i915_gem_object_put_fence_reg(struct drm_gem_object *obj, | |||
1007 | void i915_gem_retire_requests(struct drm_device *dev); | 1007 | void i915_gem_retire_requests(struct drm_device *dev); |
1008 | void i915_gem_reset_lists(struct drm_device *dev); | 1008 | void i915_gem_reset_lists(struct drm_device *dev); |
1009 | void i915_gem_clflush_object(struct drm_gem_object *obj); | 1009 | void i915_gem_clflush_object(struct drm_gem_object *obj); |
1010 | void i915_gem_flush_ring(struct drm_device *dev, | ||
1011 | struct drm_file *file_priv, | ||
1012 | struct intel_ring_buffer *ring, | ||
1013 | uint32_t invalidate_domains, | ||
1014 | uint32_t flush_domains); | ||
1015 | int i915_gem_object_set_domain(struct drm_gem_object *obj, | 1010 | int i915_gem_object_set_domain(struct drm_gem_object *obj, |
1016 | uint32_t read_domains, | 1011 | uint32_t read_domains, |
1017 | uint32_t write_domain); | 1012 | uint32_t write_domain); |
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 3fd69ad19aa7..174e38abc9ef 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c | |||
@@ -1924,7 +1924,7 @@ i915_wait_request(struct drm_device *dev, uint32_t seqno, | |||
1924 | return i915_do_wait_request(dev, seqno, 1, ring); | 1924 | return i915_do_wait_request(dev, seqno, 1, ring); |
1925 | } | 1925 | } |
1926 | 1926 | ||
1927 | void | 1927 | static void |
1928 | i915_gem_flush_ring(struct drm_device *dev, | 1928 | i915_gem_flush_ring(struct drm_device *dev, |
1929 | struct drm_file *file_priv, | 1929 | struct drm_file *file_priv, |
1930 | struct intel_ring_buffer *ring, | 1930 | struct intel_ring_buffer *ring, |
diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c index b92385498d2c..16541ee9e1e0 100644 --- a/drivers/gpu/drm/i915/intel_display.c +++ b/drivers/gpu/drm/i915/intel_display.c | |||
@@ -5028,7 +5028,7 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc, | |||
5028 | struct intel_unpin_work *work; | 5028 | struct intel_unpin_work *work; |
5029 | unsigned long flags, offset; | 5029 | unsigned long flags, offset; |
5030 | int pipe = intel_crtc->pipe; | 5030 | int pipe = intel_crtc->pipe; |
5031 | u32 was_dirty, pf, pipesrc; | 5031 | u32 pf, pipesrc; |
5032 | int ret; | 5032 | int ret; |
5033 | 5033 | ||
5034 | work = kzalloc(sizeof *work, GFP_KERNEL); | 5034 | work = kzalloc(sizeof *work, GFP_KERNEL); |
@@ -5057,7 +5057,6 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc, | |||
5057 | obj = intel_fb->obj; | 5057 | obj = intel_fb->obj; |
5058 | 5058 | ||
5059 | mutex_lock(&dev->struct_mutex); | 5059 | mutex_lock(&dev->struct_mutex); |
5060 | was_dirty = obj->write_domain & I915_GEM_GPU_DOMAINS; | ||
5061 | ret = intel_pin_and_fence_fb_obj(dev, obj, true); | 5060 | ret = intel_pin_and_fence_fb_obj(dev, obj, true); |
5062 | if (ret) | 5061 | if (ret) |
5063 | goto cleanup_work; | 5062 | goto cleanup_work; |
@@ -5076,10 +5075,6 @@ static int intel_crtc_page_flip(struct drm_crtc *crtc, | |||
5076 | atomic_inc(&obj_priv->pending_flip); | 5075 | atomic_inc(&obj_priv->pending_flip); |
5077 | work->pending_flip_obj = obj; | 5076 | work->pending_flip_obj = obj; |
5078 | 5077 | ||
5079 | /* Schedule the pipelined flush */ | ||
5080 | if (was_dirty) | ||
5081 | i915_gem_flush_ring(dev, NULL, obj_priv->ring, 0, was_dirty); | ||
5082 | |||
5083 | if (IS_GEN3(dev) || IS_GEN2(dev)) { | 5078 | if (IS_GEN3(dev) || IS_GEN2(dev)) { |
5084 | u32 flip_mask; | 5079 | u32 flip_mask; |
5085 | 5080 | ||