]> git.ipfire.org Git - thirdparty/kernel/stable.git/commitdiff
drm/probe-helper: warn about negative .get_modes()
authorJani Nikula <jani.nikula@intel.com>
Fri, 8 Mar 2024 16:03:39 +0000 (18:03 +0200)
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>
Wed, 3 Apr 2024 13:11:25 +0000 (15:11 +0200)
[ Upstream commit 7af03e688792293ba33149fb8df619a8dff90e80 ]

The .get_modes() callback is supposed to return the number of modes,
never a negative error code. If a negative value is returned, it'll just
be interpreted as a negative count, and added to previous calculations.

Document the rules, but handle the negative values gracefully with an
error message.

Cc: stable@vger.kernel.org
Acked-by: Thomas Zimmermann <tzimmermann@suse.de>
Link: https://patchwork.freedesktop.org/patch/msgid/50208c866facc33226a3c77b82bb96aeef8ef310.1709913674.git.jani.nikula@intel.com
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
Signed-off-by: Sasha Levin <sashal@kernel.org>
drivers/gpu/drm/drm_probe_helper.c
include/drm/drm_modeset_helper_vtables.h

index 3f479483d7d80f21febcda087570bcc6af2fd34c..15ed974bcb988947aefc8c2592efc484968cc750 100644 (file)
@@ -419,6 +419,13 @@ static int drm_helper_probe_get_modes(struct drm_connector *connector)
 
        count = connector_funcs->get_modes(connector);
 
+       /* The .get_modes() callback should not return negative values. */
+       if (count < 0) {
+               drm_err(connector->dev, ".get_modes() returned %pe\n",
+                       ERR_PTR(count));
+               count = 0;
+       }
+
        /*
         * Fallback for when DDC probe failed in drm_get_edid() and thus skipped
         * override/firmware EDID.
index e3c3ac615909474bce7163230ed53cb22e1e7919..159213786e6e1c549587402b4fd469f4b71d6fcc 100644 (file)
@@ -898,7 +898,8 @@ struct drm_connector_helper_funcs {
         *
         * RETURNS:
         *
-        * The number of modes added by calling drm_mode_probed_add().
+        * The number of modes added by calling drm_mode_probed_add(). Return 0
+        * on failures (no modes) instead of negative error codes.
         */
        int (*get_modes)(struct drm_connector *connector);