Skip to content

Commit

Permalink
drm: Make locked tasklet handling more robust.
Browse files Browse the repository at this point in the history
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: Dave Airlie <airlied@linux.ie>
  • Loading branch information
=?utf-8?q?Michel_D=C3=A4nzer?= authored and airlied committed Dec 7, 2006
1 parent 507c018 commit 8163e41
Show file tree
Hide file tree
Showing 2 changed files with 3 additions and 2 deletions.
4 changes: 2 additions & 2 deletions drivers/char/drm/drm_irq.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down
1 change: 1 addition & 0 deletions drivers/char/drm/drm_stub.c
Original file line number Diff line number Diff line change
Expand Up @@ -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);
Expand Down

0 comments on commit 8163e41

Please sign in to comment.