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 21struct lockdep_subclass_key { 22 char __one_byte; 23}; 24 25struct lock_class_key { 26 struct lockdep_subclass_key subkeys[MAX_LOCKDEP_SUBCLASSES]; 27}; 28 29struct 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 39void lockdep_init_map(struct lockdep_map *lock, const char *name, 40 struct lock_class_key *key, int subclass); 41void 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); 44void 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