[PATCH 08/12] drm/panic: Split draw_panic_plane()
Thomas Zimmermann <[email protected]>
| Newsgroups | org.kernel.vger.linux-doc,dev.linux.lists.imx,dev.linux.lists.sashiko-reviews,dev.linux.lists.virtualization,org.freedesktop.lists.amd-gfx,org.freedesktop.lists.dri-devel,org.freedesktop.lists.intel-gfx,org.freedesktop.lists.intel-xe,org.freedesktop.lists.nouveau,org.infradead.lists.linux-arm-kernel,org.kernel.vger.linux-hyperv,org.kernel.vger.linux-renesas-soc,org.kernel.vger.rust-for-linux |
|---|---|
| Message-ID | <[email protected]> |
Move locking and parameters from draw_panic_plane() into the new helper drm_panic_display_panic_screen(). Call draw_panic_plane() from there. The new helper drm_panic_display_panic_screen() is now the DRM core's interface for displaying a panic screen. The code remaining in draw_panic_plane() still does all the heavy lifting. It will become a plane helper for DRM drivers. Signed-off-by: Thomas Zimmermann <[email protected]> --- drivers/gpu/drm/drm_panic.c | 60 ++++++++++++++++++++----------------- 1 file changed, 33 insertions(+), 27 deletions(-) diff --git a/drivers/gpu/drm/drm_panic.c b/drivers/gpu/drm/drm_panic.c index 0960750bfce2..2263a11efdf6 100644 --- a/drivers/gpu/drm/drm_panic.c +++ b/drivers/gpu/drm/drm_panic.c @@ -940,38 +940,21 @@ static void drm_panic_clear_description(void) desc_line->txt = NULL; } -static void draw_panic_plane(struct drm_plane *plane, const char *description) +static void draw_panic_plane(struct drm_plane *plane, const char *description, + enum drm_panic_type panic_type, u32 fg_color, u32 bg_color, + unsigned int qr_version) { struct drm_scanout_buffer sb = { }; int ret; - unsigned long flags; -#if defined(CONFIG_DRM_PANIC_FOREGROUND_COLOR) - u32 fg_color = CONFIG_DRM_PANIC_FOREGROUND_COLOR; -#else - u32 fg_color = 0x00ffffff; -#endif -#if defined(CONFIG_DRM_PANIC_BACKGROUND_COLOR) - u32 bg_color = CONFIG_DRM_PANIC_BACKGROUND_COLOR; -#else - u32 bg_color = 0x00000000; -#endif -#if IS_ENABLED(CONFIG_DRM_PANIC_SCREEN_QR_CODE) - unsigned int qr_version = panic_qr_version; -#else - unsigned int qr_version = 0; -#endif - - if (!drm_panic_trylock(plane->dev, flags)) - return; ret = plane->helper_private->get_scanout_buffer(plane, &sb); if (ret || !drm_panic_is_format_supported(sb.format)) - goto unlock; + return; /* One of these should be set, or it can't draw pixels */ if (!sb.set_pixel && !sb.pages && iosys_map_is_null(&sb.map[0])) - goto unlock; + return; drm_panic_set_description(description); @@ -986,9 +969,33 @@ static void draw_panic_plane(struct drm_plane *plane, const char *description) } drm_panic_clear_description(); +} -unlock: - drm_panic_unlock(plane->dev, flags); +static void drm_panic_display_panic_screen(struct drm_plane *plane, const char *description) +{ +#if defined(CONFIG_DRM_PANIC_FOREGROUND_COLOR) + u32 fg_color = CONFIG_DRM_PANIC_FOREGROUND_COLOR; +#else + u32 fg_color = 0x00ffffff; +#endif +#if defined(CONFIG_DRM_PANIC_BACKGROUND_COLOR) + u32 bg_color = CONFIG_DRM_PANIC_BACKGROUND_COLOR; +#else + u32 bg_color = 0x00000000; +#endif +#if IS_ENABLED(CONFIG_DRM_PANIC_SCREEN_QR_CODE) + unsigned int qr_version = panic_qr_version; +#else + unsigned int qr_version = 0; +#endif + struct drm_device *dev = plane->dev; + unsigned long flags; + + if (drm_panic_trylock(dev, flags)) { + draw_panic_plane(plane, description, drm_panic_type, + fg_color, bg_color, qr_version); + drm_panic_unlock(dev, flags); + } } static struct drm_plane *to_drm_plane(struct kmsg_dumper *kd) @@ -1001,10 +1008,9 @@ static void drm_panic(struct kmsg_dumper *dumper, struct kmsg_dump_detail *detai struct drm_plane *plane = to_drm_plane(dumper); if (detail->reason == KMSG_DUMP_PANIC) - draw_panic_plane(plane, detail->description); + drm_panic_display_panic_screen(plane, detail->description); } - /* * DEBUG FS, This is currently unsafe. * Create one file per plane, so it's possible to debug one plane at a time. @@ -1021,7 +1027,7 @@ static ssize_t debugfs_trigger_write(struct file *file, const char __user *user_ if (kstrtobool_from_user(user_buf, count, &run) == 0 && run) { struct drm_plane *plane = file->private_data; - draw_panic_plane(plane, "Test from debugfs"); + drm_panic_display_panic_screen(plane, "Test from debugfs"); } return count; } -- 2.55.0