]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
drm/etnaviv: reduce number of ktime_get calls in IRQ handler
authorLucas Stach <l.stach@pengutronix.de>
Fri, 21 Jun 2024 20:00:20 +0000 (22:00 +0200)
committerLucas Stach <l.stach@pengutronix.de>
Wed, 26 Jun 2024 13:32:47 +0000 (15:32 +0200)
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>
drivers/gpu/drm/etnaviv/etnaviv_gpu.c

index 7502c55199b8abdda2f2a38f3f0ec2e181ef4d41..7c7f97793ddd0c109439385869ee38125cc82d5a 100644 (file)
@@ -1548,6 +1548,7 @@ static irqreturn_t irq_handler(int irq, void *data)
        u32 intr = gpu_read(gpu, VIVS_HI_INTR_ACKNOWLEDGE);
 
        if (intr != 0) {
+               ktime_t now = ktime_get();
                int event;
 
                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))
                                gpu->completed_fence = fence->seqno;
-                       dma_fence_signal(fence);
+                       dma_fence_signal_timestamp(fence, now);
 
                        event_free(gpu, event);
                }