1/* 2 * include/asm-s390/smplock.h 3 * 4 * S390 version 5 * 6 * Derived from "include/asm-i386/smplock.h" 7 */ 8 9#include <linux/interrupt.h> 10#include <linux/spinlock.h> 11 12extern spinlock_t kernel_flag; 13 14#define kernel_locked() spin_is_locked(&kernel_flag) 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/* 45 * Getting the big kernel lock. 46 * 47 * This cannot happen asynchronously, 48 * so we only need to worry about other 49 * CPU's. 50 */ 51extern __inline__ void lock_kernel(void) 52{ 53 if (!++current->lock_depth) 54 spin_lock(&kernel_flag); 55} 56 57extern __inline__ void unlock_kernel(void) 58{ 59 if (--current->lock_depth < 0) 60 spin_unlock(&kernel_flag); 61} 62 63