All of lore.kernel.org
 help / color / mirror / Atom feed
From: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
To: dri-devel@lists.freedesktop.org
Cc: Daniel Vetter <daniel.vetter@intel.com>,
	Tomi Valkeinen <tomi.valkeinen@ti.com>
Subject: [PATCH v4 04/14] drm: WARN when calling drm_format_info() for an unsupported format
Date: Thu,  8 Sep 2016 17:44:18 +0300	[thread overview]
Message-ID: <1473345868-25453-5-git-send-email-laurent.pinchart@ideasonboard.com> (raw)
In-Reply-To: <1473345868-25453-1-git-send-email-laurent.pinchart@ideasonboard.com>

The format helpers have historically treated unsupported formats as part
of the default case, returning values that are likely wrong. We can't
change this behaviour now without risking breaking drivers in difficult
to detect ways, but we can WARN on unsupported formats to catch faulty
callers.

The only exception is the framebuffer_check() function that calls
drm_format_info() to validate the format passed from userspace. This is
a valid use case that shouldn't generate a warning.

Signed-off-by: Laurent Pinchart <laurent.pinchart@ideasonboard.com>
---
 drivers/gpu/drm/drm_fourcc.c      | 32 ++++++++++++++++++++++++--------
 drivers/gpu/drm/drm_framebuffer.c |  2 +-
 include/drm/drm_fourcc.h          |  1 +
 3 files changed, 26 insertions(+), 9 deletions(-)

diff --git a/drivers/gpu/drm/drm_fourcc.c b/drivers/gpu/drm/drm_fourcc.c
index bf91c5044d84..0355b7ede8e4 100644
--- a/drivers/gpu/drm/drm_fourcc.c
+++ b/drivers/gpu/drm/drm_fourcc.c
@@ -102,15 +102,11 @@ char *drm_get_format_name(uint32_t format)
 }
 EXPORT_SYMBOL(drm_get_format_name);
 
-/**
- * drm_format_info - query information for a given format
- * @format: pixel format (DRM_FORMAT_*)
- *
- * Returns:
- * The instance of struct drm_format_info that describes the pixel format, or
- * NULL if the format is unsupported.
+/*
+ * Internal function to query information for a given format. See
+ * drm_format_info() for the public API.
  */
