1 /* $NetBSD: igt_atomic.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $ */
2
3 // SPDX-License-Identifier: MIT
4 /*
5 * Copyright © 2018 Intel Corporation
6 */
7
8 #include <sys/cdefs.h>
9 __KERNEL_RCSID(0, "$NetBSD: igt_atomic.c,v 1.2 2021/12/18 23:45:31 riastradh Exp $");
10
11 #include <linux/preempt.h>
12 #include <linux/bottom_half.h>
13 #include <linux/irqflags.h>
14
15 #include "igt_atomic.h"
16
__preempt_begin(void)17 static void __preempt_begin(void)
18 {
19 preempt_disable();
20 }
21
__preempt_end(void)22 static void __preempt_end(void)
23 {
24 preempt_enable();
25 }
26
__softirq_begin(void)27 static void __softirq_begin(void)
28 {
29 local_bh_disable();
30 }
31
__softirq_end(void)32 static void __softirq_end(void)
33 {
34 local_bh_enable();
35 }
36
__hardirq_begin(void)37 static void __hardirq_begin(void)
38 {
39 local_irq_disable();
40 }
41
__hardirq_end(void)42 static void __hardirq_end(void)
43 {
44 local_irq_enable();
45 }
46
47 const struct igt_atomic_section igt_atomic_phases[] = {
48 { "preempt", __preempt_begin, __preempt_end },
49 { "softirq", __softirq_begin, __softirq_end },
50 { "hardirq", __hardirq_begin, __hardirq_end },
51 { }
52 };
53