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:

committato da
Daniel Vetter

parent
16e9a21f33
commit
536f5b5e86
@@ -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;
|
||||
};
|
||||
|
||||
|
Fai riferimento in un nuovo problema
Block a user