@@ -9428,18 +9428,19 @@ static void intel_mmio_flip_work_func(struct work_struct *work)
{
struct intel_crtc *intel_crtc =
container_of(work, struct intel_crtc, mmio_flip.work);
- struct intel_engine_cs *ring;
- uint32_t seqno;
-
- seqno = intel_crtc->mmio_flip.seqno;
- ring = intel_crtc->mmio_flip.ring;
+ struct intel_mmio_flip *mmio_flip;
- if (seqno)
- WARN_ON(__i915_wait_seqno(ring, seqno,
+ mmio_flip = &intel_crtc->mmio_flip;
+ if (mmio_flip->req)
+ WARN_ON(__i915_wait_seqno(i915_gem_request_get_ring(mmio_flip->req),
+ i915_gem_request_get_seqno(mmio_flip->req),
intel_crtc->reset_counter,
false, NULL, NULL) != 0);
intel_do_mmio_flip(intel_crtc);
+ if (mmio_flip->req)
+ i915_gem_request_unreference_irq(mmio_flip->req);
+ mmio_flip->req = NULL;
}
static int intel_queue_mmio_flip(struct drm_device *dev,
@@ -9451,9 +9452,8 @@ static int intel_queue_mmio_flip(struct drm_device *dev,
{
struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
- intel_crtc->mmio_flip.seqno =
- i915_gem_request_get_seqno(obj->last_write_req);
- intel_crtc->mmio_flip.ring = obj->ring;
+ i915_gem_request_assign(&intel_crtc->mmio_flip.req,
+ obj->last_write_req);
schedule_work(&intel_crtc->mmio_flip.work);
@@ -403,8 +403,7 @@ struct intel_pipe_wm {
};
struct intel_mmio_flip {
- u32 seqno;
- struct intel_engine_cs *ring;
+ struct drm_i915_gem_request *req;
struct work_struct work;
};