162306a36Sopenharmony_ci/* SPDX-License-Identifier: MIT */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * Copyright © 2022 Intel Corporation 462306a36Sopenharmony_ci */ 562306a36Sopenharmony_ci 662306a36Sopenharmony_ci#ifndef __I915_TASKLET_H__ 762306a36Sopenharmony_ci#define __I915_TASKLET_H__ 862306a36Sopenharmony_ci 962306a36Sopenharmony_ci#include <linux/interrupt.h> 1062306a36Sopenharmony_ci 1162306a36Sopenharmony_cistatic inline void tasklet_lock(struct tasklet_struct *t) 1262306a36Sopenharmony_ci{ 1362306a36Sopenharmony_ci while (!tasklet_trylock(t)) 1462306a36Sopenharmony_ci cpu_relax(); 1562306a36Sopenharmony_ci} 1662306a36Sopenharmony_ci 1762306a36Sopenharmony_cistatic inline bool tasklet_is_locked(const struct tasklet_struct *t) 1862306a36Sopenharmony_ci{ 1962306a36Sopenharmony_ci return test_bit(TASKLET_STATE_RUN, &t->state); 2062306a36Sopenharmony_ci} 2162306a36Sopenharmony_ci 2262306a36Sopenharmony_cistatic inline void __tasklet_disable_sync_once(struct tasklet_struct *t) 2362306a36Sopenharmony_ci{ 2462306a36Sopenharmony_ci if (!atomic_fetch_inc(&t->count)) 2562306a36Sopenharmony_ci tasklet_unlock_spin_wait(t); 2662306a36Sopenharmony_ci} 2762306a36Sopenharmony_ci 2862306a36Sopenharmony_cistatic inline bool __tasklet_is_enabled(const struct tasklet_struct *t) 2962306a36Sopenharmony_ci{ 3062306a36Sopenharmony_ci return !atomic_read(&t->count); 3162306a36Sopenharmony_ci} 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_cistatic inline bool __tasklet_enable(struct tasklet_struct *t) 3462306a36Sopenharmony_ci{ 3562306a36Sopenharmony_ci return atomic_dec_and_test(&t->count); 3662306a36Sopenharmony_ci} 3762306a36Sopenharmony_ci 3862306a36Sopenharmony_cistatic inline bool __tasklet_is_scheduled(struct tasklet_struct *t) 3962306a36Sopenharmony_ci{ 4062306a36Sopenharmony_ci return test_bit(TASKLET_STATE_SCHED, &t->state); 4162306a36Sopenharmony_ci} 4262306a36Sopenharmony_ci 4362306a36Sopenharmony_ci#endif /* __I915_TASKLET_H__ */ 44