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