Repository navigation
drm/asahi: retire a G17 render group on its pass record when its stamps stall - #555
Merged
DjDeveloperr merged 1 commit intoOct 28, 2026
Conversation
…ps stall A render pair is observed only once both queues' completion stamps cover its front group. On the J700, about every other boot under a CTS load, the stamps of one pair stop one kick short of a group the firmware has executed: the pass record holds its tiler start and fragment end, both rings are consumed, and later groups on the pair execute too, but no stamp store, completion notification or later event moves the stamps. The pair is never observed again, and after the scheduler watchdog and its renewals (about 30 s) the client's render fails with ETIMEDOUT and it sees a lost device. Give render the bound compute already has for its records: - When an observation scan finds a front group executed and consumed while the stamps lag it, it latches the time. The scan before a render watchdog attribution also latches, so a pair whose notification never came is found within one watchdog period. - A latched pair stays in the 1 ms rescan without a notification. After STAMP_FALLBACK_NS (50 ms) it is observed and the group retires on its pass record. - When the watchdog of such a front group itself expires, the group retires on its record instead of failing; failing would have given up on the stamps as well. The first and every 64th such retirement are logged with a lifetime count.
This was referenced Oct 28, 2026
This was referenced Oct 29, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Problem
On the J700, about every other boot under a 6-worker Vulkan CTS load, one client's render fails with ETIMEDOUT about 30 s after it was submitted, and the client sees a lost device:
It reproduces with the qualified GNOME-era stack too (old perf core + intrec1), so it isn't a regression. It was found on the Omarchy install because CTS sessions now start right after boot, where it shows up more often. A gallium desktop also raises the rate.
Cause
A pair-state dump at the failure (a diagnostic build calling
Pair::report_recoveryfromfail_render_packet) shows the firmware did finish the group:done == read == write);Both queues' completion stamps, though, stop exactly one kick short. For example, slot 35's front ordinal 406 needs stamps covering kick 407, and both read
406 << 8. No stamp store, completion notification or later event ever moves them.next_render_observationonly observes a pair once the stamps cover its front, so the pair is never observed again. The client then waits through the watchdog and its 14 renewals before failing. This is the same firmware behavior compute already tolerates for its records (STAMP_FALLBACK_NS, 50 ms).Change
Render gets the same bound:
retirement::poll_stampless).KUnit: three new cases in
asahi_g17_render_retirementmodel the stalled pair as read on hardware. The suite runs 161 tests (160 pass, 1 skip).Hardware
J700 on the Omarchy install, integration/aurora 4460ba6 kernel (asahi there is identical to this base) with this change as a module, and Mesa aurora-wip f3639d31. Each boot starts 6-worker targeted Vulkan CTS (synchronization2 basic/timeline, command buffers, render passes) right after login:
With the change, every boot logged exactly one retirement on the pass record, 33-47 s after boot during the first heavy load. For example:
The stall therefore happens on most boots. Without the change, it only becomes a failure when a client waits on the stalled group.
Qualification on the same stack: regression gate PERFORMANCE-REGRESSION-PASS, targeted CTS 4687 pass / 681 not supported / 0 fail, desktop alive, no new kernel errors.