DRM's format-conversion helpers require temporary memory. Pass the buffer from the caller to allow the caller to preallocate the buffer memory. The motivation for this patchset is the recent work on a DRM panic handler. [1] The panic handler requires format conversion to display an error to the screen. But allocating memory during a kernel panic is fragile. The changes in this patchset enable the DRM panic handler to preallocate buffer storage before the panic occurs. Patch 1 adds struct drm_format_conv_state, a simple interface to pass around the buffer storage. Patch 2 adds an instance of the struct to the shadow-plane state. Patch 3 moves the buffer's memory management from the format helpers into their callers within the DRM drivers. Most of the affected drivers use the state instance stored in their shadow- plane state. The shadow-plane code releases the buffer memory automatically. Patches 4 to 7 update three drivers to pre-allocate the format-conversion buffer in their plane's atomic_check function. The drivers thus detect OOM errors before the display update begins. Tested with simpledrm. v5: * fix repaper patch (Noralf) * fix documentation (Javier, Noralf, kernel test robot) v4: * rename struct to drm_format_conv_state (Javier) * replace ARRAY_SIZE() with sizeof() (Jani) * store buffer in shadow-plane state (Javier, Maxime) * prealloc in atomic_check in several drivers v3: * no changes v2: * reserve storage during probing in the drivers [1] https://patchwork.freedesktop.org/series/122244/ Thomas Zimmermann (7): drm/format-helper: Cache buffers with struct drm_format_conv_state drm/atomic-helper: Add format-conversion state to shadow-plane state drm/format-helper: Pass format-conversion state to helpers drm/ofdrm: Preallocate format-conversion buffer in atomic_check drm/simpledrm: Preallocate format-conversion buffer in atomic_check drm/ssd130x: Fix atomic_check for disabled planes drm/ssd130x: Preallocate format-conversion buffer in atomic_check drivers/gpu/drm/drm_format_helper.c | 215 +++++++++++++----- drivers/gpu/drm/drm_gem_atomic_helper.c | 9 + drivers/gpu/drm/drm_mipi_dbi.c | 19 +- drivers/gpu/drm/gud/gud_pipe.c | 30 ++- drivers/gpu/drm/solomon/ssd130x.c | 36 ++- .../gpu/drm/tests/drm_format_helper_test.c | 72 +++--- drivers/gpu/drm/tiny/cirrus.c | 3 +- drivers/gpu/drm/tiny/ili9225.c | 10 +- drivers/gpu/drm/tiny/ofdrm.c | 16 +- drivers/gpu/drm/tiny/repaper.c | 10 +- drivers/gpu/drm/tiny/simpledrm.c | 43 +++- drivers/gpu/drm/tiny/st7586.c | 19 +- include/drm/drm_format_helper.h | 81 +++++-- include/drm/drm_gem_atomic_helper.h | 10 + include/drm/drm_mipi_dbi.h | 4 +- 15 files changed, 433 insertions(+), 144 deletions(-) base-commit: fe09b9f4c1435d9ce59b4729994b86a856db852f prerequisite-patch-id: 0aa359f6144c4015c140c8a6750be19099c676fb prerequisite-patch-id: c67e5d886a47b7d0266d81100837557fda34cb24 prerequisite-patch-id: cbc453ee02fae02af22fbfdce56ab732c7a88c36 -- 2.42.0