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