Skip to content

Commit

Permalink
drm/kms: protect against fb helper not being created.
Browse files Browse the repository at this point in the history
If drivers don't init the fb helper on the connector, the cmdline
code won't work, but it shouldn't crash either.

Signed-off-by: Dave Airlie <airlied@redhat.com>
  • Loading branch information
Dave Airlie committed Sep 25, 2009
1 parent adea479 commit 8ef8678
Show file tree
Hide file tree
Showing 2 changed files with 23 additions and 4 deletions.
13 changes: 11 additions & 2 deletions drivers/gpu/drm/drm_crtc_helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -279,16 +279,25 @@ static struct drm_display_mode *drm_has_preferred_mode(struct drm_connector *con
static bool drm_has_cmdline_mode(struct drm_connector *connector)
{
struct drm_fb_helper_connector *fb_help_conn = connector->fb_helper_private;
struct drm_fb_helper_cmdline_mode *cmdline_mode = &fb_help_conn->cmdline_mode;
struct drm_fb_helper_cmdline_mode *cmdline_mode;

if (!fb_help_conn)
return false;

cmdline_mode = &fb_help_conn->cmdline_mode;
return cmdline_mode->specified;
}

static struct drm_display_mode *drm_pick_cmdline_mode(struct drm_connector *connector, int width, int height)
{
struct drm_fb_helper_connector *fb_help_conn = connector->fb_helper_private;
struct drm_fb_helper_cmdline_mode *cmdline_mode = &fb_help_conn->cmdline_mode;
struct drm_fb_helper_cmdline_mode *cmdline_mode;
struct drm_display_mode *mode = NULL;

if (!fb_help_conn)
return mode;

cmdline_mode = &fb_help_conn->cmdline_mode;
if (cmdline_mode->specified == false)
return mode;

Expand Down
14 changes: 12 additions & 2 deletions drivers/gpu/drm/drm_fb_helper.c
Original file line number Diff line number Diff line change
Expand Up @@ -90,8 +90,12 @@ static bool drm_fb_helper_connector_parse_command_line(struct drm_connector *con
int i;
enum drm_connector_force force = DRM_FORCE_UNSPECIFIED;
struct drm_fb_helper_connector *fb_help_conn = connector->fb_helper_private;
struct drm_fb_helper_cmdline_mode *cmdline_mode = &fb_help_conn->cmdline_mode;
struct drm_fb_helper_cmdline_mode *cmdline_mode;

if (!fb_help_conn)
return false;

cmdline_mode = &fb_help_conn->cmdline_mode;
if (!mode_option)
mode_option = fb_mode_option;

Expand Down Expand Up @@ -694,7 +698,13 @@ int drm_fb_helper_single_fb_probe(struct drm_device *dev,
/* first up get a count of crtcs now in use and new min/maxes width/heights */
list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
struct drm_fb_helper_connector *fb_help_conn = connector->fb_helper_private;
struct drm_fb_helper_cmdline_mode *cmdline_mode = &fb_help_conn->cmdline_mode;

struct drm_fb_helper_cmdline_mode *cmdline_mode;

if (!fb_help_conn)
continue;

cmdline_mode = &fb_help_conn->cmdline_mode;

if (cmdline_mode->bpp_specified) {
switch (cmdline_mode->bpp) {
Expand Down

0 comments on commit 8ef8678

Please sign in to comment.