.. | .. |
---|
7 | 7 | #include <linux/lockdep.h> |
---|
8 | 8 | #include <linux/ftrace_irq.h> |
---|
9 | 9 | #include <linux/vtime.h> |
---|
| 10 | +#include <asm-generic/irq_pipeline.h> |
---|
10 | 11 | #include <asm/hardirq.h> |
---|
11 | 12 | |
---|
12 | 13 | extern void synchronize_irq(unsigned int irq); |
---|
.. | .. |
---|
122 | 123 | |
---|
123 | 124 | #define nmi_enter() \ |
---|
124 | 125 | do { \ |
---|
| 126 | + irq_pipeline_nmi_enter(); \ |
---|
125 | 127 | __nmi_enter(); \ |
---|
126 | 128 | lockdep_hardirq_enter(); \ |
---|
127 | 129 | rcu_nmi_enter(); \ |
---|
.. | .. |
---|
147 | 149 | rcu_nmi_exit(); \ |
---|
148 | 150 | lockdep_hardirq_exit(); \ |
---|
149 | 151 | __nmi_exit(); \ |
---|
| 152 | + irq_pipeline_nmi_exit(); \ |
---|
150 | 153 | } while (0) |
---|
151 | 154 | |
---|
| 155 | +static inline bool start_irq_flow(void) |
---|
| 156 | +{ |
---|
| 157 | + return !irqs_pipelined() || in_pipeline(); |
---|
| 158 | +} |
---|
| 159 | + |
---|
| 160 | +static inline bool on_pipeline_entry(void) |
---|
| 161 | +{ |
---|
| 162 | + return irqs_pipelined() && in_pipeline(); |
---|
| 163 | +} |
---|
| 164 | + |
---|
| 165 | +static inline bool in_hard_irq(void) |
---|
| 166 | +{ |
---|
| 167 | + return irqs_pipelined() ? in_pipeline() : in_irq(); |
---|
| 168 | +} |
---|
| 169 | + |
---|
152 | 170 | #endif /* LINUX_HARDIRQ_H */ |
---|