aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPatrik Jakobsson <patrik.r.jakobsson@gmail.com>2013-06-05 08:24:01 -0400
committerPatrik Jakobsson <patrik.r.jakobsson@gmail.com>2013-06-09 12:02:02 -0400
commit820de86a90089ee607d7864538c98a23b503c846 (patch)
tree41cee1ce7c7673efe68ca47189d5dadea5f82bfb
parent61bb3fea44b71dd9935227920b036fdb96936f4d (diff)
drm/gma500/psb: Unpin framebuffer on crtc disable
The framebuffer needs to be unpinned in the crtc->disable callback because of previous pinning in psb_intel_pipe_set_base(). This will fix a memory leak where the framebuffer was released but not unpinned properly. This patch only affects Poulsbo. Bugzilla: https://bugzilla.redhat.com/show_bug.cgi?id=889511 Bugzilla: https://bugzilla.novell.com/show_bug.cgi?id=812113 Cc: stable@vger.kernel.org Reviewed-by: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Patrik Jakobsson <patrik.r.jakobsson@gmail.com>
-rw-r--r--drivers/gpu/drm/gma500/psb_intel_display.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/drivers/gpu/drm/gma500/psb_intel_display.c b/drivers/gpu/drm/gma500/psb_intel_display.c
index 6e8f42b61ff6..12d129ef21a9 100644
--- a/drivers/gpu/drm/gma500/psb_intel_display.c
+++ b/drivers/gpu/drm/gma500/psb_intel_display.c
@@ -1150,6 +1150,19 @@ static void psb_intel_crtc_destroy(struct drm_crtc *crtc)
1150 kfree(psb_intel_crtc); 1150 kfree(psb_intel_crtc);
1151} 1151}
1152 1152
1153static void psb_intel_crtc_disable(struct drm_crtc *crtc)
1154{
1155 struct gtt_range *gt;
1156 struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
1157
1158 crtc_funcs->dpms(crtc, DRM_MODE_DPMS_OFF);
1159
1160 if (crtc->fb) {
1161 gt = to_psb_fb(crtc->fb)->gtt;
1162 psb_gtt_unpin(gt);
1163 }
1164}
1165
1153const struct drm_crtc_helper_funcs psb_intel_helper_funcs = { 1166const struct drm_crtc_helper_funcs psb_intel_helper_funcs = {
1154 .dpms = psb_intel_crtc_dpms, 1167 .dpms = psb_intel_crtc_dpms,
1155 .mode_fixup = psb_intel_crtc_mode_fixup, 1168 .mode_fixup = psb_intel_crtc_mode_fixup,
@@ -1157,6 +1170,7 @@ const struct drm_crtc_helper_funcs psb_intel_helper_funcs = {
1157 .mode_set_base = psb_intel_pipe_set_base, 1170 .mode_set_base = psb_intel_pipe_set_base,
1158 .prepare = psb_intel_crtc_prepare, 1171 .prepare = psb_intel_crtc_prepare,
1159 .commit = psb_intel_crtc_commit, 1172 .commit = psb_intel_crtc_commit,
1173 .disable = psb_intel_crtc_disable,
1160}; 1174};
1161 1175
1162const struct drm_crtc_funcs psb_intel_crtc_funcs = { 1176const struct drm_crtc_funcs psb_intel_crtc_funcs = {