[PATCH 16/23] drm/savage: clean up reclaim_buffers
Tormod Volden
lists.tormod at gmail.com
Sun Nov 6 02:18:13 PST 2011
On Thu, Oct 27, 2011 at 1:07 PM, Daniel Vetter <daniel.vetter at ffwll.ch> wrote:
> The reclaim_buffers function of the savage driver actually wants to run
> with the hw_lock held - at least there are printks in the call-chain
> to that effect. But the drm core only calls reclaim_buffers as used
> by savage _after_ forcefully dropping the hwlock (in case it's still
> hold by the closing fd).
>
> So do the same idlelock dance as for the other dma drivers and hope
> that papers over any issues.
>
> Signed-off-by: Daniel Vetter <daniel.vetter at ffwll.ch>
> ---
> drivers/gpu/drm/savage/savage_bci.c | 7 +++++--
> drivers/gpu/drm/savage/savage_drv.c | 2 +-
> 2 files changed, 6 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/savage/savage_bci.c b/drivers/gpu/drm/savage/savage_bci.c
> index cb1ee4e..1c00dbd 100644
> --- a/drivers/gpu/drm/savage/savage_bci.c
> +++ b/drivers/gpu/drm/savage/savage_bci.c
> @@ -1050,6 +1050,7 @@ void savage_reclaim_buffers(struct drm_device *dev, struct drm_file *file_priv)
> {
> struct drm_device_dma *dma = dev->dma;
> drm_savage_private_t *dev_priv = dev->dev_private;
> + int release_idlelock = 0;
> int i;
>
> if (!dma)
> @@ -1059,7 +1060,8 @@ void savage_reclaim_buffers(struct drm_device *dev, struct drm_file *file_priv)
> if (!dma->buflist)
> return;
>
> - /*i830_flush_queue(dev); */
> + if (file_priv->master && file_priv->master->lock.hw_lock)
> + drm_idlelock_take(&file_priv->master->lock);
>
> for (i = 0; i < dma->buf_count; i++) {
> struct drm_buf *buf = dma->buflist[i];
> @@ -1075,7 +1077,8 @@ void savage_reclaim_buffers(struct drm_device *dev, struct drm_file *file_priv)
> }
> }
>
> - drm_core_reclaim_buffers(dev, file_priv);
> + if (release_idlelock)
> + drm_idlelock_release(&file_priv->master->lock);
> }
>
> struct drm_ioctl_desc savage_ioctls[] = {
> diff --git a/drivers/gpu/drm/savage/savage_drv.c b/drivers/gpu/drm/savage/savage_drv.c
> index 6464490..0ed88b1 100644
> --- a/drivers/gpu/drm/savage/savage_drv.c
> +++ b/drivers/gpu/drm/savage/savage_drv.c
> @@ -39,9 +39,9 @@ static struct drm_driver driver = {
> .dev_priv_size = sizeof(drm_savage_buf_priv_t),
> .load = savage_driver_load,
> .firstopen = savage_driver_firstopen,
> + .preclose = savage_reclaim_buffers,
> .lastclose = savage_driver_lastclose,
> .unload = savage_driver_unload,
> - .reclaim_buffers = savage_reclaim_buffers,
> .ioctls = savage_ioctls,
> .dma_ioctl = savage_bci_buffers,
> .fops = {
> --
> 1.7.7.1
Hi Daniel,
This works fine on my savage Twister card (laptop).
Tested-by: Tormod Volden <debian.tormod at gmail.com>
Cheers,
Tormod
More information about the dri-devel
mailing list