smp_lock.h

来自「Linux Kernel 2.6.9 for OMAP1710」· C头文件 代码 · 共 67 行

H
67
字号
#ifndef __LINUX_SMPLOCK_H#define __LINUX_SMPLOCK_H#include <linux/config.h>#include <linux/sched.h>#include <linux/spinlock.h>#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT)extern spinlock_t kernel_flag;#define kernel_locked()		(current->lock_depth >= 0)#define get_kernel_lock()	spin_lock(&kernel_flag)#define put_kernel_lock()	spin_unlock(&kernel_flag)/* * Release global kernel lock. */static inline void release_kernel_lock(struct task_struct *task){	if (unlikely(task->lock_depth >= 0))		put_kernel_lock();}/* * Re-acquire the kernel lock */static inline void reacquire_kernel_lock(struct task_struct *task){	if (unlikely(task->lock_depth >= 0))		get_kernel_lock();}/* * Getting the big kernel lock. * * This cannot happen asynchronously, * so we only need to worry about other * CPU's. */static inline void lock_kernel(void){	int depth = current->lock_depth+1;	if (likely(!depth))		get_kernel_lock();	current->lock_depth = depth;}static inline void unlock_kernel(void){	BUG_ON(current->lock_depth < 0);	if (likely(--current->lock_depth < 0))		put_kernel_lock();}#else#define lock_kernel()				do { } while(0)#define unlock_kernel()				do { } while(0)#define release_kernel_lock(task)		do { } while(0)#define reacquire_kernel_lock(task)		do { } while(0)#define kernel_locked()				1#endif /* CONFIG_SMP || CONFIG_PREEMPT */#endif /* __LINUX_SMPLOCK_H */

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?