From 468113efd46e674011f632cccda14e07ef4edd21 Mon Sep 17 00:00:00 2001 From: Zan Dobersek Date: Mon, 16 Mar 2026 09:46:41 +0100 Subject: [PATCH] fd/replay: kgsl context should use no-fault tolerance, report reset state Use KGSL_CONTEXT_NO_FAULT_TOLERANCE to push context into an error state when a GPU fault is detected. This is useful when dealing with replays of captures that are producing a GPU fault but might seem to replay just fine because of the KGSL kernel fault tolerance. Signed-off-by: Zan Dobersek Part-of: --- src/freedreno/decode/replay.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/src/freedreno/decode/replay.c b/src/freedreno/decode/replay.c index 44443eaeedd..49000472090 100644 --- a/src/freedreno/decode/replay.c +++ b/src/freedreno/decode/replay.c @@ -762,7 +762,8 @@ device_create(uint64_t base_addr) struct kgsl_drawctxt_create drawctxt_req = { .flags = KGSL_CONTEXT_SAVE_GMEM | KGSL_CONTEXT_NO_GMEM_ALLOC | - KGSL_CONTEXT_PREAMBLE, + KGSL_CONTEXT_PREAMBLE | + KGSL_CONTEXT_NO_FAULT_TOLERANCE, }; ret = safe_ioctl(dev->fd, IOCTL_KGSL_DRAWCTXT_CREATE, &drawctxt_req); @@ -821,7 +822,21 @@ device_submit_cmdstreams(struct device *dev) ret = safe_ioctl(dev->fd, IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID, &wait); if (ret) { - err(1, "IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID failure %d", ret); + warn("IOCTL_KGSL_DEVICE_WAITTIMESTAMP_CTXTID failure %d", ret); + + uint32_t value = dev->context_id; + struct kgsl_device_getproperty getprop = { + .type = KGSL_PROP_GPU_RESET_STAT, + .value = &value, + .sizebytes = sizeof(value), + }; + + ret = safe_ioctl(dev->fd, IOCTL_KGSL_DEVICE_GETPROPERTY, &getprop); + if (ret) { + err(1, "IOCTL_KGSL_DEVICE_GETPROPERTY failure %d", ret); + } + + warnx("KGSL_PROP_GPU_RESET_STAT value %u", value); } u_vector_finish(&dev->cmdstreams);