[PATCH v2 3/3] drm/panic: Add a kmsg panic screen
Jocelyn Falempe
jfalempe at redhat.com
Mon Jun 10 12:10:53 UTC 2024
On 07/06/2024 11:16, Javier Martinez Canillas wrote:
> Jocelyn Falempe <jfalempe at redhat.com> writes:
>
>> Add a kmsg option, which will display the last lines of kmsg,
>> and should be similar to fbcon.
>> Add a drm.panic_screen module parameter, so you can choose between
>> the different panic screens available.
>> two options currently, but more will be added later:
>> * "user": a short message telling the user to reboot the machine.
>> * "kmsg": fill the screen with the last lines of kmsg.
>>
>> You can even change it at runtime by writing to
>> /sys/module/drm/parameters/panic_screen
>>
>
> Great!
>
>> v2:
>> * use module parameter instead of Kconfig choice
>> (Javier Martinez Canillas)
>>
>> Signed-off-by: Jocelyn Falempe <jfalempe at redhat.com>
>> ---
>> drivers/gpu/drm/Kconfig | 11 ++++
>> drivers/gpu/drm/drm_panic.c | 108 ++++++++++++++++++++++++++++++++----
>> 2 files changed, 109 insertions(+), 10 deletions(-)
>>
>> diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
>> index 9703429de6b9..944815cee080 100644
>> --- a/drivers/gpu/drm/Kconfig
>> +++ b/drivers/gpu/drm/Kconfig
>> @@ -137,6 +137,17 @@ config DRM_PANIC_DEBUG
>> This is unsafe and should not be enabled on a production build.
>> If in doubt, say "N".
>>
>> +config DRM_PANIC_SCREEN
>> + string "Panic screen formater"
>> + default "user"
>> + depends on DRM_PANIC
>> + help
>> + This option enable to choose what will be displayed when a kernel
>> + panic occurs. You can choose between "user", a short message telling
>> + the user to reboot the system, or "kmsg" which will display the last
>> + lines of kmsg.
>
> Maybe I would mention here that this is only about the default, but that
> can be changed using the "drm.panic_screen=" kernel cmdline parameter or
> writting to the /sys/module/drm/parameters/panic_screen sysfs entry.
>
> [...]
Done
>
>> +static void draw_panic_static_kmsg(struct drm_scanout_buffer *sb)
>> +{
>> + u32 fg_color = convert_from_xrgb8888(CONFIG_DRM_PANIC_FOREGROUND_COLOR, sb->format->format);
>> + u32 bg_color = convert_from_xrgb8888(CONFIG_DRM_PANIC_BACKGROUND_COLOR, sb->format->format);
>> + const struct font_desc *font = get_default_font(sb->width, sb->height, NULL, NULL);
>
> Dan reported that get_default_font() can return NULL....
>
>> + struct drm_rect r_screen = DRM_RECT_INIT(0, 0, sb->width, sb->height);
>> + struct kmsg_dump_iter iter;
>> + char kmsg_buf[512];
>> + size_t kmsg_len;
>> + struct drm_panic_line line;
>> + int yoffset = sb->height - font->height - (sb->height % font->height) / 2;
>> +
>> + if (!font)
>> + return;
>> +
>
> ... so you have to calculate yoffset after checking if the font is not NULL.
Yes I fixed that too.
>
> with that fixed:
>
> Reviewed-by: Javier Martinez Canillas <javierm at redhat.com>
>
Thanks a lot.
I just pushed this series to drm-misc-next.
Best regards,
--
Jocelyn
More information about the dri-devel
mailing list