| /* SPDX-License-Identifier: MIT */ |
| /* |
| * Copyright © 2022 Intel Corporation |
| */ |
| |
| #ifndef __I915_TASKLET_H__ |
| #define __I915_TASKLET_H__ |
| |
| #include <linux/interrupt.h> |
| |
| static inline void tasklet_lock(struct tasklet_struct *t) |
| { |
| while (!tasklet_trylock(t)) |
| cpu_relax(); |
| } |
| |
| static inline bool tasklet_is_locked(const struct tasklet_struct *t) |
| { |
| return test_bit(TASKLET_STATE_RUN, &t->state); |
| } |
| |
| static inline void __tasklet_disable_sync_once(struct tasklet_struct *t) |
| { |
| if (!atomic_fetch_inc(&t->count)) |
| tasklet_unlock_spin_wait(t); |
| } |
| |
| static inline bool __tasklet_is_enabled(const struct tasklet_struct *t) |
| { |
| return !atomic_read(&t->count); |
| } |
| |
| static inline bool __tasklet_enable(struct tasklet_struct *t) |
| { |
| return atomic_dec_and_test(&t->count); |
| } |
| |
| static inline bool __tasklet_is_scheduled(struct tasklet_struct *t) |
| { |
| return test_bit(TASKLET_STATE_SCHED, &t->state); |
| } |
| |
| #endif /* __I915_TASKLET_H__ */ |