drm/i915: Make mmio flip wait for seqno in the work function

This simplifies the code quite a bit compared to iterating over all
rings during the ring interrupt.

Also, it allows us to drop the mmio_flip spinlock, since the mmio_flip
struct is only accessed in two places. The first is when the flip is
queued and the other when the mmio writes are done. Since a flip cannot
be queued while there is a pending flip, the two paths shouldn't ever
run in parallel. We might need to revisit that if support for replacing
flips is implemented though.

v2: Don't hold dev->struct_mutext while waiting (Chris)

v3: Make the wait uninterruptable (Chris)

Signed-off-by: Ander Conselvan de Oliveira <ander.conselvan.de.oliveira@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
This commit is contained in:
Ander Conselvan de Oliveira
2014-11-06 11:03:40 +02:00
committato da Daniel Vetter
parent 16e9a21f33
commit 536f5b5e86
3 ha cambiato i file con 14 aggiunte e 92 eliminazioni

Vedi File

@@ -399,16 +399,9 @@ struct intel_pipe_wm {
bool sprites_scaled;
};
enum intel_mmio_flip_status {
INTEL_MMIO_FLIP_IDLE = 0,
INTEL_MMIO_FLIP_WAIT_RING,
INTEL_MMIO_FLIP_WORK_SCHEDULED,
};
struct intel_mmio_flip {
u32 seqno;
u32 ring_id;
enum intel_mmio_flip_status status;
struct intel_engine_cs *ring;
struct work_struct work;
};