Skip to content

Commit

Permalink
drm/gma500/cdv: Fix cursor gem obj referencing on cdv
Browse files Browse the repository at this point in the history
The internal crtc cursor gem object pointer was never set/updated since
it was required to be set in the first place.

Fixing this will make the pin/unpin count match and prevent cursor
objects from leaking when userspace drops all references to it. Also
make sure we drop the gem obj reference on failure.

This patch only affects Cedarview chips.

Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
  • Loading branch information
Patrik Jakobsson committed Jun 9, 2013
1 parent 3463cf1 commit 70b1304
Showing 1 changed file with 11 additions and 5 deletions.
16 changes: 11 additions & 5 deletions drivers/gpu/drm/gma500/cdv_intel_display.c
Original file line number Diff line number Diff line change
Expand Up @@ -1462,7 +1462,7 @@ static int cdv_intel_crtc_cursor_set(struct drm_crtc *crtc,
size_t addr = 0;
struct gtt_range *gt;
struct drm_gem_object *obj;
int ret;
int ret = 0;

/* if we want to turn of the cursor ignore width and height */
if (!handle) {
Expand Down Expand Up @@ -1499,7 +1499,8 @@ static int cdv_intel_crtc_cursor_set(struct drm_crtc *crtc,

if (obj->size < width * height * 4) {
dev_dbg(dev->dev, "buffer is to small\n");
return -ENOMEM;
ret = -ENOMEM;
goto unref_cursor;
}

gt = container_of(obj, struct gtt_range, gem);
Expand All @@ -1508,7 +1509,7 @@ static int cdv_intel_crtc_cursor_set(struct drm_crtc *crtc,
ret = psb_gtt_pin(gt);
if (ret) {
dev_err(dev->dev, "Can not pin down handle 0x%x\n", handle);
return ret;
goto unref_cursor;
}

addr = gt->offset; /* Or resource.start ??? */
Expand All @@ -1532,9 +1533,14 @@ static int cdv_intel_crtc_cursor_set(struct drm_crtc *crtc,
struct gtt_range, gem);
psb_gtt_unpin(gt);
drm_gem_object_unreference(psb_intel_crtc->cursor_obj);
psb_intel_crtc->cursor_obj = obj;
}
return 0;

psb_intel_crtc->cursor_obj = obj;
return ret;

unref_cursor:
drm_gem_object_unreference(obj);
return ret;
}

static int cdv_intel_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
Expand Down

0 comments on commit 70b1304

Please sign in to comment.