diff options
Diffstat (limited to 'drivers/gpu/drm/i915/display/intel_fbdev.c')
| -rw-r--r-- | drivers/gpu/drm/i915/display/intel_fbdev.c | 14 | 
1 files changed, 4 insertions, 10 deletions
diff --git a/drivers/gpu/drm/i915/display/intel_fbdev.c b/drivers/gpu/drm/i915/display/intel_fbdev.c index b5c588e511dd..48c960ca12fb 100644 --- a/drivers/gpu/drm/i915/display/intel_fbdev.c +++ b/drivers/gpu/drm/i915/display/intel_fbdev.c @@ -141,10 +141,10 @@ static int intelfb_alloc(struct drm_fb_helper *helper,  	/* If the FB is too big, just don't use it since fbdev is not very  	 * important and we should probably use that space with FBC or other  	 * features. */ -	obj = NULL; +	obj = ERR_PTR(-ENODEV);  	if (size * 2 < dev_priv->stolen_usable_size)  		obj = i915_gem_object_create_stolen(dev_priv, size); -	if (obj == NULL) +	if (IS_ERR(obj))  		obj = i915_gem_object_create_shmem(dev_priv, size);  	if (IS_ERR(obj)) {  		DRM_ERROR("failed to allocate framebuffer\n"); @@ -204,7 +204,6 @@ static int intelfb_create(struct drm_fb_helper *helper,  		sizes->fb_height = intel_fb->base.height;  	} -	mutex_lock(&dev->struct_mutex);  	wakeref = intel_runtime_pm_get(&dev_priv->runtime_pm);  	/* Pin the GGTT vma for our access via info->screen_base. @@ -267,7 +266,6 @@ static int intelfb_create(struct drm_fb_helper *helper,  	ifbdev->vma_flags = flags;  	intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref); -	mutex_unlock(&dev->struct_mutex);  	vga_switcheroo_client_fb_set(pdev, info);  	return 0; @@ -275,7 +273,6 @@ out_unpin:  	intel_unpin_fb_vma(vma, flags);  out_unlock:  	intel_runtime_pm_put(&dev_priv->runtime_pm, wakeref); -	mutex_unlock(&dev->struct_mutex);  	return ret;  } @@ -292,11 +289,8 @@ static void intel_fbdev_destroy(struct intel_fbdev *ifbdev)  	drm_fb_helper_fini(&ifbdev->helper); -	if (ifbdev->vma) { -		mutex_lock(&ifbdev->helper.dev->struct_mutex); +	if (ifbdev->vma)  		intel_unpin_fb_vma(ifbdev->vma, ifbdev->vma_flags); -		mutex_unlock(&ifbdev->helper.dev->struct_mutex); -	}  	if (ifbdev->fb)  		drm_framebuffer_remove(&ifbdev->fb->base); @@ -445,7 +439,7 @@ int intel_fbdev_init(struct drm_device *dev)  	struct intel_fbdev *ifbdev;  	int ret; -	if (WARN_ON(!HAS_DISPLAY(dev_priv))) +	if (WARN_ON(!HAS_DISPLAY(dev_priv) || !INTEL_DISPLAY_ENABLED(dev_priv)))  		return -ENODEV;  	ifbdev = kzalloc(sizeof(struct intel_fbdev), GFP_KERNEL);  |