-const struct drm_format_info *drm_format_info(u32 format)
+const struct drm_format_info *__drm_format_info(u32 format)
 {
 	static const struct drm_format_info formats[] = {
 		{ .format = DRM_FORMAT_C8,		.depth = 8,  .num_planes = 1, .cpp = { 1, 0, 0 }, .hsub = 1, .vsub = 1 },
@@ -184,6 +180,26 @@ const struct drm_format_info *drm_format_info(u32 format)
 
 	return NULL;
 }
+
+/**
+ * drm_format_info - query information for a given format
+ * @format: pixel format (DRM_FORMAT_*)
+ *
+ * The caller should only pass a supported pixel format to this function.
+ * Unsupported pixel formats will generate a warning in the kernel log.
+ *
+ * Returns:
+ * The instance of struct drm_format_info that describes the pixel format, or
+ * NULL if the format is unsupported.
+ */
+const struct drm_format_info *drm_format_info(u32 format)
+{
+	const struct drm_format_info *info;
+
+	info = __drm_format_info(format);
+	WARN_ON(!info);
+	return info;
+}
 EXPORT_SYMBOL(drm_format_info);
 
 /**
diff --git a/drivers/gpu/drm/drm_framebuffer.c b/drivers/gpu/drm/drm_framebuffer.c
index ce8045228642..da29bdac2009 100644
--- a/drivers/gpu/drm/drm_framebuffer.c
+++ b/drivers/gpu/drm/drm_framebuffer.c
@@ -105,7 +105,7 @@ static int framebuffer_check(const struct drm_mode_fb_cmd2 *r)
 	const struct drm_format_info *info;
 	int i;
 
-	info = drm_format_info(r->pixel_format & ~DRM_FORMAT_BIG_ENDIAN);
+	info = __drm_format_info(r->pixel_format & ~DRM_FORMAT_BIG_ENDIAN);
 	if (!info) {
 		char *format_name = drm_get_format_name(r->pixel_format);
 		DRM_DEBUG_KMS("bad framebuffer format %s\n", format_name);
diff --git a/include/drm/drm_fourcc.h b/include/drm/drm_fourcc.h
index 4e79d6159856..7ffb114d2468 100644
--- a/include/drm/drm_fourcc.h
+++ b/include/drm/drm_fourcc.h
@@ -43,6 +43,7 @@ struct drm_format_info {
 	u8 vsub;
 };
 
+const struct drm_format_info *__drm_format_info(u32 format);
 const struct drm_format_info *drm_format_info(u32 format);
 uint32_t drm_mode_legacy_fb_format(uint32_t bpp, uint32_t depth);
 void drm_fb_get_bpp_depth(uint32_t format, unsigned int *depth, int *bpp);
-- 
Regards,

Laurent Pinchart

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

  parent reply	other threads:[~2016-09-08 14:44 UTC|newest]

Thread overview: 53+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2016-09-08 14:44 [PATCH v4 00/14] Centralize format information Laurent Pinchart
2016-09-08 14:44 ` [PATCH v4 01/14] drm: " Laurent Pinchart
2016-09-14 11:49   ` Tomi Valkeinen
2016-09-14 22:22     ` Laurent Pinchart
2016-09-15  6:22       ` Tomi Valkeinen
2016-09-15 16:12         ` Eric Engestrom
2016-09-15 23:30           ` Laurent Pinchart
2016-09-16  9:44             ` Tomi Valkeinen
2016-09-16  9:59               ` Laurent Pinchart
2016-09-18 10:17   ` [PATCH v4.1 " Laurent Pinchart
2016-09-21  7:23     ` Daniel Vetter
2016-09-21 11:21       ` Laurent Pinchart
2016-09-21 12:43         ` Daniel Vetter
2016-09-21 13:40     ` Eric Engestrom
2016-09-22  6:37       ` Daniel Vetter
2016-09-08 14:44 ` [PATCH v4 02/14] drm: Implement the drm_format_*() helpers as drm_format_info() wrappers Laurent Pinchart
2016-09-14 11:56   ` Tomi Valkeinen
2016-09-21  7:34   ` Daniel Vetter
2016-09-21 11:29     ` Laurent Pinchart
2016-09-08 14:44 ` [PATCH v4 03/14] drm: Use drm_format_info() in DRM core code Laurent Pinchart
2016-09-14 13:23   ` Tomi Valkeinen
2016-09-14 22:31     ` Laurent Pinchart
2016-09-21  7:26       ` Daniel Vetter
2016-09-08 14:44 ` Laurent Pinchart [this message]
2016-09-15  9:33   ` [PATCH v4 04/14] drm: WARN when calling drm_format_info() for an unsupported format Tomi Valkeinen
2016-09-08 14:44 ` [PATCH v4 05/14] drm: sti: Replace drm_fb_get_bpp_depth() with drm_format_plane_cpp() Laurent Pinchart
2016-09-09 12:08   ` Vincent ABRIOU
2016-09-08 14:44 ` [PATCH v4 06/14] drm: hdlcd: " Laurent Pinchart
2016-09-08 14:44 ` [PATCH v4 07/14] drm: tilcdc: " Laurent Pinchart
2016-09-15  9:36   ` Tomi Valkeinen
2016-09-15  9:49     ` Jyri Sarha
2016-09-15 21:40       ` [PATCH v4.1 " Laurent Pinchart
2016-09-08 14:44 ` [PATCH v4 08/14] drm: cirrus: " Laurent Pinchart
2016-09-21  7:36   ` Daniel Vetter
2016-09-08 14:44 ` [PATCH v4 09/14] drm: gma500: Replace drm_fb_get_bpp_depth() with drm_format_info() Laurent Pinchart
2016-09-21  7:35   ` Daniel Vetter
2016-09-08 14:44 ` [PATCH v4 10/14] drm: amdgpu: Replace drm_fb_get_bpp_depth() with drm_format_plane_cpp() Laurent Pinchart
2016-09-21  7:51   ` Daniel Vetter
2016-09-21 12:39     ` Laurent Pinchart
2016-09-21 12:46       ` Daniel Vetter
2016-09-21 13:59         ` Laurent Pinchart
2016-09-22  5:31           ` Daniel Vetter
2016-09-22  6:33             ` Laurent Pinchart
2016-09-08 14:44 ` [PATCH v4 11/14] drm: radeon: " Laurent Pinchart
2016-09-21  7:52   ` Daniel Vetter
2016-09-08 14:44 ` [PATCH v4 12/14] drm: vmwgfx: Replace drm_fb_get_bpp_depth() with drm_format_info() Laurent Pinchart
2016-09-21  7:31   ` Daniel Vetter
2016-09-23 12:40     ` Laurent Pinchart
2016-09-23 12:48       ` Daniel Vetter
2016-09-08 14:44 ` [PATCH v4 13/14] drm/arm: mali-dp: Replace drm_fb_get_bpp_depth() with drm_format_plane_cpp() Laurent Pinchart
2016-09-21  7:53   ` Daniel Vetter
2016-09-08 14:44 ` [PATCH v4 14/14] drm: Don't export the drm_fb_get_bpp_depth() function Laurent Pinchart
2016-09-15  9:41   ` Tomi Valkeinen

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=1473345868-25453-5-git-send-email-laurent.pinchart@ideasonboard.com \
    --to=laurent.pinchart@ideasonboard.com \
    --cc=daniel.vetter@intel.com \
    --cc=dri-devel@lists.freedesktop.org \
    --cc=tomi.valkeinen@ti.com \
    /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.