mirror of
https://github.com/raspberrypi/linux.git
synced 2025-12-06 10:00:17 +00:00
drm/etnaviv: fix flush sequence logic
[ Upstream commita042beac6e] The current logic uses the flush sequence from the current address space. This is harmless when deducing the flush requirements for the current submit, as either the incoming address space is the same one as the currently active one or we switch context, in which case the flush is unconditional. However, this sequence is also stored as the current flush sequence of the GPU. If we switch context the stored flush sequence will no longer belong to the currently active address space. This incoherency can then cause missed flushes, resulting in translation errors. Fixes:27b67278e0("drm/etnaviv: rework MMU handling") Signed-off-by: Tomeu Vizoso <tomeu@tomeuvizoso.net> Signed-off-by: Lucas Stach <l.stach@pengutronix.de> Reviewed-by: Christian Gmeiner <cgmeiner@igalia.com> Link: https://lore.kernel.org/r/20251021093723.3887980-1-l.stach@pengutronix.de Signed-off-by: Sasha Levin <sashal@kernel.org>
This commit is contained in:
committed by
Greg Kroah-Hartman
parent
a8db654292
commit
dd5b22a13b
@@ -347,7 +347,7 @@ void etnaviv_buffer_queue(struct etnaviv_gpu *gpu, u32 exec_state,
|
|||||||
u32 link_target, link_dwords;
|
u32 link_target, link_dwords;
|
||||||
bool switch_context = gpu->exec_state != exec_state;
|
bool switch_context = gpu->exec_state != exec_state;
|
||||||
bool switch_mmu_context = gpu->mmu_context != mmu_context;
|
bool switch_mmu_context = gpu->mmu_context != mmu_context;
|
||||||
unsigned int new_flush_seq = READ_ONCE(gpu->mmu_context->flush_seq);
|
unsigned int new_flush_seq = READ_ONCE(mmu_context->flush_seq);
|
||||||
bool need_flush = switch_mmu_context || gpu->flush_seq != new_flush_seq;
|
bool need_flush = switch_mmu_context || gpu->flush_seq != new_flush_seq;
|
||||||
bool has_blt = !!(gpu->identity.minor_features5 &
|
bool has_blt = !!(gpu->identity.minor_features5 &
|
||||||
chipMinorFeatures5_BLT_ENGINE);
|
chipMinorFeatures5_BLT_ENGINE);
|
||||||
|
|||||||
Reference in New Issue
Block a user