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 /drivers/gpu/drm/via | |
| 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>
Diffstat (limited to 'drivers/gpu/drm/via')
| -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 | } |
