Commit fb4b8ce1 authored by Chris Wilson's avatar Chris Wilson

drm/i915/fbdev: Call intel_unpin_fb_obj() on release

When releasing the intel_fbdev, we should unpin the framebuffer that we
pinned during construction.
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Link: http://patchwork.freedesktop.org/patch/msgid/1461833819-3991-1-git-send-email-chris@chris-wilson.co.uk
parent fe3db79b
...@@ -2310,7 +2310,7 @@ intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb, ...@@ -2310,7 +2310,7 @@ intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb,
return ret; return ret;
} }
static void intel_unpin_fb_obj(struct drm_framebuffer *fb, unsigned int rotation) void intel_unpin_fb_obj(struct drm_framebuffer *fb, unsigned int rotation)
{ {
struct drm_i915_gem_object *obj = intel_fb_obj(fb); struct drm_i915_gem_object *obj = intel_fb_obj(fb);
struct i915_ggtt_view view; struct i915_ggtt_view view;
......
...@@ -1163,6 +1163,7 @@ void intel_release_load_detect_pipe(struct drm_connector *connector, ...@@ -1163,6 +1163,7 @@ void intel_release_load_detect_pipe(struct drm_connector *connector,
struct drm_modeset_acquire_ctx *ctx); struct drm_modeset_acquire_ctx *ctx);
int intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb, int intel_pin_and_fence_fb_obj(struct drm_framebuffer *fb,
unsigned int rotation); unsigned int rotation);
void intel_unpin_fb_obj(struct drm_framebuffer *fb, unsigned int rotation);
struct drm_framebuffer * struct drm_framebuffer *
__intel_framebuffer_create(struct drm_device *dev, __intel_framebuffer_create(struct drm_device *dev,
struct drm_mode_fb_cmd2 *mode_cmd, struct drm_mode_fb_cmd2 *mode_cmd,
......
...@@ -287,7 +287,7 @@ static int intelfb_create(struct drm_fb_helper *helper, ...@@ -287,7 +287,7 @@ static int intelfb_create(struct drm_fb_helper *helper,
out_destroy_fbi: out_destroy_fbi:
drm_fb_helper_release_fbi(helper); drm_fb_helper_release_fbi(helper);
out_unpin: out_unpin:
i915_gem_object_ggtt_unpin(obj); intel_unpin_fb_obj(&ifbdev->fb->base, BIT(DRM_ROTATE_0));
out_unlock: out_unlock:
mutex_unlock(&dev->struct_mutex); mutex_unlock(&dev->struct_mutex);
return ret; return ret;
...@@ -551,6 +551,11 @@ static void intel_fbdev_destroy(struct drm_device *dev, ...@@ -551,6 +551,11 @@ static void intel_fbdev_destroy(struct drm_device *dev,
if (ifbdev->fb) { if (ifbdev->fb) {
drm_framebuffer_unregister_private(&ifbdev->fb->base); drm_framebuffer_unregister_private(&ifbdev->fb->base);
mutex_lock(&dev->struct_mutex);
intel_unpin_fb_obj(&ifbdev->fb->base, BIT(DRM_ROTATE_0));
mutex_unlock(&dev->struct_mutex);
drm_framebuffer_remove(&ifbdev->fb->base); drm_framebuffer_remove(&ifbdev->fb->base);
} }
} }
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment