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

嵌入式Linux

开发平台:

Unix_Linux

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