diff options
Diffstat (limited to 'include/linux/irq_work.h')
| -rw-r--r-- | include/linux/irq_work.h | 22 | 
1 files changed, 21 insertions, 1 deletions
| diff --git a/include/linux/irq_work.h b/include/linux/irq_work.h index 6a9e8f5399e2..f5dbce50466e 100644 --- a/include/linux/irq_work.h +++ b/include/linux/irq_work.h @@ -3,6 +3,20 @@  #include <linux/llist.h> +/* + * An entry can be in one of four states: + * + * free	     NULL, 0 -> {claimed}       : free to be used + * claimed   NULL, 3 -> {pending}       : claimed to be enqueued + * pending   next, 3 -> {busy}          : queued, pending callback + * busy      NULL, 2 -> {free, claimed} : callback in progress, can be claimed + */ + +#define IRQ_WORK_PENDING	1UL +#define IRQ_WORK_BUSY		2UL +#define IRQ_WORK_FLAGS		3UL +#define IRQ_WORK_LAZY		4UL /* Doesn't want IPI, wait for tick */ +  struct irq_work {  	unsigned long flags;  	struct llist_node llnode; @@ -16,8 +30,14 @@ void init_irq_work(struct irq_work *work, void (*func)(struct irq_work *))  	work->func = func;  } -bool irq_work_queue(struct irq_work *work); +void irq_work_queue(struct irq_work *work);  void irq_work_run(void);  void irq_work_sync(struct irq_work *work); +#ifdef CONFIG_IRQ_WORK +bool irq_work_needs_cpu(void); +#else +static bool irq_work_needs_cpu(void) { return false; } +#endif +  #endif /* _LINUX_IRQ_WORK_H */ |