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 154E6C5DF85 for ; Thu, 20 Aug 2026 17:26:16 +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=uaqd7WkU+EW7h5S2++0RngfynnNZHWf+0zvKQIG7YdI=; b=PHovOwh7o1TgCVbYQiyIkkMBqg h/IQj3oV/B4UJ0elUeUa2/kQEm4OAttpquGfkIqc6IWkFUxkCMzHDtjSPVQlu9XKSA5j//A7fT1Y7 W4zd8ihTXjWhU5satFcMmhTM6BNIFqOE55KUbclRO2kSZbLxIzgYOyGwOXxSNDraRetM/HOgO8F3O j8MT/ryGz9shl0cZLnXw/wtUbYFfc+Y9k2sIOZ2CzXWovIKRU5YpjXF6mL+D19/2dnpS7bXFIKrrS gpv/qJt8mZTw31pCQiaaFe2JABZKfhJffXZyb+TMMsuuoeVMsr1izAzt0MRrQoWontxIhxp2kDc94 ZKehLXZg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.99.1 #2 (Red Hat Linux)) id 1wx6Wb-0000000BxnM-477W; Thu, 20 Aug 2026 17:25:57 +0000 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by bombadil.infradead.org with esmtps (Exim 4.99.1 #2 (Red Hat Linux)) id 1wx6WY-0000000Bxml-1hip for linux-arm-kernel@lists.infradead.org; Thu, 20 Aug 2026 17:25:56 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1787246753; 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=uaqd7WkU+EW7h5S2++0RngfynnNZHWf+0zvKQIG7YdI=; b=I6z4tC4GA+adOZEuku3gRxaGz4k+JpdfZ7X1GJlT7KYnoOY9bk6WXOPj5i7cYeSo+u1vWP LbyBy26px5XTd1OdB9GnytRpZ/ihhPnpa0WB8jz7DGBjUJuP6gveUlUYQAfv7Un+srSX1m lJWyHo1Hv5/orOxwbIfSzXN/+Uen32Y= Received: from mail-wm1-f71.google.com (mail-wm1-f71.google.com [209.85.128.71]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-655-JtnLr-ipPLuZSPO6CBzquw-1; Thu, 20 Aug 2026 13:25:51 -0400 X-MC-Unique: JtnLr-ipPLuZSPO6CBzquw-1 X-Mimecast-MFC-AGG-ID: JtnLr-ipPLuZSPO6CBzquw_1787246750 Received: by mail-wm1-f71.google.com with SMTP id 5b1f17b1804b1-490a767c7dcso516415e9.2 for ; Thu, 20 Aug 2026 10:25:51 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1787246750; x=1787851550; 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=uaqd7WkU+EW7h5S2++0RngfynnNZHWf+0zvKQIG7YdI=; b=QJopZ3EMXMllrNDxPTBHcKQ5zkHQ1OjHeBDhWBGFBaRovVmPLZ6Luq4BQFdrRn3gDO Tx5WKzh3JvVysJ2tQrceNSsNllHpBFoSqV2a1726tIqG0W0x950CSpSarepChzb3a/Zq w+3hedd4XIhg7H2EThpmteIGyxQagSPt986kLWnn+aecTXvazDKltM585JkJohTuHE1b JbOPZ2bPqWbc6xRAQL/7hvSVuqf2yg93MXfeg9cMMhCW35Hz7OK//+xYOiPLuG9f5IGV Q6YrZlang6y053YlGYDRwgUE4csnA4w8RjshjBWWWZh4PKhmLH9ZuC27WJmOERbzQDTk Juyw== X-Forwarded-Encrypted: i=1; AHgh+Rr8TeKxsoEDqUeiqKxiiWvw4AycLpIFXmk5Ol4rETzNM0e710FKHdlt5TFQsdj60/SsiPpBHD2ws/99sdIMCBAa@lists.infradead.org X-Gm-Message-State: AOJu0YyBpA5HUcAM7NHdToZkLSM3dPvBOdkCd+wtEFWddoWgVgasama7 dVPsEiAcOi0r/r08ULzx2pA5QuOsFziSa6aix3B33Bcgd0pW5SnS3BRbcpWikPIbEp4Y/H66zIq bYdKr+05HWbLAMLVTcQ5WWQKs0sYMcMi3FmoW5X8SOILge3NbZmReFODt+u30y/sB9yHImbIJOx YK X-Gm-Gg: AR+sD12vREN5WxItHEvZRCxI7OCI0QpY34A+5c4/c2wr3jLTIQVX/fzGV1lpJVWWdtD qkwynghafpktfheSZ1QEWVPOs8zsNOfvB81lFsd/g7t8W5t2W1KXWDlvAwFGiFGlgNlO1RO588t DMBXLU5HKgcEAf79R83a1hrG2+5nS4dgZrx7OfeJ3hM/TRVRj8NlXQs9iAapUlvfgobDNcf8t7e XaZZmweqcMUm3ghJa8HMqe2tP2uoVeZblK2Mal1wvMwyqznobnpIkEZMCs5lIVKgvdP3L8dxC4b 4KRSuwbsz9ma+vLuYyUxRYF7R5kJfqoj+8STL0Fr9smoyqanc2riXymoENQkmZ2ooDgAmfV69oI jnYZu9ewyDSlss57iD381C0wfmKjj1th5AzqX4i52+o79pw== X-Received: by 2002:a05:600c:1f85:b0:499:adb5:e7b2 with SMTP id 5b1f17b1804b1-499b8455863mr7320775e9.11.1787246750143; Thu, 20 Aug 2026 10:25:50 -0700 (PDT) X-Received: by 2002:a05:600c:1f85:b0:499:adb5:e7b2 with SMTP id 5b1f17b1804b1-499b8455863mr7319825e9.11.1787246749496; Thu, 20 Aug 2026 10:25:49 -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 5b1f17b1804b1-499aa074740sm165577655e9.7.2026.08.20.10.25.48 (version=TLS1_3 cipher=TLS_AES_128_GCM_SHA256 bits=128/128); Thu, 20 Aug 2026 10:25:48 -0700 (PDT) Message-ID: Date: Thu, 20 Aug 2026 19:25:45 +0200 MIME-Version: 1.0 User-Agent: Mozilla Thunderbird Subject: Re: [PATCH 09/12] drm/panic: Display panic screen via per-plane callback 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-10-tzimmermann@suse.de> From: Jocelyn Falempe In-Reply-To: <20260818125012.468092-10-tzimmermann@suse.de> X-Mimecast-Spam-Score: 0 X-Mimecast-MFC-PROC-ID: hMgpofZmGD4P4hqaz-NQnY4y33oaIBAOHdWUBKU8IU0_1787246750 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_102554_621379_3B2448C8 X-CRM114-Status: GOOD ( 46.27 ) 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: > Add display_panic_screen to struct drm_plane_funcs. If set on a plane, > register a panic handler for the plane from the DRM core's panic > handling. Invoke this helper from the core to display a panic screen. > > The new callback replaces get_scanout_buffer as signal for panic > support in a plane. Using get_scanout_buffer is now merely a detail > of the implementation. This will also free struct drm_scanout_buffer > for use cases besides panic handling. > > With display_panic_screen in place, rename draw_panic_plane() to > drm_plane_helper_display_panic_screen() and make it available to DRM > drivers via drm_panic_helper.h. Do not change the implementation or > functionality of this code. drm_plane_helper_display_panic_screen() > still supports kernel messages, user messages and QR codes on various > color formats. > > Then update all drivers that implement panic support. Provide the > initializer macro DRM_PANIC_PLANE_FUNCS that sets display_panic_screen > to drm_plane_helper_display_panic_screen(). If panic handling has > been disabled, it instead clears the callback. There's again no change > in functionality. > > This logically splits panic handling into a set of entry points in the > DRM code and a set of helper functions provided by drivers. The core > invokes the driver's helper via callback, while the driver can tailor > the implementation to its needs. Panic handling now works like most > other interfaces in the DRM framework. > > Locking and state-handling happens in the DRM core or helpers. Drivers > that receive a call to display_panic_screen can assume that no concurrent > modeset takes place on the plane or its CRTC. > > Also update the documentation. Move information about locking and state > guarantees from drm_panic_trylock() to display_panic_screen, where > drivers authors can find it easily. Move information about the features > of the current implementation to drm_panic_helper_display_panic_screen(). > Thanks, it looks good to me. Reviewed-by: Jocelyn Falempe > Signed-off-by: Thomas Zimmermann > --- > MAINTAINERS | 3 +- > .../amd/display/amdgpu_dm/amdgpu_dm_plane.c | 2 + > drivers/gpu/drm/ast/ast_mode.c | 2 + > drivers/gpu/drm/drm_panic.c | 78 ++++++++++--------- > drivers/gpu/drm/hyperv/hyperv_drm_modeset.c | 2 + > drivers/gpu/drm/i915/display/i9xx_plane.c | 3 + > .../drm/i915/display/skl_universal_plane.c | 4 + > drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c | 2 + > drivers/gpu/drm/mgag200/mgag200_drv.h | 4 +- > drivers/gpu/drm/nouveau/dispnv50/wndw.c | 2 + > .../gpu/drm/renesas/rcar-du/rcar_du_plane.c | 2 + > .../drm/renesas/shmobile/shmob_drm_plane.c | 2 + > drivers/gpu/drm/sysfb/drm_sysfb_helper.h | 4 +- > drivers/gpu/drm/sysfb/vesadrm.c | 1 + > drivers/gpu/drm/tidss/tidss_plane.c | 2 + > drivers/gpu/drm/tiny/bochs.c | 4 +- > drivers/gpu/drm/virtio/virtgpu_plane.c | 2 + > include/drm/drm_mode_config.h | 4 +- > include/drm/drm_modeset_helper_vtables.h | 11 ++- > include/drm/drm_panic.h | 49 +++--------- > include/drm/drm_panic_helper.h | 27 +++++++ > include/drm/drm_plane.h | 57 ++++++++++++++ > 22 files changed, 180 insertions(+), 87 deletions(-) > create mode 100644 include/drm/drm_panic_helper.h > > diff --git a/MAINTAINERS b/MAINTAINERS > index 928b3ba23a76..472c5c48729d 100644 > --- a/MAINTAINERS > +++ b/MAINTAINERS > @@ -9020,7 +9020,8 @@ F: drivers/gpu/drm/drm_draw.c > F: drivers/gpu/drm/drm_draw_internal.h > F: drivers/gpu/drm/drm_panic*.c > F: drivers/gpu/drm/tests/drm_panic_test.c > -F: include/drm/drm_panic* > +F: include/drm/drm_panic.h > +F: include/drm/drm_panic_helper.h > > DRM PANIC QR CODE > M: Jocelyn Falempe > diff --git a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c > index 824ef3ce5de0..eadc22a255bb 100644 > --- a/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c > +++ b/drivers/gpu/drm/amd/display/amdgpu_dm/amdgpu_dm_plane.c > @@ -28,6 +28,7 @@ > #include > #include "drm/drm_framebuffer.h" > #include > +#include > #include > #include > #include > @@ -2177,6 +2178,7 @@ static const struct drm_plane_funcs dm_plane_funcs = { > .atomic_set_property = dm_atomic_plane_set_property, > .atomic_get_property = dm_atomic_plane_get_property, > #endif > + DRM_PANIC_PLANE_FUNCS, > }; > > int amdgpu_dm_plane_init(struct amdgpu_display_manager *dm, > diff --git a/drivers/gpu/drm/ast/ast_mode.c b/drivers/gpu/drm/ast/ast_mode.c > index d5ed8c5c7925..ceebf9421100 100644 > --- a/drivers/gpu/drm/ast/ast_mode.c > +++ b/drivers/gpu/drm/ast/ast_mode.c > @@ -43,6 +43,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -652,6 +653,7 @@ static const struct drm_plane_funcs ast_primary_plane_funcs = { > .disable_plane = drm_atomic_helper_disable_plane, > .destroy = drm_plane_cleanup, > DRM_GEM_SHADOW_PLANE_FUNCS, > + DRM_PANIC_PLANE_FUNCS, > }; > > static int ast_primary_plane_init(struct ast_device *ast) > diff --git a/drivers/gpu/drm/drm_panic.c b/drivers/gpu/drm/drm_panic.c > index 2263a11efdf6..2ecb4d1f6d47 100644 > --- a/drivers/gpu/drm/drm_panic.c > +++ b/drivers/gpu/drm/drm_panic.c > @@ -28,6 +28,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -42,32 +43,18 @@ MODULE_LICENSE("GPL"); > /** > * DOC: overview > * > - * To enable DRM panic for a driver, the primary plane must implement a > - * &drm_plane_helper_funcs.get_scanout_buffer helper function. It is then > - * automatically registered to the drm panic handler. > - * When a panic occurs, the &drm_plane_helper_funcs.get_scanout_buffer will be > - * called, and the driver can provide a framebuffer so the panic handler can > - * draw the panic screen on it. Currently only linear buffer and a few color > - * formats are supported. > - * Optionally the driver can also provide a &drm_plane_helper_funcs.panic_flush > - * callback, that will be called after that, to send additional commands to the > - * hardware to make the scanout buffer visible. > - */ > - > -/* > - * This module displays a user friendly message on screen when a kernel panic > - * occurs. This is conflicting with fbcon, so you can only enable it when fbcon > - * is disabled. > - * It's intended for end-user, so have minimal technical/debug information. > + * This module displays a user friendly message on screen when a kernel > + * panic occurs. This is conflicting with fbcon, so you can only enable > + * it when fbcon is disabled. It's intended for end users and therefore > + * have minimal technical/debug information. > * > - * Implementation details: > + * To enable DRM panic for a driver, the at least one primary plane must > + * implement struct &drm_plane_funcs.display_panic_screen. The plane is > + * then automatically registered to the drm panic handler. > * > - * It is a panic handler, so it can't take lock, allocate memory, run tasks/irq, > - * or attempt to sleep. It's a best effort, and it may not be able to display > - * the message in all situations (like if the panic occurs in the middle of a > - * modesetting). > - * It will display only one static frame, so performance optimizations are low > - * priority as the machine is already in an unusable state. > + * When a panic occurs, the DRM panic handler calls struct > + * &drm_plane_funcs.display_panic_screen. See > + * drm_plane_helper_display_panic_screen() for a generic implementation. > */ > > struct drm_panic_line { > @@ -821,12 +808,6 @@ static void drm_panic_qr_init(void) {}; > static void drm_panic_qr_exit(void) {}; > #endif > > -enum drm_panic_type { > - DRM_PANIC_TYPE_KMSG, > - DRM_PANIC_TYPE_USER, > - DRM_PANIC_TYPE_QR, > -}; > - > static enum drm_panic_type drm_panic_type = -1; > > static const char *drm_panic_type_map[] = { > @@ -940,9 +921,29 @@ static void drm_panic_clear_description(void) > desc_line->txt = NULL; > } > > -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) > +/** > + * drm_plane_helper_display_panic_screen - Displays a panic screen according to the given settings > + * @plane: the DRM plane to display to > + * @description: error message to display > + * @panic_type: type of panic screen > + * @fg_color: text foreground color > + * @bg_color: text background color > + * @qr_version: version of the QR code, if any > + * > + * This helper display a panic screen on common primary planes. The panic > + * screen can either display a kernel message, a user message or a QR code. > + * > + * The helper uses struct drm_plane_helper_funcs.get_scanout_buffer, where > + * the plane can provide a scanout buffer that the panic handler can draw to. > + * Currently only linear buffer and a few color formats are supported. > + * > + * Optionally the plane can also provide a &drm_plane_helper_funcs.panic_flush > + * callback, which the DRM panic handler calls after drawing to send additional > + * commands to the hardware to make the scanout buffer visible. > + */ > +void drm_plane_helper_display_panic_screen(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; > @@ -970,6 +971,7 @@ static void draw_panic_plane(struct drm_plane *plane, const char *description, > > drm_panic_clear_description(); > } > +EXPORT_SYMBOL(drm_plane_helper_display_panic_screen); > > static void drm_panic_display_panic_screen(struct drm_plane *plane, const char *description) > { > @@ -992,8 +994,8 @@ static void drm_panic_display_panic_screen(struct drm_plane *plane, const char * > unsigned long flags; > > if (drm_panic_trylock(dev, flags)) { > - draw_panic_plane(plane, description, drm_panic_type, > - fg_color, bg_color, qr_version); > + plane->funcs->display_panic_screen(plane, description, drm_panic_type, > + fg_color, bg_color, qr_version); > drm_panic_unlock(dev, flags); > } > } > @@ -1064,7 +1066,7 @@ bool drm_panic_is_enabled(struct drm_device *dev) > return false; > > drm_for_each_plane(plane, dev) > - if (plane->helper_private && plane->helper_private->get_scanout_buffer) > + if (plane->funcs && plane->funcs->display_panic_screen) > return true; > return false; > } > @@ -1083,7 +1085,7 @@ void drm_panic_register(struct drm_device *dev) > return; > > drm_for_each_plane(plane, dev) { > - if (!plane->helper_private || !plane->helper_private->get_scanout_buffer) > + if (!plane->funcs || !plane->funcs->display_panic_screen) > continue; > plane->kmsg_panic.dump = drm_panic; > plane->kmsg_panic.max_reason = KMSG_DUMP_PANIC; > @@ -1110,7 +1112,7 @@ void drm_panic_unregister(struct drm_device *dev) > return; > > drm_for_each_plane(plane, dev) { > - if (!plane->helper_private || !plane->helper_private->get_scanout_buffer) > + if (!plane->funcs || !plane->funcs->display_panic_screen) > continue; > kmsg_dump_unregister(&plane->kmsg_panic); > } > diff --git a/drivers/gpu/drm/hyperv/hyperv_drm_modeset.c b/drivers/gpu/drm/hyperv/hyperv_drm_modeset.c > index 1855749c1e41..3bf228ef97ff 100644 > --- a/drivers/gpu/drm/hyperv/hyperv_drm_modeset.c > +++ b/drivers/gpu/drm/hyperv/hyperv_drm_modeset.c > @@ -18,6 +18,7 @@ > #include > #include > #include > +#include > #include > #include > #include > @@ -237,6 +238,7 @@ static const struct drm_plane_funcs hv_drm_plane_funcs = { > .disable_plane = drm_atomic_helper_disable_plane, > .destroy = drm_plane_cleanup, > DRM_GEM_SHADOW_PLANE_FUNCS, > + DRM_PANIC_PLANE_FUNCS, > }; > > static const struct drm_encoder_funcs hv_drm_simple_encoder_funcs_cleanup = { > diff --git a/drivers/gpu/drm/i915/display/i9xx_plane.c b/drivers/gpu/drm/i915/display/i9xx_plane.c > index df6da1c6a359..0902b17d0269 100644 > --- a/drivers/gpu/drm/i915/display/i9xx_plane.c > +++ b/drivers/gpu/drm/i915/display/i9xx_plane.c > @@ -8,6 +8,7 @@ > #include > #include > #include > +#include > #include > > #include "i9xx_plane.h" > @@ -887,6 +888,7 @@ static const struct drm_plane_funcs i965_plane_funcs = { > .atomic_destroy_state = intel_plane_destroy_state, > .format_mod_supported = i965_plane_format_mod_supported, > .format_mod_supported_async = intel_plane_format_mod_supported_async, > + DRM_PANIC_PLANE_FUNCS, > }; > > static const struct drm_plane_funcs i8xx_plane_funcs = { > @@ -897,6 +899,7 @@ static const struct drm_plane_funcs i8xx_plane_funcs = { > .atomic_destroy_state = intel_plane_destroy_state, > .format_mod_supported = i8xx_plane_format_mod_supported, > .format_mod_supported_async = intel_plane_format_mod_supported_async, > + DRM_PANIC_PLANE_FUNCS, > }; > > static void i9xx_disable_tiling(struct intel_plane *plane) > diff --git a/drivers/gpu/drm/i915/display/skl_universal_plane.c b/drivers/gpu/drm/i915/display/skl_universal_plane.c > index 07a683293352..45e8379d93d4 100644 > --- a/drivers/gpu/drm/i915/display/skl_universal_plane.c > +++ b/drivers/gpu/drm/i915/display/skl_universal_plane.c > @@ -7,6 +7,7 @@ > #include > #include > #include > +#include > #include > #include > > @@ -2707,6 +2708,7 @@ static const struct drm_plane_funcs skl_plane_funcs = { > .atomic_destroy_state = intel_plane_destroy_state, > .format_mod_supported = skl_plane_format_mod_supported, > .format_mod_supported_async = intel_plane_format_mod_supported_async, > + DRM_PANIC_PLANE_FUNCS, > }; > > static const struct drm_plane_funcs icl_plane_funcs = { > @@ -2717,6 +2719,7 @@ static const struct drm_plane_funcs icl_plane_funcs = { > .atomic_destroy_state = intel_plane_destroy_state, > .format_mod_supported = icl_plane_format_mod_supported, > .format_mod_supported_async = intel_plane_format_mod_supported_async, > + DRM_PANIC_PLANE_FUNCS, > }; > > static const struct drm_plane_funcs tgl_plane_funcs = { > @@ -2727,6 +2730,7 @@ static const struct drm_plane_funcs tgl_plane_funcs = { > .atomic_destroy_state = intel_plane_destroy_state, > .format_mod_supported = tgl_plane_format_mod_supported, > .format_mod_supported_async = intel_plane_format_mod_supported_async, > + DRM_PANIC_PLANE_FUNCS, > }; > > static void > diff --git a/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c b/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c > index c7ec09e557c1..377db7cea726 100644 > --- a/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c > +++ b/drivers/gpu/drm/imx/ipuv3/ipuv3-plane.c > @@ -14,6 +14,7 @@ > #include > #include > #include > +#include > #include > > #include