18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: MIT
28c2ecf20Sopenharmony_ci/*
38c2ecf20Sopenharmony_ci * Copyright © 2018 Intel Corporation
48c2ecf20Sopenharmony_ci */
58c2ecf20Sopenharmony_ci
68c2ecf20Sopenharmony_ci#include <linux/preempt.h>
78c2ecf20Sopenharmony_ci#include <linux/bottom_half.h>
88c2ecf20Sopenharmony_ci#include <linux/irqflags.h>
98c2ecf20Sopenharmony_ci
108c2ecf20Sopenharmony_ci#include "igt_atomic.h"
118c2ecf20Sopenharmony_ci
128c2ecf20Sopenharmony_cistatic void __preempt_begin(void)
138c2ecf20Sopenharmony_ci{
148c2ecf20Sopenharmony_ci	preempt_disable();
158c2ecf20Sopenharmony_ci}
168c2ecf20Sopenharmony_ci
178c2ecf20Sopenharmony_cistatic void __preempt_end(void)
188c2ecf20Sopenharmony_ci{
198c2ecf20Sopenharmony_ci	preempt_enable();
208c2ecf20Sopenharmony_ci}
218c2ecf20Sopenharmony_ci
228c2ecf20Sopenharmony_cistatic void __softirq_begin(void)
238c2ecf20Sopenharmony_ci{
248c2ecf20Sopenharmony_ci	local_bh_disable();
258c2ecf20Sopenharmony_ci}
268c2ecf20Sopenharmony_ci
278c2ecf20Sopenharmony_cistatic void __softirq_end(void)
288c2ecf20Sopenharmony_ci{
298c2ecf20Sopenharmony_ci	local_bh_enable();
308c2ecf20Sopenharmony_ci}
318c2ecf20Sopenharmony_ci
328c2ecf20Sopenharmony_cistatic void __hardirq_begin(void)
338c2ecf20Sopenharmony_ci{
348c2ecf20Sopenharmony_ci	local_irq_disable();
358c2ecf20Sopenharmony_ci}
368c2ecf20Sopenharmony_ci
378c2ecf20Sopenharmony_cistatic void __hardirq_end(void)
388c2ecf20Sopenharmony_ci{
398c2ecf20Sopenharmony_ci	local_irq_enable();
408c2ecf20Sopenharmony_ci}
418c2ecf20Sopenharmony_ci
428c2ecf20Sopenharmony_ciconst struct igt_atomic_section igt_atomic_phases[] = {
438c2ecf20Sopenharmony_ci	{ "preempt", __preempt_begin, __preempt_end },
448c2ecf20Sopenharmony_ci	{ "softirq", __softirq_begin, __softirq_end },
458c2ecf20Sopenharmony_ci	{ "hardirq", __hardirq_begin, __hardirq_end },
468c2ecf20Sopenharmony_ci	{ }
478c2ecf20Sopenharmony_ci};
48