[PATCH v4 0/7] drm: Reuse temporary memory for format conversion
Noralf Trønnes
noralf at tronnes.org
Sat Oct 7 12:01:17 UTC 2023
On 10/5/23 11:04, Thomas Zimmermann wrote:
> DRM's format-conversion helpers require temporary memory. Pass the
> buffer from the caller and keep it allocated over several calls. 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 kernel panics is
> fragile. The changes in this patchset enable the DRM panic handler to
> preallocate buffer storage before the panic occurs.
>
I've been thinking about this and afaiu this requires the display hw to
switch to the new panic buffer for scanout, right?
I don't think that is possible for any complex hw to do in a panic
situation. Or are you thinking that the driver should somehow "memcpy"
this buffer to the actual scanout buffer?
Noralf.
> As an additonal benefit, drivers can now keep the temporary storage
> across multiple updates. Avoiding memory allocation slightly reduces
> the CPU overhead of the format helpers.
>
> 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 afected 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 preallocate the format-conversion
> buffer in their plane's atomic_check function. The driver thus detects OOM
> errors before the display update begins.
>
> Tested with simpledrm.
>
> 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 | 212 +++++++++++++-----
> 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 | 8 +-
> 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, 428 insertions(+), 144 deletions(-)
>
>
> base-commit: 57d3b83a83c5527325efb5bcaf594da09fe4a41b
More information about the dri-devel
mailing list