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)
committerJani Nikula <jani.nikula@intel.com>
Wed, 13 Mar 2024 08:44:14 +0000 (10:44 +0200)
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>
drivers/gpu/drm/drm_probe_helper.c
include/drm/drm_modeset_helper_vtables.h

index 19ecb749704bee4ecdf29d56e41eb871fb0e5d62..75f84753f6ee339f28647923426ca9c4e3c4d83a 100644 (file)
@@ -422,6 +422,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 881b03e4dc2882844eb641b23ea34a9e10101d27..9ed42469540eb63e6a45d138ee2a51ff41d91b81 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);