diff options
author | Daniel Vetter <daniel.vetter@ffwll.ch> | 2011-10-25 17:37:09 -0400 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2012-07-19 22:48:28 -0400 |
commit | 834859c3abf9272bf55bd0d0c95e5a892f24dadc (patch) | |
tree | 2029970d5992422f8e7cecdcc893e0d167599bcd | |
parent | 5bd42f69fbedfc12cd8161323a9ffab0b2586a2a (diff) |
drm/via: clean up reclaim_buffers
A few things
- kill reclaim_buffers, it's never ever called because via does not set
DRIVER_HAVE_DMA
- inline the idlelock dance into the buffer reclaim logic and make it
a simple preclose cleanup function
- directly call the the dma_quiescent function and kill the needless
if check.
v2: Actually drop the idlelock when we take it. Reported by James
Simmons.
v3: Rebased onto latest drm-next.
v4: Fixup the refactor.
v5: More fixup the refactor - I've accidentally changed the check for
any master to checking whether the closing fd is the master.
v6: Don't forget to drop the idlelock in the early return path, too.
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Signed-off-by: Dave Airlie <airlied@redhat.com>
-rw-r--r-- | drivers/gpu/drm/via/via_drv.c | 4 | ||||
-rw-r--r-- | drivers/gpu/drm/via/via_mm.c | 13 |
2 files changed, 12 insertions, 5 deletions
diff --git a/drivers/gpu/drm/via/via_drv.c b/drivers/gpu/drm/via/via_drv.c index 02661f35f7a0..e927b4c052f5 100644 --- a/drivers/gpu/drm/via/via_drv.c +++ b/drivers/gpu/drm/via/via_drv.c | |||
@@ -75,6 +75,7 @@ static struct drm_driver driver = { | |||
75 | .load = via_driver_load, | 75 | .load = via_driver_load, |
76 | .unload = via_driver_unload, | 76 | .unload = via_driver_unload, |
77 | .open = via_driver_open, | 77 | .open = via_driver_open, |
78 | .preclose = via_reclaim_buffers_locked, | ||
78 | .postclose = via_driver_postclose, | 79 | .postclose = via_driver_postclose, |
79 | .context_dtor = via_final_context, | 80 | .context_dtor = via_final_context, |
80 | .get_vblank_counter = via_get_vblank_counter, | 81 | .get_vblank_counter = via_get_vblank_counter, |
@@ -85,9 +86,6 @@ static struct drm_driver driver = { | |||
85 | .irq_uninstall = via_driver_irq_uninstall, | 86 | .irq_uninstall = via_driver_irq_uninstall, |
86 | .irq_handler = via_driver_irq_handler, | 87 | .irq_handler = via_driver_irq_handler, |
87 | .dma_quiescent = via_driver_dma_quiescent, | 88 | .dma_quiescent = via_driver_dma_quiescent, |
88 | .reclaim_buffers = drm_core_reclaim_buffers, | ||
89 | .reclaim_buffers_locked = NULL, | ||
90 | .reclaim_buffers_idlelocked = via_reclaim_buffers_locked, | ||
91 | .lastclose = via_lastclose, | 89 | .lastclose = via_lastclose, |
92 | .ioctls = via_ioctls, | 90 | .ioctls = via_ioctls, |
93 | .fops = &via_driver_fops, | 91 | .fops = &via_driver_fops, |
diff --git a/drivers/gpu/drm/via/via_mm.c b/drivers/gpu/drm/via/via_mm.c index a3574d09a07d..acfcb358e7b7 100644 --- a/drivers/gpu/drm/via/via_mm.c +++ b/drivers/gpu/drm/via/via_mm.c | |||
@@ -215,14 +215,20 @@ void via_reclaim_buffers_locked(struct drm_device *dev, | |||
215 | struct via_file_private *file_priv = file->driver_priv; | 215 | struct via_file_private *file_priv = file->driver_priv; |
216 | struct via_memblock *entry, *next; | 216 | struct via_memblock *entry, *next; |
217 | 217 | ||
218 | if (!(file->minor->master && file->master->lock.hw_lock)) | ||
219 | return; | ||
220 | |||
221 | drm_idlelock_take(&file->master->lock); | ||
222 | |||
218 | mutex_lock(&dev->struct_mutex); | 223 | mutex_lock(&dev->struct_mutex); |
219 | if (list_empty(&file_priv->obj_list)) { | 224 | if (list_empty(&file_priv->obj_list)) { |
220 | mutex_unlock(&dev->struct_mutex); | 225 | mutex_unlock(&dev->struct_mutex); |
226 | drm_idlelock_release(&file->master->lock); | ||
227 | |||
221 | return; | 228 | return; |
222 | } | 229 | } |
223 | 230 | ||
224 | if (dev->driver->dma_quiescent) | 231 | via_driver_dma_quiescent(dev); |
225 | dev->driver->dma_quiescent(dev); | ||
226 | 232 | ||
227 | list_for_each_entry_safe(entry, next, &file_priv->obj_list, | 233 | list_for_each_entry_safe(entry, next, &file_priv->obj_list, |
228 | owner_list) { | 234 | owner_list) { |
@@ -231,5 +237,8 @@ void via_reclaim_buffers_locked(struct drm_device *dev, | |||
231 | kfree(entry); | 237 | kfree(entry); |
232 | } | 238 | } |
233 | mutex_unlock(&dev->struct_mutex); | 239 | mutex_unlock(&dev->struct_mutex); |
240 | |||
241 | drm_idlelock_release(&file->master->lock); | ||
242 | |||
234 | return; | 243 | return; |
235 | } | 244 | } |