linux-old/include/asm-sparc64/smplock.h
<<
>>
Prefs
   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
  10extern spinlock_t kernel_flag;
  11
  12#define kernel_locked()                 \
  13        (spin_is_locked(&kernel_flag) &&\
  14         (current->lock_depth >= 0))
  15
  16/*
  17 * Release global kernel lock and global interrupt lock
  18 */
  19#define release_kernel_lock(task, cpu) \
  20do { \
  21        if (task->lock_depth >= 0) \
  22                spin_unlock(&kernel_flag); \
  23        release_irqlock(cpu); \
  24        __sti(); \
  25} while (0)
  26
  27/*
  28 * Re-acquire the kernel lock
  29 */
  30#define reacquire_kernel_lock(task) \
  31do { \
  32        if (task->lock_depth >= 0) \
  33                spin_lock(&kernel_flag); \
  34} while (0)
  35
  36
  37/*
  38 * Getting the big kernel lock.
  39 *
  40 * This cannot happen asynchronously,
  41 * so we only need to worry about other
  42 * CPU's.
  43 */
  44#define lock_kernel() \
  45do { \
  46        if (!++current->lock_depth) \
  47                spin_lock(&kernel_flag); \
  48} while(0)
  49
  50#define unlock_kernel() \
  51do { \
  52        if (--current->lock_depth < 0) \
  53                spin_unlock(&kernel_flag); \
  54} while(0)
  55
lxr.linux.no kindly hosted by Redpill Linpro AS, provider of Linux consulting and operations services since 1995.