diff options
author | Dave Airlie <airlied@redhat.com> | 2013-12-04 18:25:36 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2013-12-04 18:25:36 -0500 |
commit | 7bc494a93f52f76595e2378e480217c95da8dbe7 (patch) | |
tree | 0674404872430530275963363d1e623561c2d6b7 /drivers/gpu | |
parent | 60460f65514e5f9abc2392807d8fed1581739345 (diff) | |
parent | 0cbc330e12835fcbac44e33d5632d805b16635f2 (diff) |
Merge branch 'exynos-drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos into drm-fixes
two outstanding exynos fixes
* 'exynos-drm-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/daeinki/drm-exynos:
drm/exynos: release unhandled page flip events at postclose.
drm/exynos: Fix trivial typo in exynos_drm_fimd.c
Diffstat (limited to 'drivers/gpu')
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_drv.c | 35 | ||||
-rw-r--r-- | drivers/gpu/drm/exynos/exynos_drm_fimd.c | 2 |
2 files changed, 23 insertions, 14 deletions
diff --git a/drivers/gpu/drm/exynos/exynos_drm_drv.c b/drivers/gpu/drm/exynos/exynos_drm_drv.c index b676006a95a0..22b8f5eced80 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_drv.c +++ b/drivers/gpu/drm/exynos/exynos_drm_drv.c | |||
@@ -173,28 +173,37 @@ static int exynos_drm_open(struct drm_device *dev, struct drm_file *file) | |||
173 | static void exynos_drm_preclose(struct drm_device *dev, | 173 | static void exynos_drm_preclose(struct drm_device *dev, |
174 | struct drm_file *file) | 174 | struct drm_file *file) |
175 | { | 175 | { |
176 | exynos_drm_subdrv_close(dev, file); | ||
177 | } | ||
178 | |||
179 | static void exynos_drm_postclose(struct drm_device *dev, struct drm_file *file) | ||
180 | { | ||
176 | struct exynos_drm_private *private = dev->dev_private; | 181 | struct exynos_drm_private *private = dev->dev_private; |
177 | struct drm_pending_vblank_event *e, *t; | 182 | struct drm_pending_vblank_event *v, *vt; |
183 | struct drm_pending_event *e, *et; | ||
178 | unsigned long flags; | 184 | unsigned long flags; |
179 | 185 | ||
180 | /* release events of current file */ | 186 | if (!file->driver_priv) |
187 | return; | ||
188 | |||
189 | /* Release all events not unhandled by page flip handler. */ | ||
181 | spin_lock_irqsave(&dev->event_lock, flags); | 190 | spin_lock_irqsave(&dev->event_lock, flags); |
182 | list_for_each_entry_safe(e, t, &private->pageflip_event_list, | 191 | list_for_each_entry_safe(v, vt, &private->pageflip_event_list, |
183 | base.link) { | 192 | base.link) { |
184 | if (e->base.file_priv == file) { | 193 | if (v->base.file_priv == file) { |
185 | list_del(&e->base.link); | 194 | list_del(&v->base.link); |
186 | e->base.destroy(&e->base); | 195 | drm_vblank_put(dev, v->pipe); |
196 | v->base.destroy(&v->base); | ||
187 | } | 197 | } |
188 | } | 198 | } |
189 | spin_unlock_irqrestore(&dev->event_lock, flags); | ||
190 | 199 | ||
191 | exynos_drm_subdrv_close(dev, file); | 200 | /* Release all events handled by page flip handler but not freed. */ |
192 | } | 201 | list_for_each_entry_safe(e, et, &file->event_list, link) { |
202 | list_del(&e->link); | ||
203 | e->destroy(e); | ||
204 | } | ||
205 | spin_unlock_irqrestore(&dev->event_lock, flags); | ||
193 | 206 | ||
194 | static void exynos_drm_postclose(struct drm_device *dev, struct drm_file *file) | ||
195 | { | ||
196 | if (!file->driver_priv) | ||
197 | return; | ||
198 | 207 | ||
199 | kfree(file->driver_priv); | 208 | kfree(file->driver_priv); |
200 | file->driver_priv = NULL; | 209 | file->driver_priv = NULL; |
diff --git a/drivers/gpu/drm/exynos/exynos_drm_fimd.c b/drivers/gpu/drm/exynos/exynos_drm_fimd.c index 23da72b5eae9..a61878bf5dcd 100644 --- a/drivers/gpu/drm/exynos/exynos_drm_fimd.c +++ b/drivers/gpu/drm/exynos/exynos_drm_fimd.c | |||
@@ -31,7 +31,7 @@ | |||
31 | #include "exynos_drm_iommu.h" | 31 | #include "exynos_drm_iommu.h" |
32 | 32 | ||
33 | /* | 33 | /* |
34 | * FIMD is stand for Fully Interactive Mobile Display and | 34 | * FIMD stands for Fully Interactive Mobile Display and |
35 | * as a display controller, it transfers contents drawn on memory | 35 | * as a display controller, it transfers contents drawn on memory |
36 | * to a LCD Panel through Display Interfaces such as RGB or | 36 | * to a LCD Panel through Display Interfaces such as RGB or |
37 | * CPU Interface. | 37 | * CPU Interface. |