| .. | .. |
|---|
| 7 | 7 | |
|---|
| 8 | 8 | struct liblockdep_pthread_mutex { |
|---|
| 9 | 9 | pthread_mutex_t mutex; |
|---|
| 10 | + struct lock_class_key key; |
|---|
| 10 | 11 | struct lockdep_map dep_map; |
|---|
| 11 | 12 | }; |
|---|
| 12 | 13 | |
|---|
| .. | .. |
|---|
| 27 | 28 | return pthread_mutex_init(&lock->mutex, __mutexattr); |
|---|
| 28 | 29 | } |
|---|
| 29 | 30 | |
|---|
| 30 | | -#define liblockdep_pthread_mutex_init(mutex, mutexattr) \ |
|---|
| 31 | | -({ \ |
|---|
| 32 | | - static struct lock_class_key __key; \ |
|---|
| 33 | | - \ |
|---|
| 34 | | - __mutex_init((mutex), #mutex, &__key, (mutexattr)); \ |
|---|
| 31 | +#define liblockdep_pthread_mutex_init(mutex, mutexattr) \ |
|---|
| 32 | +({ \ |
|---|
| 33 | + lockdep_register_key(&(mutex)->key); \ |
|---|
| 34 | + __mutex_init((mutex), #mutex, &(mutex)->key, (mutexattr)); \ |
|---|
| 35 | 35 | }) |
|---|
| 36 | 36 | |
|---|
| 37 | 37 | static inline int liblockdep_pthread_mutex_lock(liblockdep_pthread_mutex_t *lock) |
|---|
| .. | .. |
|---|
| 42 | 42 | |
|---|
| 43 | 43 | static inline int liblockdep_pthread_mutex_unlock(liblockdep_pthread_mutex_t *lock) |
|---|
| 44 | 44 | { |
|---|
| 45 | | - lock_release(&lock->dep_map, 0, (unsigned long)_RET_IP_); |
|---|
| 45 | + lock_release(&lock->dep_map, (unsigned long)_RET_IP_); |
|---|
| 46 | 46 | return pthread_mutex_unlock(&lock->mutex); |
|---|
| 47 | 47 | } |
|---|
| 48 | 48 | |
|---|
| .. | .. |
|---|
| 54 | 54 | |
|---|
| 55 | 55 | static inline int liblockdep_pthread_mutex_destroy(liblockdep_pthread_mutex_t *lock) |
|---|
| 56 | 56 | { |
|---|
| 57 | + lockdep_reset_lock(&lock->dep_map); |
|---|
| 58 | + lockdep_unregister_key(&lock->key); |
|---|
| 57 | 59 | return pthread_mutex_destroy(&lock->mutex); |
|---|
| 58 | 60 | } |
|---|
| 59 | 61 | |
|---|