iris: Emit state cache invalidation after every compute dispatch
Some checks are pending
macOS-CI / macOS-CI (dri) (push) Waiting to run
macOS-CI / macOS-CI (xlib) (push) Waiting to run

Implement HSD 16028171704/14025112257:
   LSC state cache livelock:- Once state cache entries are full,
   subsequent walker dispatches with two threads per thread group maybe
   gets stuck infinitely because of state cache live lock.

   One thread continuously stuck in loop doing UGM fence + evict and UGM
   read is waiting on UGM read to have certain value. while other thread
   supposed to update the value that first thread is waiting for. But
   since entries are full in state cache, there is second thread never
   make progress.

Closes: #12352
Signed-off-by: Sagar Ghuge <sagar.ghuge@intel.com>
Reviewed-by: Tapani Pälli <tapani.palli@intel.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/37128>
This commit is contained in:
Sagar Ghuge 2025-09-01 14:19:24 -07:00 committed by Marge Bot
parent ebbc358db5
commit bc8e29c04e

View file

@ -668,6 +668,15 @@ iris_rewrite_compute_walker_pc(struct iris_batch *batch,
for (uint32_t i = 0; i < GENX(COMPUTE_WALKER_length); i++)
walker[i] |= dwords[i];
/*
* TDOD: Add INTEL_NEEDS_WA_14025112257 check once HSD is propogated for all
* other impacted platforms.
*/
if (screen->devinfo->ver >= 20 && batch->name == IRIS_BATCH_COMPUTE) {
iris_emit_pipe_control_flush(batch, "WA_14025112257",
PIPE_CONTROL_STATE_CACHE_INVALIDATE);
}
#else
UNREACHABLE("Unsupported");
#endif
@ -9250,6 +9259,15 @@ iris_upload_compute_walker(struct iris_context *ice,
}
}
/*
* TDOD: Add INTEL_NEEDS_WA_14025112257 check once HSD is propogated for all
* other impacted platforms.
*/
if (screen->devinfo->ver >= 20 && batch->name == IRIS_BATCH_COMPUTE) {
iris_emit_pipe_control_flush(batch, "WA_14025112257",
PIPE_CONTROL_STATE_CACHE_INVALIDATE);
}
trace_intel_end_compute(&batch->trace, grid->grid[0], grid->grid[1], grid->grid[2], 0);
}