OSDN Git Service

drm/i915: Use crtc->state in intel_fbdev_init_bios
authorMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Thu, 4 Oct 2018 09:46:01 +0000 (11:46 +0200)
committerMaarten Lankhorst <maarten.lankhorst@linux.intel.com>
Fri, 5 Oct 2018 13:18:38 +0000 (15:18 +0200)
fbdev init shouldn't race with userspace since it's called from
intel_modeset_init, so it's safe to dereference crtc->state and
assume nothing changed yet.

At least not more harmful than crtc->config.

Signed-off-by: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Reviewed-by: Ville Syrjälä <ville.syrjala@linux.intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20181004094604.2646-11-maarten.lankhorst@linux.intel.com
drivers/gpu/drm/i915/intel_fbdev.c

index f993329..2480c7d 100644 (file)
@@ -593,7 +593,7 @@ static bool intel_fbdev_init_bios(struct drm_device *dev,
                 * pipe.  Note we need to use the selected fb's pitch and bpp
                 * rather than the current pipe's, since they differ.
                 */
-               cur_size = intel_crtc->config->base.adjusted_mode.crtc_hdisplay;
+               cur_size = crtc->state->adjusted_mode.crtc_hdisplay;
                cur_size = cur_size * fb->base.format->cpp[0];
                if (fb->base.pitches[0] < cur_size) {
                        DRM_DEBUG_KMS("fb not wide enough for plane %c (%d vs %d)\n",
@@ -603,13 +603,13 @@ static bool intel_fbdev_init_bios(struct drm_device *dev,
                        break;
                }
 
-               cur_size = intel_crtc->config->base.adjusted_mode.crtc_vdisplay;
+               cur_size = crtc->state->adjusted_mode.crtc_vdisplay;
                cur_size = intel_fb_align_height(&fb->base, 0, cur_size);
                cur_size *= fb->base.pitches[0];
                DRM_DEBUG_KMS("pipe %c area: %dx%d, bpp: %d, size: %d\n",
                              pipe_name(intel_crtc->pipe),
-                             intel_crtc->config->base.adjusted_mode.crtc_hdisplay,
-                             intel_crtc->config->base.adjusted_mode.crtc_vdisplay,
+                             crtc->state->adjusted_mode.crtc_hdisplay,
+                             crtc->state->adjusted_mode.crtc_vdisplay,
                              fb->base.format->cpp[0] * 8,
                              cur_size);