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 tasklet_lock(struct tasklet_struct * t)11static inline void tasklet_lock(struct tasklet_struct *t) 12 { 13 while (!tasklet_trylock(t)) 14 cpu_relax(); 15 } 16 tasklet_is_locked(const struct tasklet_struct * t)17static inline bool tasklet_is_locked(const struct tasklet_struct *t) 18 { 19 return test_bit(TASKLET_STATE_RUN, &t->state); 20 } 21 __tasklet_disable_sync_once(struct tasklet_struct * t)22static 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 __tasklet_is_enabled(const struct tasklet_struct * t)28static inline bool __tasklet_is_enabled(const struct tasklet_struct *t) 29 { 30 return !atomic_read(&t->count); 31 } 32 __tasklet_enable(struct tasklet_struct * t)33static inline bool __tasklet_enable(struct tasklet_struct *t) 34 { 35 return atomic_dec_and_test(&t->count); 36 } 37 __tasklet_is_scheduled(struct tasklet_struct * t)38static 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