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);
        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);
 
 
        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);