📄 spinlock_up.h
字号:
#ifndef __LINUX_SPINLOCK_UP_H#define __LINUX_SPINLOCK_UP_H#ifndef __LINUX_SPINLOCK_H# error "please don't include this file directly"#endif/* * include/linux/spinlock_up.h - UP-debug version of spinlocks. * * portions Copyright 2005, Red Hat, Inc., Ingo Molnar * Released under the General Public License (GPL). * * In the debug case, 1 means unlocked, 0 means locked. (the values * are inverted, to catch initialization bugs) * * No atomicity anywhere, we are on UP. */#ifdef CONFIG_DEBUG_SPINLOCK#define __raw_spin_is_locked(x) ((x)->slock == 0)static inline void __raw_spin_lock(raw_spinlock_t *lock){ lock->slock = 0;}static inline void__raw_spin_lock_flags(raw_spinlock_t *lock, unsigned long flags){ local_irq_save(flags); lock->slock = 0;}static inline int __raw_spin_trylock(raw_spinlock_t *lock){ char oldval = lock->slock; lock->slock = 0; return oldval > 0;}static inline void __raw_spin_unlock(raw_spinlock_t *lock){ lock->slock = 1;}/* * Read-write spinlocks. No debug version. */#define __raw_read_lock(lock) do { (void)(lock); } while (0)#define __raw_write_lock(lock) do { (void)(lock); } while (0)#define __raw_read_trylock(lock) ({ (void)(lock); 1; })#define __raw_write_trylock(lock) ({ (void)(lock); 1; })#define __raw_read_unlock(lock) do { (void)(lock); } while (0)#define __raw_write_unlock(lock) do { (void)(lock); } while (0)#else /* DEBUG_SPINLOCK */#define __raw_spin_is_locked(lock) ((void)(lock), 0)/* for sched.c and kernel_lock.c: */# define __raw_spin_lock(lock) do { (void)(lock); } while (0)# define __raw_spin_unlock(lock) do { (void)(lock); } while (0)# define __raw_spin_trylock(lock) ({ (void)(lock); 1; })#endif /* DEBUG_SPINLOCK */#define __raw_read_can_lock(lock) (((void)(lock), 1))#define __raw_write_can_lock(lock) (((void)(lock), 1))#define __raw_spin_unlock_wait(lock) \ do { cpu_relax(); } while (__raw_spin_is_locked(lock))#endif /* __LINUX_SPINLOCK_UP_H */
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -