OSDN Git Service

drm: Add drm_mode_init()
authorVille Syrjälä <ville.syrjala@linux.intel.com>
Fri, 18 Feb 2022 10:03:42 +0000 (12:03 +0200)
committerVille Syrjälä <ville.syrjala@linux.intel.com>
Mon, 14 Mar 2022 15:36:59 +0000 (17:36 +0200)
Add a variant of drm_mode_copy() that explicitly clears out
the list head of the destination mode. Helpful to guarantee
we don't have stack garbage left in there for on-stack modes.

Signed-off-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20220218100403.7028-2-ville.syrjala@linux.intel.com
Reviewed-by: Andrzej Hajda <andrzej.hajda@intel.com>
Reviewed-by: Harry Wentland <harry.wentland@amd.com>
drivers/gpu/drm/drm_modes.c
include/drm/drm_modes.h

index 3f819c7..6e7e10f 100644 (file)
@@ -942,6 +942,23 @@ void drm_mode_copy(struct drm_display_mode *dst, const struct drm_display_mode *
 EXPORT_SYMBOL(drm_mode_copy);
 
 /**
+ * drm_mode_init - initialize the mode from another mode
+ * @dst: mode to overwrite
+ * @src: mode to copy
+ *
+ * Copy an existing mode into another mode, zeroing the
+ * list head of the destination mode. Typically used
+ * to guarantee the list head is not left with stack
+ * garbage in on-stack modes.
+ */
+void drm_mode_init(struct drm_display_mode *dst, const struct drm_display_mode *src)
+{
+       memset(dst, 0, sizeof(*dst));
+       drm_mode_copy(dst, src);
+}
+EXPORT_SYMBOL(drm_mode_init);
+
+/**
  * drm_mode_duplicate - allocate and duplicate an existing mode
  * @dev: drm_device to allocate the duplicated mode for
  * @mode: mode to duplicate
index 2fa6b2c..a80ae96 100644 (file)
@@ -492,6 +492,8 @@ void drm_mode_set_crtcinfo(struct drm_display_mode *p,
                           int adjust_flags);
 void drm_mode_copy(struct drm_display_mode *dst,
                   const struct drm_display_mode *src);
+void drm_mode_init(struct drm_display_mode *dst,
+                  const struct drm_display_mode *src);
 struct drm_display_mode *drm_mode_duplicate(struct drm_device *dev,
                                            const struct drm_display_mode *mode);
 bool drm_mode_match(const struct drm_display_mode *mode1,