Skip to content

Commit

Permalink
drm/savage: clean up reclaim_buffers
Browse files Browse the repository at this point in the history
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.

v2: Don't let the idlelock linger around.

Signed-off-by: Daniel Vetter <[email protected]>
Tested-by: Tormod Volden <[email protected]>
Signed-off-by: Dave Airlie <[email protected]>
  • Loading branch information
danvet authored and airlied committed Jul 20, 2012
1 parent 923d1fe commit e2b3c5b
Show file tree
Hide file tree
Showing 2 changed files with 8 additions and 3 deletions.
9 changes: 7 additions & 2 deletions drivers/gpu/drm/savage/savage_bci.c
Original file line number Diff line number Diff line change
Expand Up @@ -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)
Expand All @@ -1059,7 +1060,10 @@ 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);
release_idlelock = 1;
}

for (i = 0; i < dma->buf_count; i++) {
struct drm_buf *buf = dma->buflist[i];
Expand All @@ -1075,7 +1079,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[] = {
Expand Down
2 changes: 1 addition & 1 deletion drivers/gpu/drm/savage/savage_drv.c
Original file line number Diff line number Diff line change
Expand Up @@ -52,9 +52,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 = &savage_driver_fops,
Expand Down

0 comments on commit e2b3c5b

Please sign in to comment.