Hi, On 7/8/22 20:21, Geert Uytterhoeven wrote: > Extract the code to check for a named mode parameter into its own > function, to streamline the main parsing flow. > > Signed-off-by: Geert Uytterhoeven <geert@xxxxxxxxxxxxxx> > --- > drivers/gpu/drm/drm_modes.c | 41 +++++++++++++++++++++++++++---------- > 1 file changed, 30 insertions(+), 11 deletions(-) > > diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c > index 30a7be97707bfb16..434383469e9d984d 100644 > --- a/drivers/gpu/drm/drm_modes.c > +++ b/drivers/gpu/drm/drm_modes.c > @@ -1749,6 +1749,30 @@ static const char * const drm_named_modes_whitelist[] = { > "PAL", > }; > > +static int drm_mode_parse_cmdline_named_mode(const char *name, > + unsigned int length, > + bool refresh, > + struct drm_cmdline_mode *mode) > +{ > + unsigned int i; > + int ret; > + > + for (i = 0; i < ARRAY_SIZE(drm_named_modes_whitelist); i++) { > + ret = str_has_prefix(name, drm_named_modes_whitelist[i]); > + if (!ret) As discussed in my review of 1/5 this needs to become: if (ret != length) > + continue; Which renders my other comment on this patch (length not being used) mute. Regards, Hans > + > + if (refresh) > + return -EINVAL; /* named + refresh is invalid */ > + > + strcpy(mode->name, drm_named_modes_whitelist[i]); > + mode->specified = true; > + return 0; > + } > + > + return 0; > +} > + > /** > * drm_mode_parse_command_line_for_connector - parse command line modeline for connector > * @mode_option: optional per connector mode option > @@ -1785,7 +1809,7 @@ bool drm_mode_parse_command_line_for_connector(const char *mode_option, > const char *bpp_ptr = NULL, *refresh_ptr = NULL, *extra_ptr = NULL; > const char *options_ptr = NULL; > char *bpp_end_ptr = NULL, *refresh_end_ptr = NULL; > - int i, len, ret; > + int len, ret; > > memset(mode, 0, sizeof(*mode)); > mode->panel_orientation = DRM_MODE_PANEL_ORIENTATION_UNKNOWN; > @@ -1823,16 +1847,11 @@ bool drm_mode_parse_command_line_for_connector(const char *mode_option, > } > > /* First check for a named mode */ > - for (i = 0; mode_end && i < ARRAY_SIZE(drm_named_modes_whitelist); i++) { > - ret = str_has_prefix(name, drm_named_modes_whitelist[i]); > - if (ret) { > - if (refresh_ptr) > - return false; /* named + refresh is invalid */ > - > - strcpy(mode->name, drm_named_modes_whitelist[i]); > - mode->specified = true; > - break; > - } > + if (mode_end) { > + ret = drm_mode_parse_cmdline_named_mode(name, mode_end, > + refresh_ptr, mode); > + if (ret) > + return false; > } > > /* No named mode? Check for a normal mode argument, e.g. 1024x768 */