[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