diff options
author | Lucas Stach <l.stach@pengutronix.de> | 2024-06-21 23:00:20 +0300 |
---|---|---|
committer | Lucas Stach <l.stach@pengutronix.de> | 2024-06-26 16:32:47 +0300 |
commit | beb311ff0f2e1fcd0f033fcd1be45de083efc421 (patch) | |
tree | 5c139e88a36cb8abc3d0d389d1b6b49e9a86bd01 /drivers/gpu/drm/etnaviv | |
parent | 58979ad6330a70450ed78837be3095107d022ea9 (diff) | |
download | linux-beb311ff0f2e1fcd0f033fcd1be45de083efc421.tar.xz |
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>
Diffstat (limited to 'drivers/gpu/drm/etnaviv')
-rw-r--r-- | drivers/gpu/drm/etnaviv/etnaviv_gpu.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c index 7502c55199b8..7c7f97793ddd 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gpu.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gpu.c @@ -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); } |