Re: [PATCH 07/12] drm/panic: Retry in dispatch function if panic output fails
Jocelyn Falempe <[email protected]>
| Newsgroups | org.freedesktop.lists.amd-gfx,dev.linux.lists.imx,dev.linux.lists.sashiko-reviews,dev.linux.lists.virtualization,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-doc,org.kernel.vger.linux-hyperv,org.kernel.vger.linux-renesas-soc,org.kernel.vger.rust-for-linux |
|---|---|
| Message-ID | <[email protected]> |
On 18/08/2026 14:28, Thomas Zimmermann wrote: > On failed output of QR codes and kmsg buffers, fall back to a user > message. QR-code output already did this internally, but now formally > support it in drm_panic_dispatch(). Streamlines the existing logic. > > Also pass module parameter drm_panic_type as a parameter to > drm_panic_dispatch(). This simpifies the implementation. It will later > allow for moving the function into a helper library. Thanks, it looks good to me. Reviewed-by: Jocelyn Falempe <[email protected]> > > Signed-off-by: Thomas Zimmermann <[email protected]> > --- > drivers/gpu/drm/drm_panic.c | 24 ++++++++++++------------ > 1 file changed, 12 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/drm_panic.c b/drivers/gpu/drm/drm_panic.c > index 12c39217cbcb..0960750bfce2 100644 > --- a/drivers/gpu/drm/drm_panic.c > +++ b/drivers/gpu/drm/drm_panic.c > @@ -746,9 +746,9 @@ static int drm_panic_get_qr_code(u8 **qr_image, unsigned int qr_version) > /* > * Draw the panic message at the center of the screen, with a QR Code > */ > -static int _draw_panic_screen_qr_code(struct drm_scanout_buffer *sb, > - u32 fg_color, u32 bg_color, > - unsigned int qr_version) > +static int draw_panic_screen_qr_code(struct drm_scanout_buffer *sb, > + u32 fg_color, u32 bg_color, > + unsigned int qr_version) > { > const struct font_desc *font = get_default_font(sb->width, sb->height, NULL, NULL); > struct drm_rect r_screen, r_logo, r_msg, r_qr, r_qr_canvas; > @@ -816,15 +816,6 @@ static int _draw_panic_screen_qr_code(struct drm_scanout_buffer *sb, > drm_panic_blit(sb, &r_qr, qr_image, qr_pitch, scale, fg_color); > return 0; > } > - > -static int draw_panic_screen_qr_code(struct drm_scanout_buffer *sb, > - u32 fg_color, u32 bg_color, > - unsigned int qr_version) > -{ > - if (_draw_panic_screen_qr_code(sb, fg_color, bg_color, qr_version)) > - draw_panic_screen_user(sb, fg_color, bg_color); > - return 0; > -} > #else > static void drm_panic_qr_init(void) {}; > static void drm_panic_qr_exit(void) {}; > @@ -899,13 +890,22 @@ static int draw_panic_dispatch(struct drm_scanout_buffer *sb, enum drm_panic_typ > { > int ret; > > +retry: > switch (panic_type) { > case DRM_PANIC_TYPE_KMSG: > ret = draw_panic_screen_kmsg(sb, fg_color, bg_color); > + if (ret) { > + panic_type = DRM_PANIC_TYPE_USER; > + goto retry; > + } > break; > #if IS_ENABLED(CONFIG_DRM_PANIC_SCREEN_QR_CODE) > case DRM_PANIC_TYPE_QR: > ret = draw_panic_screen_qr_code(sb, fg_color, bg_color, qr_version); > + if (ret) { > + panic_type = DRM_PANIC_TYPE_USER; > + goto retry; > + } > break; > #endif > case DRM_PANIC_TYPE_USER: