diff options
Diffstat (limited to 'include/net/sock.h')
| -rw-r--r-- | include/net/sock.h | 19 |
1 files changed, 13 insertions, 6 deletions
diff --git a/include/net/sock.h b/include/net/sock.h index 7b3d6b856946..324b3ea233d6 100644 --- a/include/net/sock.h +++ b/include/net/sock.h | |||
| @@ -44,6 +44,7 @@ | |||
| 44 | #include <linux/timer.h> | 44 | #include <linux/timer.h> |
| 45 | #include <linux/cache.h> | 45 | #include <linux/cache.h> |
| 46 | #include <linux/module.h> | 46 | #include <linux/module.h> |
| 47 | #include <linux/lockdep.h> | ||
| 47 | #include <linux/netdevice.h> | 48 | #include <linux/netdevice.h> |
| 48 | #include <linux/skbuff.h> /* struct sk_buff */ | 49 | #include <linux/skbuff.h> /* struct sk_buff */ |
| 49 | #include <linux/security.h> | 50 | #include <linux/security.h> |
| @@ -78,14 +79,17 @@ typedef struct { | |||
| 78 | spinlock_t slock; | 79 | spinlock_t slock; |
| 79 | struct sock_iocb *owner; | 80 | struct sock_iocb *owner; |
| 80 | wait_queue_head_t wq; | 81 | wait_queue_head_t wq; |
| 82 | /* | ||
| 83 | * We express the mutex-alike socket_lock semantics | ||
| 84 | * to the lock validator by explicitly managing | ||
| 85 | * the slock as a lock variant (in addition to | ||
| 86 | * the slock itself): | ||
| 87 | */ | ||
| 88 | #ifdef CONFIG_DEBUG_LOCK_ALLOC | ||
| 89 | struct lockdep_map dep_map; | ||
| 90 | #endif | ||
| 81 | } socket_lock_t; | 91 | } socket_lock_t; |
| 82 | 92 | ||
| 83 | #define sock_lock_init(__sk) \ | ||
| 84 | do { spin_lock_init(&((__sk)->sk_lock.slock)); \ | ||
| 85 | (__sk)->sk_lock.owner = NULL; \ | ||
| 86 | init_waitqueue_head(&((__sk)->sk_lock.wq)); \ | ||
| 87 | } while(0) | ||
| 88 | |||
| 89 | struct sock; | 93 | struct sock; |
| 90 | struct proto; | 94 | struct proto; |
| 91 | 95 | ||
| @@ -747,6 +751,9 @@ extern void FASTCALL(release_sock(struct sock *sk)); | |||
| 747 | 751 | ||
| 748 | /* BH context may only use the following locking interface. */ | 752 | /* BH context may only use the following locking interface. */ |
| 749 | #define bh_lock_sock(__sk) spin_lock(&((__sk)->sk_lock.slock)) | 753 | #define bh_lock_sock(__sk) spin_lock(&((__sk)->sk_lock.slock)) |
| 754 | #define bh_lock_sock_nested(__sk) \ | ||
| 755 | spin_lock_nested(&((__sk)->sk_lock.slock), \ | ||
| 756 | SINGLE_DEPTH_NESTING) | ||
| 750 | #define bh_unlock_sock(__sk) spin_unlock(&((__sk)->sk_lock.slock)) | 757 | #define bh_unlock_sock(__sk) spin_unlock(&((__sk)->sk_lock.slock)) |
| 751 | 758 | ||
| 752 | extern struct sock *sk_alloc(int family, | 759 | extern struct sock *sk_alloc(int family, |
