Lines Matching refs:work
54 void drm_flip_work_queue_task(struct drm_flip_work *work, in drm_flip_work_queue_task() argument
59 spin_lock_irqsave(&work->lock, flags); in drm_flip_work_queue_task()
60 list_add_tail(&task->node, &work->queued); in drm_flip_work_queue_task()
61 spin_unlock_irqrestore(&work->lock, flags); in drm_flip_work_queue_task()
73 void drm_flip_work_queue(struct drm_flip_work *work, void *val) in drm_flip_work_queue() argument
80 drm_flip_work_queue_task(work, task); in drm_flip_work_queue()
82 DRM_ERROR("%s could not allocate task!\n", work->name); in drm_flip_work_queue()
83 work->func(work, val); in drm_flip_work_queue()
98 void drm_flip_work_commit(struct drm_flip_work *work, in drm_flip_work_commit() argument
103 spin_lock_irqsave(&work->lock, flags); in drm_flip_work_commit()
104 list_splice_tail(&work->queued, &work->commited); in drm_flip_work_commit()
105 INIT_LIST_HEAD(&work->queued); in drm_flip_work_commit()
106 spin_unlock_irqrestore(&work->lock, flags); in drm_flip_work_commit()
107 queue_work(wq, &work->worker); in drm_flip_work_commit()
113 struct drm_flip_work *work = container_of(w, struct drm_flip_work, worker); in flip_worker() local
121 spin_lock_irqsave(&work->lock, flags); in flip_worker()
122 list_splice_tail(&work->commited, &tasks); in flip_worker()
123 INIT_LIST_HEAD(&work->commited); in flip_worker()
124 spin_unlock_irqrestore(&work->lock, flags); in flip_worker()
130 work->func(work, task->data); in flip_worker()
144 void drm_flip_work_init(struct drm_flip_work *work, in drm_flip_work_init() argument
147 work->name = name; in drm_flip_work_init()
148 INIT_LIST_HEAD(&work->queued); in drm_flip_work_init()
149 INIT_LIST_HEAD(&work->commited); in drm_flip_work_init()
150 spin_lock_init(&work->lock); in drm_flip_work_init()
151 work->func = func; in drm_flip_work_init()
153 INIT_WORK(&work->worker, flip_worker); in drm_flip_work_init()
163 void drm_flip_work_cleanup(struct drm_flip_work *work) in drm_flip_work_cleanup() argument
165 WARN_ON(!list_empty(&work->queued) || !list_empty(&work->commited)); in drm_flip_work_cleanup()