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.
Export the idlelock drm functions so that drivers can call them.
Signed-off-by: Daniel Vetter daniel.vetter@ffwll.ch
drivers/gpu/drm/drm_lock.c | 2 ++ drivers/gpu/drm/via/via_drv.c | 4 +--- drivers/gpu/drm/via/via_mm.c | 11 +++++++++-- 3 files changed, 12 insertions(+), 5 deletions(-)
diff --git a/drivers/gpu/drm/drm_lock.c b/drivers/gpu/drm/drm_lock.c index 632ae24..b107e1d 100644 --- a/drivers/gpu/drm/drm_lock.c +++ b/drivers/gpu/drm/drm_lock.c @@ -345,6 +345,7 @@ void drm_idlelock_take(struct drm_lock_data *lock_data) } spin_unlock_bh(&lock_data->spinlock); } +EXPORT_SYMBOL(drm_idlelock_take);
void drm_idlelock_release(struct drm_lock_data *lock_data) { @@ -364,6 +365,7 @@ void drm_idlelock_release(struct drm_lock_data *lock_data) } spin_unlock_bh(&lock_data->spinlock); } +EXPORT_SYMBOL(drm_idlelock_release);
int drm_i_have_hw_lock(struct drm_device *dev, struct drm_file *file_priv) {
Need the following for modules to work.
#include <linux/export.h>
diff --git a/drivers/gpu/drm/via/via_drv.c b/drivers/gpu/drm/via/via_drv.c index 472adcf..f50431c 100644 --- a/drivers/gpu/drm/via/via_drv.c +++ b/drivers/gpu/drm/via/via_drv.c @@ -62,6 +62,7 @@ static struct drm_driver driver = { .load = via_driver_load, .unload = via_driver_unload, .open = via_driver_open,
- .preclose = via_reclaim_buffers_locked, .postclose = via_driver_postclose, .context_dtor = via_final_context, .get_vblank_counter = via_get_vblank_counter,
@@ -72,9 +73,6 @@ static struct drm_driver driver = { .irq_uninstall = via_driver_irq_uninstall, .irq_handler = via_driver_irq_handler, .dma_quiescent = via_driver_dma_quiescent,
- .reclaim_buffers = drm_core_reclaim_buffers,
- .reclaim_buffers_locked = NULL,
- .reclaim_buffers_idlelocked = via_reclaim_buffers_locked, .lastclose = via_lastclose, .ioctls = via_ioctls, .fops = {
diff --git a/drivers/gpu/drm/via/via_mm.c b/drivers/gpu/drm/via/via_mm.c index 80eab7d..8ce95c5 100644 --- a/drivers/gpu/drm/via/via_mm.c +++ b/drivers/gpu/drm/via/via_mm.c @@ -217,6 +217,10 @@ void via_reclaim_buffers_locked(struct drm_device *dev, { struct via_file_private *file_priv = file->driver_priv; struct via_memblock *entry, *next;
int release_idlelock = 0;
if (file->master && file->master->lock.hw_lock)
drm_idlelock_take(&file->master->lock);
mutex_lock(&dev->struct_mutex); if (list_empty(&file_priv->obj_list)) {
@@ -224,8 +228,7 @@ void via_reclaim_buffers_locked(struct drm_device *dev, return; }
- if (dev->driver->dma_quiescent)
dev->driver->dma_quiescent(dev);
via_driver_dma_quiescent(dev);
list_for_each_entry_safe(entry, next, &file_priv->obj_list, owner_list) {
@@ -234,5 +237,9 @@ void via_reclaim_buffers_locked(struct drm_device *dev, kfree(entry); } mutex_unlock(&dev->struct_mutex);
- if (release_idlelock)
drm_idlelock_release(&file->master->lock);
When does release_idlelock get set?
return; } -- 1.7.7.1
dri-devel mailing list dri-devel@lists.freedesktop.org http://lists.freedesktop.org/mailman/listinfo/dri-devel