From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 76F66C5DF85 for ; Thu, 20 Aug 2026 17:06:18 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: Content-Type:In-Reply-To:From:References:Cc:To:Subject:MIME-Version:Date: Message-ID:Reply-To:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=Z4jxRAgmGu6qOONmDUji01BEYH0iTGQlpmgV/kwEyHw=; b=BXDmFwYeexYS8eG0bzqW9YK1Wz G+3qiXCZcJsWW5Y0CuiomAZMatNZzRtLVZfk2PubxuDRPwAjEUV42kWsQa6gjanFOe05fApJO7lq/ xXdTdy1P1s664rTUMETqwF1uONt0A2JLJsNh6KlEIMKeOlaYmKAP3DtM7l2ZxbjXkE8nYkJcuzTWZ DOv5PJ4D+abaAb6F58k5InnMeRsn09SV5PNSgbCo4r8yH9+nwfQSoAjrEGomwJhaUXIwlMQ6S9Xjn ayOMk29OrhbFjPRfIE7HM3xsiZcRvKoYIjW83xObAouUQpNsHDkDQCLLpW/zZtPqhMBqlUhwG2tlK xkBiuxmw==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wx6DT-0000000Bw6h-0SNp; Thu, 20 Aug 2026 17:06:11 +0000 Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wx6DQ-0000000Bw6A-0z3a for linux-arm-kernel@lists.infradead.org; Thu, 20 Aug 2026 17:06:09 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787245566; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=Z4jxRAgmGu6qOONmDUji01BEYH0iTGQlpmgV/kwEyHw=; b=Mbh0hZ4yy8JnolMJz/NQQAETN7Jbx1ewT1aZiVJB4rBmc6uOvCGc9JeRpqIe0+j1kzwjyH Hi2wu8KMBvzRnU0I2IzmFsXXXtqgZGzulKKDRIheO6UuUQF/Ol2zqiHm1W5w1+P0Gli9qP g0woBba5FjyuBVlByKRAvLR4oaonu5E= Received: from mail-wr1-f72.google.com (mail-wr1-f72.google.com [209.85.221.72]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-650-9adAg73gPgKX7Q2AJi1Njw-1; Thu, 20 Aug 2026 13:06:03 -0400 X-MC-Unique: 9adAg73gPgKX7Q2AJi1Njw-1 X-Mimecast-MFC-AGG-ID: 9adAg73gPgKX7Q2AJi1Njw_1787245562 Received: by mail-wr1-f72.google.com with SMTP id ffacd0b85a97d-47feac2021eso75956f8f.3 for ; Thu, 20 Aug 2026 10:06:03 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787245562; x=1787850362; h=content-transfer-encoding:content-type:in-reply-to:from :content-language:references:cc:to:subject:user-agent:mime-version :date:message-id:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Z4jxRAgmGu6qOONmDUji01BEYH0iTGQlpmgV/kwEyHw=; b=OmwBsXVOvG9xbOf1kFsKjjhmNqCd8aby8lqKoPHX0lB9Cn6q6nXXyAItD+5dFb5O0v GXmJWZ5uFEwS3PuqfJWCIy1v5+Ik08ZnJB1i1iUnBkQxKhaGWUlg4tk1tghH6PWnJrJE cUOpA8v/Kvl1ob6aZw38jADTy2tJHUcTmHnNFzqT7E9lOY6pagxh7/ml0z83I8RP7MIe Rhhr2S9cA564pfmMRnFfVc0XuUDJIALsxHTyVlfw7nx7xmSLs8uQquydC/QPjREn/iqB EI3JFoBhfDWrUbtzzwQHpV06vr48kLUicwqXfiGgA8aJz337NFJOog0arQDWUL898XUK W1rw== X-Forwarded-Encrypted: i=1; AHgh+RrUNinfPR0qOaivSUurMGtf2jB6GTZxQIuOvXudnSEPZM5vdH2SF2O9czdJsTIdQd14Jdvm37e3P8idWKS8ECo/@lists.infradead.org X-Gm-Message-State: AFuF++n0VPa0VdnBXZ5FQ2uTRMmh2I0yqNrlwsDXkBJJxHCkENh+8Cvd ARs6etF9H5DV4sRHI4kMbGStMmWXrchByiFEzIgclqFUnb2iRhX76To5lLTH/g4am9yojAsOKuB /EOjrO/hBVOmCK30VVKEN1AB3fr5vZWHINFPOaNyos0khJgcz/EOH4RsS4V/x5UPWrA3dNIvGSV wG X-Gm-Gg: AR+sD12tsp8fWmbfIqjNR/UgIrbpLO9A38F80Do6dMT8p/RgaPVy5DbTVaoRgHmMM8O dWklsp2ZUJ4lfqeDVrtO95Us7A1aXB9EXIMg+rdbkUapnSOYsxmCdkwGfHBUS0qUOnOne1okls0 wNHwiRgZg+oCHlEjKV/YgkHoRCXZX1PHVFZgqTw853lbRT9O7eOccmU3sSXKdpmh5fCoc629quT Wxz1EhCAHECok0ozHfdVjPOsh+2LLN8+xHkgK3IQCCScXuxJ/DbpBR4NnbBLVUMzjWjipfPNTFk GKgdn/PG+Z3Zh+EQBbGVhIbHXw6GO9unyQcSSiOmKzorLujx3ZMoSMFznDCUJRW7184lJWyNHND 72zBSIUTA/j5qjov2D5O9Sby/lNW0XvMbm38H0JgK00odXQ== X-Received: by 2002:a05:6000:25fe:b0:47f:86af:8fe7 with SMTP id ffacd0b85a97d-482c0ba220fmr134370f8f.22.1787245562178; Thu, 20 Aug 2026 10:06:02 -0700 (PDT) X-Received: by 2002:a05:6000:25fe:b0:47f:86af:8fe7 with SMTP id ffacd0b85a97d-482c0ba220fmr134240f8f.22.1787245561785; Thu, 20 Aug 2026 10:06:01 -0700 (PDT) Received: from ?IPV6:2a01:e0a:11aa:87f0:935:4f8e:b423:64eb? ([2a01:e0a:11aa:87f0:935:4f8e:b423:64eb]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-482b14cf0a3sm13674489f8f.32.2026.08.20.10.06.00 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 20 Aug 2026 10:06:01 -0700 (PDT) Message-ID: <5e7e0d9c-2fe2-4c0f-a854-1b1a495b1a7f@redhat.com> Date: Thu, 20 Aug 2026 19:05:57 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 04/12] drm/panic: Return errno codes if panic output fails To: Thomas Zimmermann , javierm@redhat.com, airlied@gmail.com, simona@ffwll.ch, maarten.lankhorst@linux.intel.com, mripard@kernel.org Cc: dri-devel@lists.freedesktop.org, linux-doc@vger.kernel.org, amd-gfx@lists.freedesktop.org, rust-for-linux@vger.kernel.org, linux-hyperv@vger.kernel.org, intel-gfx@lists.freedesktop.org, intel-xe@lists.freedesktop.org, imx@lists.linux.dev, linux-arm-kernel@lists.infradead.org, nouveau@lists.freedesktop.org, linux-renesas-soc@vger.kernel.org, virtualization@lists.linux.dev, sashiko-reviews@lists.linux.dev References: <20260818125012.468092-1-tzimmermann@suse.de> <20260818125012.468092-5-tzimmermann@suse.de> From: Jocelyn Falempe In-Reply-To: <20260818125012.468092-5-tzimmermann@suse.de> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: DARxltLYfVAfydy3OEkRF8m9hZ_mFcqDO3S7hhFIBqs_1787245562 X-Mimecast-Originator: redhat.com Content-Language: en-US, fr Content-Type: text/plain; charset=UTF-8; format=flowed Content-Transfer-Encoding: 7bit X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.9.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20260820_100608_360010_855C8C0A X-CRM114-Status: GOOD ( 25.75 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On 18/08/2026 14:28, Thomas Zimmermann wrote: > Return errno codes from the panic output helpers to detect invalid > panic handling. Avoid flushing the display if an error ocured. The > unflushed display output might be helpful in debugging. > > For now, test the result values in the panic test cases. A later patch > will add support for retrying failed panic output. Thanks, it looks good to me. Reviewed-by: Jocelyn Falempe > > Signed-off-by: Thomas Zimmermann > --- > drivers/gpu/drm/drm_panic.c | 41 +++++++++++++++++--------- > drivers/gpu/drm/tests/drm_panic_test.c | 16 ++++++---- > 2 files changed, 37 insertions(+), 20 deletions(-) > > diff --git a/drivers/gpu/drm/drm_panic.c b/drivers/gpu/drm/drm_panic.c > index 96d238bfceee..594235661710 100644 > --- a/drivers/gpu/drm/drm_panic.c > +++ b/drivers/gpu/drm/drm_panic.c > @@ -478,7 +478,7 @@ static void drm_panic_logo_draw(struct drm_scanout_buffer *sb, struct drm_rect * > fg_color); > } > > -static void draw_panic_screen_user(struct drm_scanout_buffer *sb) > +static int draw_panic_screen_user(struct drm_scanout_buffer *sb) > { > u32 fg_color = drm_draw_color_from_xrgb8888(CONFIG_DRM_PANIC_FOREGROUND_COLOR, > sb->format->format); > @@ -489,7 +489,7 @@ static void draw_panic_screen_user(struct drm_scanout_buffer *sb) > unsigned int msg_width, msg_height; > > if (!font) > - return; > + return -EINVAL; > > r_screen = DRM_RECT_INIT(0, 0, sb->width, sb->height); > drm_panic_logo_rect(&r_logo, font); > @@ -508,6 +508,8 @@ static void draw_panic_screen_user(struct drm_scanout_buffer *sb) > drm_panic_logo_draw(sb, &r_logo, font, fg_color); > > draw_txt_rectangle(sb, font, panic_msg, panic_msg_lines, true, &r_msg, fg_color); > + > + return 0; > } > > /* > @@ -547,7 +549,7 @@ static int draw_line_with_wrap(struct drm_scanout_buffer *sb, const struct font_ > * Draw the kmsg buffer to the screen, starting from the youngest message at the bottom, > * and going up until reaching the top of the screen. > */ > -static void draw_panic_screen_kmsg(struct drm_scanout_buffer *sb) > +static int draw_panic_screen_kmsg(struct drm_scanout_buffer *sb) > { > u32 fg_color = drm_draw_color_from_xrgb8888(CONFIG_DRM_PANIC_FOREGROUND_COLOR, > sb->format->format); > @@ -562,7 +564,7 @@ static void draw_panic_screen_kmsg(struct drm_scanout_buffer *sb) > int yoffset; > > if (!font || font->width > sb->width) > - return; > + return -EINVAL; > > yoffset = sb->height - font->height - (sb->height % font->height) / 2; > > @@ -589,6 +591,8 @@ static void draw_panic_screen_kmsg(struct drm_scanout_buffer *sb) > start--; > } > } > + > + return 0; > } > > #if defined(CONFIG_DRM_PANIC_SCREEN_QR_CODE) > @@ -814,10 +818,11 @@ static int _draw_panic_screen_qr_code(struct drm_scanout_buffer *sb) > return 0; > } > > -static void draw_panic_screen_qr_code(struct drm_scanout_buffer *sb) > +static int draw_panic_screen_qr_code(struct drm_scanout_buffer *sb) > { > if (_draw_panic_screen_qr_code(sb)) > draw_panic_screen_user(sb); > + return 0; > } > #else > static void drm_panic_qr_init(void) {}; > @@ -888,23 +893,25 @@ static bool drm_panic_is_format_supported(const struct drm_format_info *format) > return drm_draw_can_convert_from_xrgb8888(format->format); > } > > -static void draw_panic_dispatch(struct drm_scanout_buffer *sb) > +static int draw_panic_dispatch(struct drm_scanout_buffer *sb) > { > + int ret; > + > switch (drm_panic_type) { > case DRM_PANIC_TYPE_KMSG: > - draw_panic_screen_kmsg(sb); > + ret = draw_panic_screen_kmsg(sb); > break; > - > #if IS_ENABLED(CONFIG_DRM_PANIC_SCREEN_QR_CODE) > case DRM_PANIC_TYPE_QR: > - draw_panic_screen_qr_code(sb); > + ret = draw_panic_screen_qr_code(sb); > break; > #endif > - > case DRM_PANIC_TYPE_USER: > default: > - draw_panic_screen_user(sb); > + ret = draw_panic_screen_user(sb); > } > + > + return ret; > } > > static void drm_panic_set_description(const char *description) > @@ -951,9 +958,15 @@ static void draw_panic_plane(struct drm_plane *plane, const char *description) > > drm_panic_set_description(description); > > - draw_panic_dispatch(&sb); > - if (plane->helper_private->panic_flush) > - plane->helper_private->panic_flush(plane); > + ret = draw_panic_dispatch(&sb); > + if (!ret) { > + /* > + * Only flush if we have a panic screen to display. Otherwise > + * it's probably better to leave the display output as-is. > + */ > + if (plane->helper_private->panic_flush) > + plane->helper_private->panic_flush(plane); > + } > > drm_panic_clear_description(); > > diff --git a/drivers/gpu/drm/tests/drm_panic_test.c b/drivers/gpu/drm/tests/drm_panic_test.c > index ad2f3a2f93b6..fdd77b0cc54c 100644 > --- a/drivers/gpu/drm/tests/drm_panic_test.c > +++ b/drivers/gpu/drm/tests/drm_panic_test.c > @@ -30,7 +30,7 @@ struct drm_test_mode { > const int width; > const int height; > const u32 format; > - void (*draw_screen)(struct drm_scanout_buffer *sb); > + int (*draw_screen)(struct drm_scanout_buffer *sb); > const char *fname; > }; > > @@ -87,7 +87,7 @@ static void drm_test_panic_screen_user_map(struct kunit *test) > const struct drm_test_mode *params = test->param_value; > char *fb; > int fb_size; > - int i; > + int i, ret; > > sb->format = drm_format_info(params->format); > fb_size = params->width * params->height * sb->format->cpp[0]; > @@ -102,7 +102,8 @@ static void drm_test_panic_screen_user_map(struct kunit *test) > sb->height = params->height; > sb->pitch[0] = params->width * sb->format->cpp[0]; > > - params->draw_screen(sb); > + ret = params->draw_screen(sb); > + KUNIT_ASSERT_EQ(test, ret, 0); > > for (i = 0; i < fb_size; i++) > drm_panic_check_color_byte(test, fb[i]); > @@ -119,7 +120,7 @@ static void drm_test_panic_screen_user_page(struct kunit *test) > { > struct drm_scanout_buffer *sb = test->priv; > const struct drm_test_mode *params = test->param_value; > - int fb_size, p, i, npages; > + int fb_size, p, i, npages, ret; > struct page **pages; > u8 *vaddr; > > @@ -146,7 +147,8 @@ static void drm_test_panic_screen_user_page(struct kunit *test) > sb->height = params->height; > sb->pitch[0] = params->width * sb->format->cpp[0]; > > - params->draw_screen(sb); > + ret = params->draw_screen(sb); > + KUNIT_ASSERT_EQ(test, ret, 0); > > for (p = 0; p < npages; p++) { > int bytes_in_page = (p == npages - 1) ? fb_size - p * PAGE_SIZE : PAGE_SIZE; > @@ -182,6 +184,7 @@ static void drm_test_panic_screen_user_set_pixel(struct kunit *test) > { > struct drm_scanout_buffer *sb = test->priv; > const struct drm_test_mode *params = test->param_value; > + int ret; > > sb->format = drm_format_info(params->format); > sb->set_pixel = drm_test_panic_set_pixel; > @@ -189,7 +192,8 @@ static void drm_test_panic_screen_user_set_pixel(struct kunit *test) > sb->height = params->height; > sb->private = test; > > - params->draw_screen(sb); > + ret = params->draw_screen(sb); > + KUNIT_ASSERT_EQ(test, ret, 0); > } > > static void drm_test_panic_desc(const struct drm_test_mode *t, char *desc)