#ifndef __KERN_SYNC_SYNC_H__ #define __KERN_SYNC_SYNC_H__ #include #include #include #include #include #include static inline bool __intr_save(void) { if (read_eflags() & FL_IF) { intr_disable(); return 1; } return 0; } static inline void __intr_restore(bool flag) { if (flag) { intr_enable(); } } #define local_intr_save(x) do { x = __intr_save(); } while (0) #define local_intr_restore(x) __intr_restore(x); typedef volatile bool lock_t; static inline void lock_init(lock_t *lock) { *lock = 0; } static inline bool try_lock(lock_t *lock) { return !test_and_set_bit(0, lock); } static inline void lock(lock_t *lock) { while (!try_lock(lock)) { schedule(); } } static inline void unlock(lock_t *lock) { if (!test_and_clear_bit(0, lock)) { panic("Unlock failed.\n"); } } #endif /* !__KERN_SYNC_SYNC_H__ */