1 /* SPDX-License-Identifier: MIT */
2 /*
3  * Copyright © 2022 Intel Corporation
4  */
5 
6 #ifndef __I915_TASKLET_H__
7 #define __I915_TASKLET_H__
8 
9 #include <linux/interrupt.h>
10 
11 static inline void tasklet_lock(struct tasklet_struct *t)
12 {
13 	while (!tasklet_trylock(t))
14 		cpu_relax();
15 }
16 
17 static inline bool tasklet_is_locked(const struct tasklet_struct *t)
18 {
19 	return test_bit(TASKLET_STATE_RUN, &t->state);
20 }
21 
22 static inline void __tasklet_disable_sync_once(struct tasklet_struct *t)
23 {
24 	if (!atomic_fetch_inc(&t->count))
25 		tasklet_unlock_spin_wait(t);
26 }
27 
28 static inline bool __tasklet_is_enabled(const struct tasklet_struct *t)
29 {
30 	return !atomic_read(&t->count);
31 }
32 
33 static inline bool __tasklet_enable(struct tasklet_struct *t)
34 {
35 	return atomic_dec_and_test(&t->count);
36 }
37 
38 static inline bool __tasklet_is_scheduled(struct tasklet_struct *t)
39 {
40 	return test_bit(TASKLET_STATE_SCHED, &t->state);
41 }
42 
43 #endif /* __I915_TASKLET_H__ */
44