QXL packs dumb framebuffers into a shared primary surface. Failed preparation and multihead updates can leave shadow bindings inconsistent; packing whole allocations instead of visible sources also produces oversized surfaces and incorrect coordinates. Patch 4 establishes atomic ownership of the shared shadow before patch 5 changes its geometry.
This series supersedes the single-patch v2 posted on September 24: https://lore.kernel.org/r/[email protected] Changes since v2: - Split out fixes for framebuffer pin unwinding, DirtyFB commit ordering and error propagation, and stale disabled-head-zero monitor metadata. - Replace BO-global shadow mutation and the shared redraw flag with prepared atomic plane-state ownership. Include every primary plane and CRTC in commit dependencies, replacing the lockless redraw of other heads. This addresses the state-lifetime and redraw-flag races raised by Sashiko AI: https://lore.kernel.org/r/[email protected] - Separate shadow lifetime from source-sized packing, retaining source X/Y translation, packed monitor origins and clipped DirtyFB updates. - Rebase onto mainline 6812ce4e4379 and expand regression coverage. The series also applies and builds on drm-misc-fixes 94cf5971b1d0. For drm-misc-next 98c7fc4219b9, patch 4 needs adaptation to the new atomic_create_state API. Validation: - Each commit builds on x86 with W=1 and no new sparse diagnostics. The final QXL driver is also compile-tested on ARM and ARM64. - QEMU/KVM tests cover error unwinding, commit/DirtyFB ordering, shared framebuffers, source offsets, clipped damage and concurrent modesets. Error-path and ordering tests used test-only hooks, absent from the series and final kernel. - End-to-end Xorg/SPICE tests verify multihead resizing and DPMS resume without an application repaint. OpenAI Codex assisted development and review of the patches and regression fixtures. Dillon Amburgey (5): drm/qxl: unpin the framebuffer when plane preparation fails drm/qxl: wait for pending commits before applying DirtyFB drm/qxl: clear the monitor configuration for disabled head zero drm/qxl: own packed primary shadows in atomic plane state drm/qxl: pack dumb heads from their plane source rectangles drivers/gpu/drm/qxl/qxl_display.c | 370 ++++++++++++++++++------------ drivers/gpu/drm/qxl/qxl_draw.c | 6 +- drivers/gpu/drm/qxl/qxl_drv.h | 5 +- 3 files changed, 229 insertions(+), 152 deletions(-) base-commit: 6812ce4e4379ffc99c52401ec28f0d7ffbc36206 -- 2.43.0
