| /* SPDX-License-Identifier: MIT */ |
| /* |
| * Copyright © 2018 Intel Corporation |
| */ |
| |
| #ifndef IGT_ATOMIC_H |
| #define IGT_ATOMIC_H |
| |
| #include <linux/preempt.h> |
| #include <linux/bottom_half.h> |
| #include <linux/irqflags.h> |
| |
| static void __preempt_begin(void) |
| { |
| preempt_disable(); |
| } |
| |
| static void __preempt_end(void) |
| { |
| preempt_enable(); |
| } |
| |
| static void __softirq_begin(void) |
| { |
| local_bh_disable(); |
| } |
| |
| static void __softirq_end(void) |
| { |
| local_bh_enable(); |
| } |
| |
| static void __hardirq_begin(void) |
| { |
| local_irq_disable(); |
| } |
| |
| static void __hardirq_end(void) |
| { |
| local_irq_enable(); |
| } |
| |
| struct igt_atomic_section { |
| const char *name; |
| void (*critical_section_begin)(void); |
| void (*critical_section_end)(void); |
| }; |
| |
| static const struct igt_atomic_section igt_atomic_phases[] = { |
| { "preempt", __preempt_begin, __preempt_end }, |
| { "softirq", __softirq_begin, __softirq_end }, |
| { "hardirq", __hardirq_begin, __hardirq_end }, |
| { } |
| }; |
| |
| #endif /* IGT_ATOMIC_H */ |