Blame view

include/linux/irq_work.h 1.29 KB
e360adbe2   Peter Zijlstra   irq_work: Add gen...
1
2
  #ifndef _LINUX_IRQ_WORK_H
  #define _LINUX_IRQ_WORK_H
38aaf8090   Huang Ying   irq_work: Use lli...
3
  #include <linux/llist.h>
bc6679aef   Frederic Weisbecker   irq_work: Make se...
4
5
6
7
8
9
10
11
12
13
14
15
16
  /*
   * 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 */
e360adbe2   Peter Zijlstra   irq_work: Add gen...
17
  struct irq_work {
38aaf8090   Huang Ying   irq_work: Use lli...
18
19
  	unsigned long flags;
  	struct llist_node llnode;
e360adbe2   Peter Zijlstra   irq_work: Add gen...
20
21
22
23
  	void (*func)(struct irq_work *);
  };
  
  static inline
38aaf8090   Huang Ying   irq_work: Use lli...
24
  void init_irq_work(struct irq_work *work, void (*func)(struct irq_work *))
e360adbe2   Peter Zijlstra   irq_work: Add gen...
25
  {
38aaf8090   Huang Ying   irq_work: Use lli...
26
27
  	work->flags = 0;
  	work->func = func;
e360adbe2   Peter Zijlstra   irq_work: Add gen...
28
  }
6a02ad66b   Peter Zijlstra   perf/x86: Push th...
29
  #define DEFINE_IRQ_WORK(name, _f) struct irq_work name = { .func = (_f), }
cd578abb2   Peter Zijlstra   perf/x86: Warn to...
30
  bool irq_work_queue(struct irq_work *work);
478850160   Frederic Weisbecker   irq_work: Impleme...
31
32
33
34
  
  #ifdef CONFIG_SMP
  bool irq_work_queue_on(struct irq_work *work, int cpu);
  #endif
76a33061b   Frederic Weisbecker   irq_work: Force r...
35
  void irq_work_tick(void);
38aaf8090   Huang Ying   irq_work: Use lli...
36
  void irq_work_sync(struct irq_work *work);
e360adbe2   Peter Zijlstra   irq_work: Add gen...
37

00b429591   Frederic Weisbecker   irq_work: Don't s...
38
  #ifdef CONFIG_IRQ_WORK
c5c38ef3d   Peter Zijlstra   irq_work: Introdu...
39
  #include <asm/irq_work.h>
71ad00d61   Steven Rostedt   irq_work: Fix bui...
40
  void irq_work_run(void);
00b429591   Frederic Weisbecker   irq_work: Don't s...
41
42
  bool irq_work_needs_cpu(void);
  #else
fe8d52614   James Hogan   irq_work.h: fix w...
43
  static inline bool irq_work_needs_cpu(void) { return false; }
71ad00d61   Steven Rostedt   irq_work: Fix bui...
44
  static inline void irq_work_run(void) { }
00b429591   Frederic Weisbecker   irq_work: Don't s...
45
  #endif
e360adbe2   Peter Zijlstra   irq_work: Add gen...
46
  #endif /* _LINUX_IRQ_WORK_H */