.. | .. |
---|
13 | 13 | #define _LINUX_TRACE_IRQFLAGS_H |
---|
14 | 14 | |
---|
15 | 15 | #include <linux/typecheck.h> |
---|
| 16 | +#include <asm-generic/irq_pipeline.h> |
---|
16 | 17 | #include <asm/irqflags.h> |
---|
17 | 18 | #include <asm/percpu.h> |
---|
18 | 19 | |
---|
.. | .. |
---|
52 | 53 | extern void trace_hardirqs_on_prepare(void); |
---|
53 | 54 | extern void trace_hardirqs_off_finish(void); |
---|
54 | 55 | extern void trace_hardirqs_on(void); |
---|
| 56 | +extern void trace_hardirqs_on_pipelined(void); |
---|
55 | 57 | extern void trace_hardirqs_off(void); |
---|
| 58 | +extern void trace_hardirqs_off_pipelined(void); |
---|
56 | 59 | |
---|
57 | 60 | # define lockdep_hardirq_context() (raw_cpu_read(hardirq_context)) |
---|
58 | 61 | # define lockdep_softirq_context(p) ((p)->softirq_context) |
---|
.. | .. |
---|
122 | 125 | # define trace_hardirqs_on_prepare() do { } while (0) |
---|
123 | 126 | # define trace_hardirqs_off_finish() do { } while (0) |
---|
124 | 127 | # define trace_hardirqs_on() do { } while (0) |
---|
| 128 | +# define trace_hardirqs_on_pipelined() do { } while (0) |
---|
125 | 129 | # define trace_hardirqs_off() do { } while (0) |
---|
| 130 | +# define trace_hardirqs_off_pipelined() do { } while (0) |
---|
126 | 131 | # define lockdep_hardirq_context() 0 |
---|
127 | 132 | # define lockdep_softirq_context(p) 0 |
---|
128 | 133 | # define lockdep_hardirqs_enabled() 0 |
---|
.. | .. |
---|
228 | 233 | |
---|
229 | 234 | #endif /* CONFIG_TRACE_IRQFLAGS */ |
---|
230 | 235 | |
---|
| 236 | +#ifdef CONFIG_IRQ_PIPELINE |
---|
| 237 | +#define local_irq_enable_full() \ |
---|
| 238 | + do { \ |
---|
| 239 | + hard_local_irq_enable(); \ |
---|
| 240 | + local_irq_enable(); \ |
---|
| 241 | + } while (0) |
---|
| 242 | + |
---|
| 243 | +#define local_irq_disable_full() \ |
---|
| 244 | + do { \ |
---|
| 245 | + hard_local_irq_disable(); \ |
---|
| 246 | + local_irq_disable(); \ |
---|
| 247 | + } while (0) |
---|
| 248 | + |
---|
| 249 | +#define local_irq_save_full(__flags) \ |
---|
| 250 | + do { \ |
---|
| 251 | + hard_local_irq_disable(); \ |
---|
| 252 | + local_irq_save(__flags); \ |
---|
| 253 | + } while (0) |
---|
| 254 | + |
---|
| 255 | +#define local_irq_restore_full(__flags) \ |
---|
| 256 | + do { \ |
---|
| 257 | + if (!irqs_disabled_flags(__flags)) \ |
---|
| 258 | + hard_local_irq_enable(); \ |
---|
| 259 | + local_irq_restore(__flags); \ |
---|
| 260 | + } while (0) |
---|
| 261 | +#else |
---|
| 262 | +#define local_irq_enable_full() local_irq_enable() |
---|
| 263 | +#define local_irq_disable_full() local_irq_disable() |
---|
| 264 | +#define local_irq_save_full(__flags) local_irq_save(__flags) |
---|
| 265 | +#define local_irq_restore_full(__flags) local_irq_restore(__flags) |
---|
| 266 | +#endif |
---|
| 267 | + |
---|
231 | 268 | #define local_save_flags(flags) raw_local_save_flags(flags) |
---|
232 | 269 | |
---|
233 | 270 | /* |
---|