Commit beb311ff authored by Lucas Stach's avatar Lucas Stach

drm/etnaviv: reduce number of ktime_get calls in IRQ handler

A single IRQ might signal the completion of multiple jobs/fences
at once. There is no point in attaching a new timestamp to each
fence that only differs in when exactly the IRQ handler was able
to process this fence.

Get a single timestamp when the IRQ handler has determined that
there are completed jobs and reuse this for all fences that get
signalled by the handler.
Signed-off-by: default avatarLucas Stach <l.stach@pengutronix.de>
Reviewed-by: default avatarPhilipp Zabel <p.zabel@pengutronix.de>
Reviewed-by: default avatarChristian Gmeiner <cgmeiner@igalia.com>
parent 58979ad6
...@@ -1548,6 +1548,7 @@ static irqreturn_t irq_handler(int irq, void *data) ...@@ -1548,6 +1548,7 @@ static irqreturn_t irq_handler(int irq, void *data)
u32 intr = gpu_read(gpu, VIVS_HI_INTR_ACKNOWLEDGE); u32 intr = gpu_read(gpu, VIVS_HI_INTR_ACKNOWLEDGE);
if (intr != 0) { if (intr != 0) {
ktime_t now = ktime_get();
int event; int event;
pm_runtime_mark_last_busy(gpu->dev); pm_runtime_mark_last_busy(gpu->dev);
...@@ -1597,7 +1598,7 @@ static irqreturn_t irq_handler(int irq, void *data) ...@@ -1597,7 +1598,7 @@ static irqreturn_t irq_handler(int irq, void *data)
*/ */
if (fence_after(fence->seqno, gpu->completed_fence)) if (fence_after(fence->seqno, gpu->completed_fence))
gpu->completed_fence = fence->seqno; gpu->completed_fence = fence->seqno;
dma_fence_signal(fence); dma_fence_signal_timestamp(fence, now);
event_free(gpu, event); event_free(gpu, event);
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment