drm/modes: parse_cmdline: Set bpp/refresh_specified after successful parsing
authorHans de Goede <hdegoede@redhat.com>
Mon, 18 Nov 2019 15:51:28 +0000 (16:51 +0100)
committerHans de Goede <hdegoede@redhat.com>
Mon, 16 Dec 2019 11:13:18 +0000 (12:13 +0100)
drm_connector_get_cmdline_mode() calls
drm_mode_parse_command_line_for_connector() with &connector->cmdline_mode
as mode argument, so anything which we store in the mode arguments gets
kept even if we return false.

Avoid storing a possibly false-postive bpp/refresh_specified setting
in connector->cmdline_mode by moving the setting of these to after
successful parsing of the bpp/refresh parts of the video= argument.

Acked-by: Maxime Ripard <mripard@kernel.org>
Signed-off-by: Hans de Goede <hdegoede@redhat.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20191118155134.30468-7-hdegoede@redhat.com
drivers/gpu/drm/drm_modes.c

index 80cb247c83c7a145965004b65e052f418ff0b38f..72828fa9fc91bada3b0ffe21c33bd46b16c2cb80 100644 (file)
@@ -1771,10 +1771,8 @@ bool drm_mode_parse_command_line_for_connector(const char *mode_option,
 
        /* Try to locate the bpp and refresh specifiers, if any */
        bpp_ptr = strchr(name, '-');
-       if (bpp_ptr) {
+       if (bpp_ptr)
                bpp_off = bpp_ptr - name;
-               mode->bpp_specified = true;
-       }
 
        refresh_ptr = strchr(name, '@');
        if (refresh_ptr) {
@@ -1782,7 +1780,6 @@ bool drm_mode_parse_command_line_for_connector(const char *mode_option,
                        return false;
 
                refresh_off = refresh_ptr - name;
-               mode->refresh_specified = true;
        }
 
        /* Locate the start of named options */
@@ -1825,6 +1822,8 @@ bool drm_mode_parse_command_line_for_connector(const char *mode_option,
                ret = drm_mode_parse_cmdline_bpp(bpp_ptr, &bpp_end_ptr, mode);
                if (ret)
                        return false;
+
+               mode->bpp_specified = true;
        }
 
        if (refresh_ptr) {
@@ -1832,6 +1831,8 @@ bool drm_mode_parse_command_line_for_connector(const char *mode_option,
                                                     &refresh_end_ptr, mode);
                if (ret)
                        return false;
+
+               mode->refresh_specified = true;
        }
 
        /*