| .. | .. |
|---|
| 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 | /* |
|---|