From: Maxime Ripard <mripard@kernel.org>
To: Daniel Vetter <daniel.vetter@ffwll.ch>,
David Airlie <airlied@linux.ie>,
Maarten Lankhorst <maarten.lankhorst@linux.intel.com>,
Thomas Zimmermann <tzimmermann@suse.de>,
Maxime Ripard <mripard@kernel.org>
Cc: dri-devel@lists.freedesktop.org
Subject: [PATCH 1/4] drm/plane: Make init functions panic consitently and explicitly
Date: Wed, 6 Dec 2023 12:13:48 +0100 [thread overview]
Message-ID: <20231206111351.300225-1-mripard@kernel.org> (raw)
All of the current plane init / allocation functions behave slightly
differently when it comes to argument sanitizing:
- drm_universal_plane_init() implicitly panics if the drm_device
pointer or the drm_plane_funcs pointer are NULL, and calls WARN_ON if
there's no destroy implementation but goes on with the initialization.
- drm_universal_plane_alloc() implicitly panics if the drm_device
pointer is NULL, and will call WARN_ON and return an error if the
drm_plane_funcs pointer is NULL.
- drmm_universal_plane_alloc() implicitly panics if the drm_device
pointer is NULL, and will call WARN_ON and return an error if the
drm_plane_funcs pointer is NULL or if there is a destroy
implementation.
The current consensus is that the drm_device pointer, the
drm_plane_funcs pointer, and the drm_plane pointer if relevant, should
be considered pre-requisite and the function should panic if we
encounter such a situation, and that returning an error in such a
situation is not welcome.
Let's make all functions consider those three pointers to be always set
and explicitly panic if they aren't. And let's document that behaviour
too.
Link: https://lore.kernel.org/dri-devel/20231128-kms-hdmi-connector-state-v4-5-c7602158306e@kernel.org/
Signed-off-by: Maxime Ripard <mripard@kernel.org>
---
drivers/gpu/drm/drm_plane.c | 15 +++++++++++----
include/drm/drm_plane.h | 6 ++++++
2 files changed, 17 insertions(+), 4 deletions(-)
diff --git a/drivers/gpu/drm/drm_plane.c b/drivers/gpu/drm/drm_plane.c
index 9e8e4c60983d..ce0fa98a0e3f 100644
--- a/drivers/gpu/drm/drm_plane.c
+++ b/drivers/gpu/drm/drm_plane.c
@@ -482,6 +482,9 @@ static int __drm_universal_plane_init(struct drm_device *dev,
*
* Returns:
* Zero on success, error code on failure.
+ *
+ * Panics:
+ * If @dev, @plane or @funcs are NULL.
*/
int drm_universal_plane_init(struct drm_device *dev, struct drm_plane *plane,
uint32_t possible_crtcs,
@@ -494,6 +497,9 @@ int drm_universal_plane_init(struct drm_device *dev, struct drm_plane *plane,
va_list ap;
int ret;
+ BUG_ON(!dev);
+ BUG_ON(!plane);
+ BUG_ON(!funcs);
WARN_ON(!funcs->destroy);
va_start(ap, name);
@@ -528,8 +534,9 @@ void *__drmm_universal_plane_alloc(struct drm_device *dev, size_t size,
va_list ap;
int ret;
- if (WARN_ON(!funcs || funcs->destroy))
- return ERR_PTR(-EINVAL);
+ BUG_ON(!dev);
+ BUG_ON(!funcs);
+ WARN_ON(funcs->destroy);
container = drmm_kzalloc(dev, size, GFP_KERNEL);
if (!container)
@@ -567,8 +574,8 @@ void *__drm_universal_plane_alloc(struct drm_device *dev, size_t size,
va_list ap;
int ret;
- if (drm_WARN_ON(dev, !funcs))
- return ERR_PTR(-EINVAL);
+ BUG_ON(!dev);
+ BUG_ON(!funcs);
container = kzalloc(size, GFP_KERNEL);
if (!container)
diff --git a/include/drm/drm_plane.h b/include/drm/drm_plane.h
index c6565a6f9324..2dab1b360fa2 100644
--- a/include/drm/drm_plane.h
+++ b/include/drm/drm_plane.h
@@ -824,6 +824,9 @@ void *__drmm_universal_plane_alloc(struct drm_device *dev,
*
* Returns:
* Pointer to new plane, or ERR_PTR on failure.
+ *
+ * Panics:
+ * If @dev or @funcs are NULL.
*/
#define drmm_universal_plane_alloc(dev, type, member, possible_crtcs, funcs, formats, \
format_count, format_modifiers, plane_type, name, ...) \
@@ -868,6 +871,9 @@ void *__drm_universal_plane_alloc(struct drm_device *dev,
*
* Returns:
* Pointer to new plane, or ERR_PTR on failure.
+ *
+ * Panics:
+ * If @dev or @funcs are NULL.
*/
#define drm_universal_plane_alloc(dev, type, member, possible_crtcs, funcs, formats, \
format_count, format_modifiers, plane_type, name, ...) \
--
2.43.0
next reply other threads:[~2023-12-06 11:14 UTC|newest]
Thread overview: 6+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-06 11:13 Maxime Ripard [this message]
2023-12-06 11:13 ` [PATCH 2/4] drm/crtc: Make init functions panic consitently and explicitly Maxime Ripard
2023-12-06 11:13 ` [PATCH 3/4] drm/encoder: " Maxime Ripard
2023-12-06 11:13 ` [PATCH 4/4] drm/connector: " Maxime Ripard
2023-12-07 10:18 ` [PATCH 1/4] drm/plane: " Jani Nikula
2023-12-07 13:05 ` Maxime Ripard
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231206111351.300225-1-mripard@kernel.org \
--to=mripard@kernel.org \
--cc=airlied@linux.ie \
--cc=daniel.vetter@ffwll.ch \
--cc=dri-devel@lists.freedesktop.org \
--cc=maarten.lankhorst@linux.intel.com \
--cc=tzimmermann@suse.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.