Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 87499ffd authored by Daniel Vetter's avatar Daniel Vetter
Browse files

drm/i810: cleanup reclaim_buffers



My dear old i815 always hits the deadlocked on reclaim_buffers
warning. Switch over to the idlelock duct-tape on hope that
works better. I've fired up my i815 and now closing glxgears doesn't
take 5 seconds anymore. \o/

Signed-off-by: default avatarDaniel Vetter <daniel.vetter@ffwll.ch>
parent 7a6e0daa
Loading
Loading
Loading
Loading
+11 −6
Original line number Diff line number Diff line
@@ -888,7 +888,7 @@ static int i810_flush_queue(struct drm_device *dev)
}

/* Must be called with the lock held */
static void i810_reclaim_buffers(struct drm_device *dev,
void i810_driver_reclaim_buffers(struct drm_device *dev,
				 struct drm_file *file_priv)
{
	struct drm_device_dma *dma = dev->dma;
@@ -1225,12 +1225,17 @@ void i810_driver_preclose(struct drm_device *dev, struct drm_file *file_priv)
		if (dev_priv->page_flipping)
			i810_do_cleanup_pageflip(dev);
	}

	if (file_priv->master && file_priv->master->lock.hw_lock) {
		drm_idlelock_take(&file_priv->master->lock);
		i810_driver_reclaim_buffers(dev, file_priv);
		drm_idlelock_release(&file_priv->master->lock);
	} else {
		/* master disappeared, clean up stuff anyway and hope nothing
		 * goes wrong */
		i810_driver_reclaim_buffers(dev, file_priv);
	}

void i810_driver_reclaim_buffers_locked(struct drm_device *dev,
					struct drm_file *file_priv)
{
	i810_reclaim_buffers(dev, file_priv);
}

int i810_driver_dma_quiescent(struct drm_device *dev)
+0 −1
Original line number Diff line number Diff line
@@ -63,7 +63,6 @@ static struct drm_driver driver = {
	.lastclose = i810_driver_lastclose,
	.preclose = i810_driver_preclose,
	.device_is_agp = i810_driver_device_is_agp,
	.reclaim_buffers_locked = i810_driver_reclaim_buffers_locked,
	.dma_quiescent = i810_driver_dma_quiescent,
	.ioctls = i810_ioctls,
	.fops = &i810_driver_fops,
+2 −4
Original line number Diff line number Diff line
@@ -116,14 +116,12 @@ typedef struct drm_i810_private {

				/* i810_dma.c */
extern int i810_driver_dma_quiescent(struct drm_device *dev);
extern void i810_driver_reclaim_buffers_locked(struct drm_device *dev,
void i810_driver_reclaim_buffers(struct drm_device *dev,
			         struct drm_file *file_priv);
extern int i810_driver_load(struct drm_device *, unsigned long flags);
extern void i810_driver_lastclose(struct drm_device *dev);
extern void i810_driver_preclose(struct drm_device *dev,
				 struct drm_file *file_priv);
extern void i810_driver_reclaim_buffers_locked(struct drm_device *dev,
					       struct drm_file *file_priv);
extern int i810_driver_device_is_agp(struct drm_device *dev);

extern long i810_ioctl(struct file *file, unsigned int cmd, unsigned long arg);