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: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Philipp Zabel <p.zabel@pengutronix.de> Reviewed-by: Christian Gmeiner <cgmeiner@igalia.com>
This commit is contained in:
@@ -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)
|
|||||||
*/
|
*/
|
||||||
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);
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user