~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

TOMOYO Linux Cross Reference
Linux/include/linux/irq_work.h

Version: ~ [ linux-6.11.5 ] ~ [ linux-6.10.14 ] ~ [ linux-6.9.12 ] ~ [ linux-6.8.12 ] ~ [ linux-6.7.12 ] ~ [ linux-6.6.58 ] ~ [ linux-6.5.13 ] ~ [ linux-6.4.16 ] ~ [ linux-6.3.13 ] ~ [ linux-6.2.16 ] ~ [ linux-6.1.114 ] ~ [ linux-6.0.19 ] ~ [ linux-5.19.17 ] ~ [ linux-5.18.19 ] ~ [ linux-5.17.15 ] ~ [ linux-5.16.20 ] ~ [ linux-5.15.169 ] ~ [ linux-5.14.21 ] ~ [ linux-5.13.19 ] ~ [ linux-5.12.19 ] ~ [ linux-5.11.22 ] ~ [ linux-5.10.228 ] ~ [ linux-5.9.16 ] ~ [ linux-5.8.18 ] ~ [ linux-5.7.19 ] ~ [ linux-5.6.19 ] ~ [ linux-5.5.19 ] ~ [ linux-5.4.284 ] ~ [ linux-5.3.18 ] ~ [ linux-5.2.21 ] ~ [ linux-5.1.21 ] ~ [ linux-5.0.21 ] ~ [ linux-4.20.17 ] ~ [ linux-4.19.322 ] ~ [ linux-4.18.20 ] ~ [ linux-4.17.19 ] ~ [ linux-4.16.18 ] ~ [ linux-4.15.18 ] ~ [ linux-4.14.336 ] ~ [ linux-4.13.16 ] ~ [ linux-4.12.14 ] ~ [ linux-4.11.12 ] ~ [ linux-4.10.17 ] ~ [ linux-4.9.337 ] ~ [ linux-4.4.302 ] ~ [ linux-3.10.108 ] ~ [ linux-2.6.32.71 ] ~ [ linux-2.6.0 ] ~ [ linux-2.4.37.11 ] ~ [ unix-v6-master ] ~ [ ccs-tools-1.8.9 ] ~ [ policy-sample ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

  1 /* SPDX-License-Identifier: GPL-2.0 */
  2 #ifndef _LINUX_IRQ_WORK_H
  3 #define _LINUX_IRQ_WORK_H
  4 
  5 #include <linux/smp_types.h>
  6 #include <linux/rcuwait.h>
  7 
  8 /*
  9  * An entry can be in one of four states:
 10  *
 11  * free      NULL, 0 -> {claimed}       : free to be used
 12  * claimed   NULL, 3 -> {pending}       : claimed to be enqueued
 13  * pending   next, 3 -> {busy}          : queued, pending callback
 14  * busy      NULL, 2 -> {free, claimed} : callback in progress, can be claimed
 15  */
 16 
 17 struct irq_work {
 18         struct __call_single_node node;
 19         void (*func)(struct irq_work *);
 20         struct rcuwait irqwait;
 21 };
 22 
 23 #define __IRQ_WORK_INIT(_func, _flags) (struct irq_work){       \
 24         .node = { .u_flags = (_flags), },                       \
 25         .func = (_func),                                        \
 26         .irqwait = __RCUWAIT_INITIALIZER(irqwait),              \
 27 }
 28 
 29 #define IRQ_WORK_INIT(_func) __IRQ_WORK_INIT(_func, 0)
 30 #define IRQ_WORK_INIT_LAZY(_func) __IRQ_WORK_INIT(_func, IRQ_WORK_LAZY)
 31 #define IRQ_WORK_INIT_HARD(_func) __IRQ_WORK_INIT(_func, IRQ_WORK_HARD_IRQ)
 32 
 33 #define DEFINE_IRQ_WORK(name, _f)                               \
 34         struct irq_work name = IRQ_WORK_INIT(_f)
 35 
 36 static inline
 37 void init_irq_work(struct irq_work *work, void (*func)(struct irq_work *))
 38 {
 39         *work = IRQ_WORK_INIT(func);
 40 }
 41 
 42 static inline bool irq_work_is_pending(struct irq_work *work)
 43 {
 44         return atomic_read(&work->node.a_flags) & IRQ_WORK_PENDING;
 45 }
 46 
 47 static inline bool irq_work_is_busy(struct irq_work *work)
 48 {
 49         return atomic_read(&work->node.a_flags) & IRQ_WORK_BUSY;
 50 }
 51 
 52 static inline bool irq_work_is_hard(struct irq_work *work)
 53 {
 54         return atomic_read(&work->node.a_flags) & IRQ_WORK_HARD_IRQ;
 55 }
 56 
 57 bool irq_work_queue(struct irq_work *work);
 58 bool irq_work_queue_on(struct irq_work *work, int cpu);
 59 
 60 void irq_work_tick(void);
 61 void irq_work_sync(struct irq_work *work);
 62 
 63 #ifdef CONFIG_IRQ_WORK
 64 #include <asm/irq_work.h>
 65 
 66 void irq_work_run(void);
 67 bool irq_work_needs_cpu(void);
 68 void irq_work_single(void *arg);
 69 
 70 void arch_irq_work_raise(void);
 71 
 72 #else
 73 static inline bool irq_work_needs_cpu(void) { return false; }
 74 static inline void irq_work_run(void) { }
 75 static inline void irq_work_single(void *arg) { }
 76 #endif
 77 
 78 #endif /* _LINUX_IRQ_WORK_H */
 79 

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~

kernel.org | git.kernel.org | LWN.net | Project Home | SVN repository | Mail admin

Linux® is a registered trademark of Linus Torvalds in the United States and other countries.
TOMOYO® is a registered trademark of NTT DATA CORPORATION.

sflogo.php