XenevaOS
Loading...
Searching...
No Matches
irq_work.h
Go to the documentation of this file.
1/*
2 * DCL irq_work.h -- irq_work runs as a DCL work_struct, inline.
3 *
4 * dma-fence-chain.c raises an irq_work to signal the chain without taking
5 * the fence lock in IRQ context; DCL has no IRQ-side queue, and
6 * workqueue.h's schedule_work already runs the callback synchronously, so
7 * queueing here behaves like mainline's "runs on next irq return" for our
8 * single-threaded flow.
9 */
10#ifndef _LINUX_IRQ_WORK_H
11#define _LINUX_IRQ_WORK_H
12
13#include <linux/workqueue.h>
14
15struct irq_work {
17 void (*func)(struct irq_work *work);
18};
19
20static inline void dcl_irq_work_trampoline(struct work_struct *base)
21{
22 struct irq_work *work =
23 (struct irq_work *)((char *)base - __builtin_offsetof(struct irq_work, base));
24 work->func(work);
25}
26
27#define init_irq_work(work, fn) do { \
28 (work)->func = (fn); \
29 INIT_WORK(&(work)->base, dcl_irq_work_trampoline); \
30} while (0)
31
32static inline bool irq_work_queue(struct irq_work *work)
33{
34 return schedule_work(&work->base);
35}
36
37static inline void irq_work_sync(struct irq_work *work)
38{
39 flush_work(&work->base);
40}
41
42#endif /* _LINUX_IRQ_WORK_H */
struct i915_user_extension base
Definition i915_drm.h:0
Definition irq_work.h:15
void(* func)(struct irq_work *work)
Definition irq_work.h:17
struct work_struct base
Definition irq_work.h:16
Definition workqueue.h:44