void i915_gem_reset_flushing_list(struct drm_device *dev);
 void i915_gem_reset_inactive_gpu_domains(struct drm_device *dev);
 void i915_gem_clflush_object(struct drm_gem_object *obj);
+void i915_gem_flush_ring(struct drm_device *dev,
+                        struct intel_ring_buffer *ring,
+                        uint32_t invalidate_domains,
+                        uint32_t flush_domains);
 int i915_gem_object_set_domain(struct drm_gem_object *obj,
                               uint32_t read_domains,
                               uint32_t write_domain);
 
        return i915_do_wait_request(dev, seqno, 1, ring);
 }
 
-static void
+void
 i915_gem_flush_ring(struct drm_device *dev,
                    struct intel_ring_buffer *ring,
                    uint32_t invalidate_domains,
 
        atomic_inc(&obj_priv->pending_flip);
        work->pending_flip_obj = obj;
 
-       if (was_dirty || IS_GEN3(dev) || IS_GEN2(dev)) {
-               BEGIN_LP_RING(2);
-               if (IS_GEN3(dev) || IS_GEN2(dev)) {
-                       u32 flip_mask;
+       /* Schedule the pipelined flush */
+       if (was_dirty)
+               i915_gem_flush_ring(dev, obj_priv->ring, 0, was_dirty);
 
-                       /* Can't queue multiple flips, so wait for the previous
-                        * one to finish before executing the next.
-                        */
+       if (IS_GEN3(dev) || IS_GEN2(dev)) {
+               u32 flip_mask;
 
-                       if (intel_crtc->plane)
-                               flip_mask = MI_WAIT_FOR_PLANE_B_FLIP;
-                       else
-                               flip_mask = MI_WAIT_FOR_PLANE_A_FLIP;
-
-                       OUT_RING(MI_WAIT_FOR_EVENT | flip_mask);
-               } else
-                       OUT_RING(MI_NOOP);
-               OUT_RING(MI_FLUSH);
+               /* Can't queue multiple flips, so wait for the previous
+                * one to finish before executing the next.
+                */
+               BEGIN_LP_RING(2);
+               if (intel_crtc->plane)
+                       flip_mask = MI_WAIT_FOR_PLANE_B_FLIP;
+               else
+                       flip_mask = MI_WAIT_FOR_PLANE_A_FLIP;
+               OUT_RING(MI_WAIT_FOR_EVENT | flip_mask);
+               OUT_RING(MI_NOOP);
                ADVANCE_LP_RING();
        }