smplock.h
上传用户:lgb322
上传日期:2013-02-24
资源大小:30529k
文件大小:1k
源码类别:

嵌入式Linux

开发平台:

Unix_Linux

  1. /*
  2.  * BK Id: SCCS/s.smplock.h 1.10 10/23/01 08:09:35 trini
  3.  */
  4. /*
  5.  * <asm/smplock.h>
  6.  *
  7.  * Default SMP lock implementation
  8.  */
  9. #ifdef __KERNEL__
  10. #ifndef __ASM_SMPLOCK_H__
  11. #define __ASM_SMPLOCK_H__
  12. #include <linux/interrupt.h>
  13. #include <linux/spinlock.h>
  14. extern spinlock_t kernel_flag;
  15. #define kernel_locked() spin_is_locked(&kernel_flag)
  16. /*
  17.  * Release global kernel lock and global interrupt lock
  18.  */
  19. #define release_kernel_lock(task, cpu) 
  20. do { 
  21. if (task->lock_depth >= 0) 
  22. spin_unlock(&kernel_flag); 
  23. release_irqlock(cpu); 
  24. __sti(); 
  25. } while (0)
  26. /*
  27.  * Re-acquire the kernel lock
  28.  */
  29. #define reacquire_kernel_lock(task) 
  30. do { 
  31. if (task->lock_depth >= 0) 
  32. spin_lock(&kernel_flag); 
  33. } while (0)
  34. /*
  35.  * Getting the big kernel lock.
  36.  *
  37.  * This cannot happen asynchronously,
  38.  * so we only need to worry about other
  39.  * CPU's.
  40.  */
  41. static __inline__ void lock_kernel(void)
  42. {
  43. if (!++current->lock_depth)
  44. spin_lock(&kernel_flag);
  45. }
  46. static __inline__ void unlock_kernel(void)
  47. {
  48. if (--current->lock_depth < 0)
  49. spin_unlock(&kernel_flag);
  50. }
  51. #endif /* __ASM_SMPLOCK_H__ */
  52. #endif /* __KERNEL__ */