~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

Linux Cross Reference
Linux/include/asm-parisc/smplock.h

Version: ~ [ 2.4.0 ] ~
Architecture: ~ [ i386 ] ~ [ alpha ] ~ [ m68k ] ~ [ mips ] ~ [ ppc ] ~ [ sparc ] ~ [ sparc64 ] ~

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

~ [ source navigation ] ~ [ diff markup ] ~ [ identifier search ] ~ [ freetext search ] ~ [ file search ] ~

This page was automatically generated by the LXR engine.
Visit the LXR main site for more information.