1 #ifndef _LIBLOCKDEP_COMMON_H 2 #define _LIBLOCKDEP_COMMON_H 3 4 #include <pthread.h> 5 6 #define NR_LOCKDEP_CACHING_CLASSES 2 7 #define MAX_LOCKDEP_SUBCLASSES 8UL 8 9 #ifndef CALLER_ADDR0 10 #define CALLER_ADDR0 ((unsigned long)__builtin_return_address(0)) 11 #endif 12 13 #ifndef _RET_IP_ 14 #define _RET_IP_ CALLER_ADDR0 15 #endif 16 17 #ifndef _THIS_IP_ 18 #define _THIS_IP_ ({ __label__ __here; __here: (unsigned long)&&__here; }) 19 #endif 20 21 struct lockdep_subclass_key { 22 char __one_byte; 23 }; 24 25 struct lock_class_key { 26 struct lockdep_subclass_key subkeys[MAX_LOCKDEP_SUBCLASSES]; 27 }; 28 29 struct lockdep_map { 30 struct lock_class_key *key; 31 struct lock_class *class_cache[NR_LOCKDEP_CACHING_CLASSES]; 32 const char *name; 33 #ifdef CONFIG_LOCK_STAT 34 int cpu; 35 unsigned long ip; 36 #endif 37 }; 38 39 void lockdep_init_map(struct lockdep_map *lock, const char *name, 40 struct lock_class_key *key, int subclass); 41 void lock_acquire(struct lockdep_map *lock, unsigned int subclass, 42 int trylock, int read, int check, 43 struct lockdep_map *nest_lock, unsigned long ip); 44 void lock_release(struct lockdep_map *lock, int nested, 45 unsigned long ip); 46 47 #define STATIC_LOCKDEP_MAP_INIT(_name, _key) \ 48 { .name = (_name), .key = (void *)(_key), } 49 50 #endif 51