1 #if !defined(__XEN_SOFTIRQ_H__) && !defined(__ASSEMBLY__)
2 #define __XEN_SOFTIRQ_H__
3 
4 /* Low-latency softirqs come first in the following list. */
5 enum {
6     TIMER_SOFTIRQ = 0,
7     SCHEDULE_SOFTIRQ,
8     NEW_TLBFLUSH_CLOCK_PERIOD_SOFTIRQ,
9     RCU_SOFTIRQ,
10     TASKLET_SOFTIRQ,
11     NR_COMMON_SOFTIRQS
12 };
13 
14 #include <xen/lib.h>
15 #include <xen/smp.h>
16 #include <xen/bitops.h>
17 #include <asm/current.h>
18 #include <asm/hardirq.h>
19 #include <asm/softirq.h>
20 
21 #define NR_SOFTIRQS (NR_COMMON_SOFTIRQS + NR_ARCH_SOFTIRQS)
22 
23 typedef void (*softirq_handler)(void);
24 
25 void do_softirq(void);
26 void open_softirq(int nr, softirq_handler handler);
27 void softirq_init(void);
28 
29 void cpumask_raise_softirq(const cpumask_t *, unsigned int nr);
30 void cpu_raise_softirq(unsigned int cpu, unsigned int nr);
31 void raise_softirq(unsigned int nr);
32 
33 void cpu_raise_softirq_batch_begin(void);
34 void cpu_raise_softirq_batch_finish(void);
35 
36 /*
37  * Process pending softirqs on this CPU. This should be called periodically
38  * when performing work that prevents softirqs from running in a timely manner.
39  * Use this instead of do_softirq() when you do not want to be preempted.
40  */
41 void process_pending_softirqs(void);
42 
43 #endif /* __XEN_SOFTIRQ_H__ */
44