|
@@ -2551,12 +2551,16 @@ intel_alloc_initial_plane_obj(struct intel_crtc *crtc,
|
|
if (size_aligned * 2 > dev_priv->gtt.stolen_usable_size)
|
|
if (size_aligned * 2 > dev_priv->gtt.stolen_usable_size)
|
|
return false;
|
|
return false;
|
|
|
|
|
|
|
|
+ mutex_lock(&dev->struct_mutex);
|
|
|
|
+
|
|
obj = i915_gem_object_create_stolen_for_preallocated(dev,
|
|
obj = i915_gem_object_create_stolen_for_preallocated(dev,
|
|
base_aligned,
|
|
base_aligned,
|
|
base_aligned,
|
|
base_aligned,
|
|
size_aligned);
|
|
size_aligned);
|
|
- if (!obj)
|
|
|
|
|
|
+ if (!obj) {
|
|
|
|
+ mutex_unlock(&dev->struct_mutex);
|
|
return false;
|
|
return false;
|
|
|
|
+ }
|
|
|
|
|
|
obj->tiling_mode = plane_config->tiling;
|
|
obj->tiling_mode = plane_config->tiling;
|
|
if (obj->tiling_mode == I915_TILING_X)
|
|
if (obj->tiling_mode == I915_TILING_X)
|
|
@@ -2569,12 +2573,12 @@ intel_alloc_initial_plane_obj(struct intel_crtc *crtc,
|
|
mode_cmd.modifier[0] = fb->modifier[0];
|
|
mode_cmd.modifier[0] = fb->modifier[0];
|
|
mode_cmd.flags = DRM_MODE_FB_MODIFIERS;
|
|
mode_cmd.flags = DRM_MODE_FB_MODIFIERS;
|
|
|
|
|
|
- mutex_lock(&dev->struct_mutex);
|
|
|
|
if (intel_framebuffer_init(dev, to_intel_framebuffer(fb),
|
|
if (intel_framebuffer_init(dev, to_intel_framebuffer(fb),
|
|
&mode_cmd, obj)) {
|
|
&mode_cmd, obj)) {
|
|
DRM_DEBUG_KMS("intel fb init failed\n");
|
|
DRM_DEBUG_KMS("intel fb init failed\n");
|
|
goto out_unref_obj;
|
|
goto out_unref_obj;
|
|
}
|
|
}
|
|
|
|
+
|
|
mutex_unlock(&dev->struct_mutex);
|
|
mutex_unlock(&dev->struct_mutex);
|
|
|
|
|
|
DRM_DEBUG_KMS("initial plane fb obj %p\n", obj);
|
|
DRM_DEBUG_KMS("initial plane fb obj %p\n", obj);
|