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