Loading drivers/gpu/drm/drm_irq.c +0 −80 Original line number Diff line number Diff line Loading @@ -280,8 +280,6 @@ int drm_irq_uninstall(struct drm_device * dev) drm_vblank_cleanup(dev); dev->locked_tasklet_func = NULL; return 0; } EXPORT_SYMBOL(drm_irq_uninstall); Loading Loading @@ -699,81 +697,3 @@ void drm_handle_vblank(struct drm_device *dev, int crtc) drm_vbl_send_signals(dev, crtc); } EXPORT_SYMBOL(drm_handle_vblank); /** * Tasklet wrapper function. * * \param data DRM device in disguise. * * Attempts to grab the HW lock and calls the driver callback on success. On * failure, leave the lock marked as contended so the callback can be called * from drm_unlock(). */ static void drm_locked_tasklet_func(unsigned long data) { struct drm_device *dev = (struct drm_device *)data; unsigned long irqflags; void (*tasklet_func)(struct drm_device *); spin_lock_irqsave(&dev->tasklet_lock, irqflags); tasklet_func = dev->locked_tasklet_func; spin_unlock_irqrestore(&dev->tasklet_lock, irqflags); if (!tasklet_func || !drm_lock_take(&dev->lock, DRM_KERNEL_CONTEXT)) { return; } dev->lock.lock_time = jiffies; atomic_inc(&dev->counts[_DRM_STAT_LOCKS]); spin_lock_irqsave(&dev->tasklet_lock, irqflags); tasklet_func = dev->locked_tasklet_func; dev->locked_tasklet_func = NULL; spin_unlock_irqrestore(&dev->tasklet_lock, irqflags); if (tasklet_func != NULL) tasklet_func(dev); drm_lock_free(&dev->lock, DRM_KERNEL_CONTEXT); } /** * Schedule a tasklet to call back a driver hook with the HW lock held. * * \param dev DRM device. * \param func Driver callback. * * This is intended for triggering actions that require the HW lock from an * interrupt handler. The lock will be grabbed ASAP after the interrupt handler * completes. Note that the callback may be called from interrupt or process * context, it must not make any assumptions about this. Also, the HW lock will * be held with the kernel context or any client context. */ void drm_locked_tasklet(struct drm_device *dev, void (*func)(struct drm_device *)) { unsigned long irqflags; static DECLARE_TASKLET(drm_tasklet, drm_locked_tasklet_func, 0); 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); if (dev->locked_tasklet_func) { spin_unlock_irqrestore(&dev->tasklet_lock, irqflags); return; } dev->locked_tasklet_func = func; spin_unlock_irqrestore(&dev->tasklet_lock, irqflags); drm_tasklet.data = (unsigned long)dev; tasklet_hi_schedule(&drm_tasklet); } EXPORT_SYMBOL(drm_locked_tasklet); drivers/gpu/drm/drm_lock.c +0 −9 Original line number Diff line number Diff line Loading @@ -154,8 +154,6 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv) int drm_unlock(struct drm_device *dev, void *data, struct drm_file *file_priv) { struct drm_lock *lock = data; unsigned long irqflags; void (*tasklet_func)(struct drm_device *); if (lock->context == DRM_KERNEL_CONTEXT) { DRM_ERROR("Process %d using kernel context %d\n", Loading @@ -163,13 +161,6 @@ int drm_unlock(struct drm_device *dev, void *data, struct drm_file *file_priv) return -EINVAL; } spin_lock_irqsave(&dev->tasklet_lock, irqflags); tasklet_func = dev->locked_tasklet_func; dev->locked_tasklet_func = NULL; spin_unlock_irqrestore(&dev->tasklet_lock, irqflags); if (tasklet_func != NULL) tasklet_func(dev); atomic_inc(&dev->counts[_DRM_STAT_UNLOCKS]); /* kernel_context_switch isn't used by any of the x86 drm Loading drivers/gpu/drm/drm_stub.c +0 −1 Original line number Diff line number Diff line Loading @@ -92,7 +92,6 @@ static int drm_fill_in_dev(struct drm_device * dev, struct pci_dev *pdev, spin_lock_init(&dev->count_lock); spin_lock_init(&dev->drw_lock); spin_lock_init(&dev->tasklet_lock); spin_lock_init(&dev->lock.spinlock); init_timer(&dev->timer); mutex_init(&dev->struct_mutex); Loading include/drm/drmP.h +0 −5 Original line number Diff line number Diff line Loading @@ -861,8 +861,6 @@ struct drm_device { struct timer_list vblank_disable_timer; u32 max_vblank_count; /**< size of vblank counter register */ spinlock_t tasklet_lock; /**< For drm_locked_tasklet */ void (*locked_tasklet_func)(struct drm_device *dev); /*@} */ cycles_t ctx_start; Loading Loading @@ -1149,8 +1147,6 @@ extern int drm_vblank_init(struct drm_device *dev, int num_crtcs); extern int drm_wait_vblank(struct drm_device *dev, void *data, struct drm_file *filp); extern int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq); extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_device *)); extern u32 drm_vblank_count(struct drm_device *dev, int crtc); extern void drm_handle_vblank(struct drm_device *dev, int crtc); extern int drm_vblank_get(struct drm_device *dev, int crtc); Loading @@ -1158,7 +1154,6 @@ extern void drm_vblank_put(struct drm_device *dev, int crtc); /* Modesetting support */ extern int drm_modeset_ctl(struct drm_device *dev, void *data, struct drm_file *file_priv); extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_device*)); /* AGP/GART support (drm_agpsupport.h) */ extern struct drm_agp_head *drm_agp_init(struct drm_device *dev); Loading Loading
drivers/gpu/drm/drm_irq.c +0 −80 Original line number Diff line number Diff line Loading @@ -280,8 +280,6 @@ int drm_irq_uninstall(struct drm_device * dev) drm_vblank_cleanup(dev); dev->locked_tasklet_func = NULL; return 0; } EXPORT_SYMBOL(drm_irq_uninstall); Loading Loading @@ -699,81 +697,3 @@ void drm_handle_vblank(struct drm_device *dev, int crtc) drm_vbl_send_signals(dev, crtc); } EXPORT_SYMBOL(drm_handle_vblank); /** * Tasklet wrapper function. * * \param data DRM device in disguise. * * Attempts to grab the HW lock and calls the driver callback on success. On * failure, leave the lock marked as contended so the callback can be called * from drm_unlock(). */ static void drm_locked_tasklet_func(unsigned long data) { struct drm_device *dev = (struct drm_device *)data; unsigned long irqflags; void (*tasklet_func)(struct drm_device *); spin_lock_irqsave(&dev->tasklet_lock, irqflags); tasklet_func = dev->locked_tasklet_func; spin_unlock_irqrestore(&dev->tasklet_lock, irqflags); if (!tasklet_func || !drm_lock_take(&dev->lock, DRM_KERNEL_CONTEXT)) { return; } dev->lock.lock_time = jiffies; atomic_inc(&dev->counts[_DRM_STAT_LOCKS]); spin_lock_irqsave(&dev->tasklet_lock, irqflags); tasklet_func = dev->locked_tasklet_func; dev->locked_tasklet_func = NULL; spin_unlock_irqrestore(&dev->tasklet_lock, irqflags); if (tasklet_func != NULL) tasklet_func(dev); drm_lock_free(&dev->lock, DRM_KERNEL_CONTEXT); } /** * Schedule a tasklet to call back a driver hook with the HW lock held. * * \param dev DRM device. * \param func Driver callback. * * This is intended for triggering actions that require the HW lock from an * interrupt handler. The lock will be grabbed ASAP after the interrupt handler * completes. Note that the callback may be called from interrupt or process * context, it must not make any assumptions about this. Also, the HW lock will * be held with the kernel context or any client context. */ void drm_locked_tasklet(struct drm_device *dev, void (*func)(struct drm_device *)) { unsigned long irqflags; static DECLARE_TASKLET(drm_tasklet, drm_locked_tasklet_func, 0); 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); if (dev->locked_tasklet_func) { spin_unlock_irqrestore(&dev->tasklet_lock, irqflags); return; } dev->locked_tasklet_func = func; spin_unlock_irqrestore(&dev->tasklet_lock, irqflags); drm_tasklet.data = (unsigned long)dev; tasklet_hi_schedule(&drm_tasklet); } EXPORT_SYMBOL(drm_locked_tasklet);
drivers/gpu/drm/drm_lock.c +0 −9 Original line number Diff line number Diff line Loading @@ -154,8 +154,6 @@ int drm_lock(struct drm_device *dev, void *data, struct drm_file *file_priv) int drm_unlock(struct drm_device *dev, void *data, struct drm_file *file_priv) { struct drm_lock *lock = data; unsigned long irqflags; void (*tasklet_func)(struct drm_device *); if (lock->context == DRM_KERNEL_CONTEXT) { DRM_ERROR("Process %d using kernel context %d\n", Loading @@ -163,13 +161,6 @@ int drm_unlock(struct drm_device *dev, void *data, struct drm_file *file_priv) return -EINVAL; } spin_lock_irqsave(&dev->tasklet_lock, irqflags); tasklet_func = dev->locked_tasklet_func; dev->locked_tasklet_func = NULL; spin_unlock_irqrestore(&dev->tasklet_lock, irqflags); if (tasklet_func != NULL) tasklet_func(dev); atomic_inc(&dev->counts[_DRM_STAT_UNLOCKS]); /* kernel_context_switch isn't used by any of the x86 drm Loading
drivers/gpu/drm/drm_stub.c +0 −1 Original line number Diff line number Diff line Loading @@ -92,7 +92,6 @@ static int drm_fill_in_dev(struct drm_device * dev, struct pci_dev *pdev, spin_lock_init(&dev->count_lock); spin_lock_init(&dev->drw_lock); spin_lock_init(&dev->tasklet_lock); spin_lock_init(&dev->lock.spinlock); init_timer(&dev->timer); mutex_init(&dev->struct_mutex); Loading
include/drm/drmP.h +0 −5 Original line number Diff line number Diff line Loading @@ -861,8 +861,6 @@ struct drm_device { struct timer_list vblank_disable_timer; u32 max_vblank_count; /**< size of vblank counter register */ spinlock_t tasklet_lock; /**< For drm_locked_tasklet */ void (*locked_tasklet_func)(struct drm_device *dev); /*@} */ cycles_t ctx_start; Loading Loading @@ -1149,8 +1147,6 @@ extern int drm_vblank_init(struct drm_device *dev, int num_crtcs); extern int drm_wait_vblank(struct drm_device *dev, void *data, struct drm_file *filp); extern int drm_vblank_wait(struct drm_device *dev, unsigned int *vbl_seq); extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_device *)); extern u32 drm_vblank_count(struct drm_device *dev, int crtc); extern void drm_handle_vblank(struct drm_device *dev, int crtc); extern int drm_vblank_get(struct drm_device *dev, int crtc); Loading @@ -1158,7 +1154,6 @@ extern void drm_vblank_put(struct drm_device *dev, int crtc); /* Modesetting support */ extern int drm_modeset_ctl(struct drm_device *dev, void *data, struct drm_file *file_priv); extern void drm_locked_tasklet(struct drm_device *dev, void(*func)(struct drm_device*)); /* AGP/GART support (drm_agpsupport.h) */ extern struct drm_agp_head *drm_agp_init(struct drm_device *dev); Loading