Displaying 3 results from an estimated 3 matches for "kthread_work_queu".
2020 May 08
0
[RFC v4 02/12] kthread: Add kthread_(un)block_work_queuing() and kthread_work_queuable()
...thread_delayed_work *work);
+void kthread_block_work_queuing(struct kthread_worker *worker,
+ struct kthread_work *work);
+void kthread_unblock_work_queuing(struct kthread_worker *worker,
+ struct kthread_work *work);
void kthread_destroy_worker(struct kthread_worker *worker);
+/**
+ * kthread_work_queuable - whether or not a kthread work can be queued
+ * @work: The kthread work to check
+ *
+ * Checks whether or not queuing @work is currently blocked from queuing,
+ * either by kthread_cancel_work_sync() and friends or
+ * kthread_block_work_queuing().
+ *
+ * Returns: whether or not the @work m...
2020 May 08
16
[RFC v4 00/12] drm/nouveau: Introduce CRC support for gf119+
...previously trying.
* Apply some changes requested by danvet
Major changes since v2:
* Use kthread_worker instead of kthreadd for vblank workers
* Don't check debugfs return values
Lyude Paul (12):
kthread: Add kthread_queue_flush_work()
kthread: Add kthread_(un)block_work_queuing() and
kthread_work_queuable()
drm/vblank: Register drmm cleanup action once per drm_vblank_crtc
drm/vblank: Add vblank works
drm/nouveau/kms/nv50-: Unroll error cleanup in nv50_head_create()
drm/nouveau/kms/nv140-: Don't modify depth in state during atomic
commit
drm/nouveau/kms/nv50-: Fix disabling dith...
2020 May 08
0
[RFC v4 04/12] drm/vblank: Add vblank works
...ork,
+ u64 count, bool nextonmiss)
+{
+ struct drm_vblank_crtc *vblank = work->vblank;
+ struct drm_device *dev = vblank->dev;
+ u64 cur_vbl;
+ unsigned long irqflags;
+ bool passed, rescheduling = false;
+ int ret = 0;
+
+ spin_lock_irqsave(&vblank->work_lock, irqflags);
+ if (!kthread_work_queuable(&work->base))
+ goto out;
+
+ if (list_empty(&work->pending)) {
+ ret = drm_vblank_get(dev, vblank->pipe);
+ if (ret < 0)
+ goto out;
+ } else if (work->count == count) {
+ /* Already scheduled w/ same vbl count */
+ goto out;
+ } else {
+ rescheduling = true;
+ }...