Green shading in the line number column means the source is part of the translation unit, red means it is conditionally excluded. Highlighted line numbers link to the translation unit page. Highlighted macros link to the macro page.
1: #ifndef __LINUX_SPINLOCK_TYPES_H 2: #define __LINUX_SPINLOCK_TYPES_H 3: 4: /* 5: * include/linux/spinlock_types.h - generic spinlock type definitions 6: * and initializers 7: * 8: * portions Copyright 2005, Red Hat, Inc., Ingo Molnar 9: * Released under the General Public License (GPL). 10: */ 11: 12: #if defined(CONFIG_SMP) 13: # include <asm/spinlock_types.h> 14: #else 15: # include <linux/spinlock_types_up.h> 16: #endif 17: 18: #include <linux/lockdep.h> 19: 20: typedef struct raw_spinlock { 21: arch_spinlock_t raw_lock; 22: #ifdef CONFIG_GENERIC_LOCKBREAK 23: unsigned int break_lock; 24: #endif 25: #ifdef CONFIG_DEBUG_SPINLOCK 26: unsigned int magic, owner_cpu; 27: void *owner; 28: #endif 29: #ifdef CONFIG_DEBUG_LOCK_ALLOC 30: struct lockdep_map dep_map; 31: #endif 32: } raw_spinlock_t; 33: 34: #define SPINLOCK_MAGIC 0xdead4ead 35: 36: #define SPINLOCK_OWNER_INIT ((void *)-1L) 37: 38: #ifdef CONFIG_DEBUG_LOCK_ALLOC 39: # define SPIN_DEP_MAP_INIT(lockname) .dep_map = { .name = #lockname } 40: #else 41: # define SPIN_DEP_MAP_INIT(lockname) 42: #endif 43: 44: #ifdef CONFIG_DEBUG_SPINLOCK 45: # define SPIN_DEBUG_INIT(lockname) \ 46: .magic = SPINLOCK_MAGIC, \ 47: .owner_cpu = -1, \ 48: .owner = SPINLOCK_OWNER_INIT, 49: #else 50: # define SPIN_DEBUG_INIT(lockname) 51: #endif 52: 53: #define __RAW_SPIN_LOCK_INITIALIZER(lockname) \ 54: { \ 55: .raw_lock = __ARCH_SPIN_LOCK_UNLOCKED, \ 56: SPIN_DEBUG_INIT(lockname) \ 57: SPIN_DEP_MAP_INIT(lockname) } 58: 59: #define __RAW_SPIN_LOCK_UNLOCKED(lockname) \ 60: (raw_spinlock_t) __RAW_SPIN_LOCK_INITIALIZER(lockname) 61: 62: #define DEFINE_RAW_SPINLOCK(x) raw_spinlock_t x = __RAW_SPIN_LOCK_UNLOCKED(x) 63: 64: typedef struct spinlock { 65: union { 66: struct raw_spinlock rlock; 67: 68: #ifdef CONFIG_DEBUG_LOCK_ALLOC 69: # define LOCK_PADSIZE (offsetof(struct raw_spinlock, dep_map)) 70: struct { 71: u8 __padding[LOCK_PADSIZE]; 72: struct lockdep_map dep_map; 73: }; 74: #endif 75: }; 76: } spinlock_t; 77: 78: #define __SPIN_LOCK_INITIALIZER(lockname) \ 79: { { .rlock = __RAW_SPIN_LOCK_INITIALIZER(lockname) } } 80: 81: #define __SPIN_LOCK_UNLOCKED(lockname) \ 82: (spinlock_t ) __SPIN_LOCK_INITIALIZER(lockname) 83: 84: #define DEFINE_SPINLOCK(x) spinlock_t x = __SPIN_LOCK_UNLOCKED(x) 85: 86: #include <linux/rwlock_types.h> 87: 88: #endif /* __LINUX_SPINLOCK_TYPES_H */ 89: