> 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@xxxxxxxx> > --- > 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@xxxxxxxxxxxxxxxxxxxxx > http://lists.freedesktop.org/mailman/listinfo/dri-devel > _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx http://lists.freedesktop.org/mailman/listinfo/dri-devel