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

Commit 8163e418 authored by Michel Dänzer's avatar Michel Dänzer Committed by airlied
Browse files

drm: Make locked tasklet handling more robust.



Initialize the spinlock unconditionally when struct drm_device is filled in,
and return early in drm_locked_tasklet() if the driver doesn't support IRQs.

Signed-off-by: default avatarDave Airlie <airlied@linux.ie>
parent 507c0185
Loading
Loading
Loading
Loading
+2 −2
Original line number Diff line number Diff line
@@ -119,7 +119,6 @@ static int drm_irq_install(drm_device_t * dev)
		init_waitqueue_head(&dev->vbl_queue);

		spin_lock_init(&dev->vbl_lock);
		spin_lock_init(&dev->tasklet_lock);

		INIT_LIST_HEAD(&dev->vbl_sigs.head);
		INIT_LIST_HEAD(&dev->vbl_sigs2.head);
@@ -456,7 +455,8 @@ void drm_locked_tasklet(drm_device_t *dev, void (*func)(drm_device_t*))
	unsigned long irqflags;
	static DECLARE_TASKLET(drm_tasklet, drm_locked_tasklet_func, 0);

	if (test_bit(TASKLET_STATE_SCHED, &drm_tasklet.state))
	if (!drm_core_check_feature(dev, DRIVER_HAVE_IRQ) ||
	    test_bit(TASKLET_STATE_SCHED, &drm_tasklet.state))
		return;

	spin_lock_irqsave(&dev->tasklet_lock, irqflags);
+1 −0
Original line number Diff line number Diff line
@@ -61,6 +61,7 @@ static int drm_fill_in_dev(drm_device_t * dev, struct pci_dev *pdev,

	spin_lock_init(&dev->count_lock);
	spin_lock_init(&dev->drw_lock);
	spin_lock_init(&dev->tasklet_lock);
	init_timer(&dev->timer);
	mutex_init(&dev->struct_mutex);
	mutex_init(&dev->ctxlist_mutex);