diff options
| author | Dave Jones <davej@redhat.com> | 2008-08-11 03:30:23 -0400 |
|---|---|---|
| committer | Ingo Molnar <mingo@elte.hu> | 2008-08-11 03:30:23 -0400 |
| commit | f82b217e3513fe3af342c0f3ee1494e86250c21c (patch) | |
| tree | 144b724c9e0c491c0983087627000080b25b9852 /include/linux | |
| parent | 1b12bbc747560ea68bcc132c3d05699e52271da0 (diff) | |
lockdep: shrink held_lock structure
struct held_lock {
u64 prev_chain_key; /* 0 8 */
struct lock_class * class; /* 8 8 */
long unsigned int acquire_ip; /* 16 8 */
struct lockdep_map * instance; /* 24 8 */
int irq_context; /* 32 4 */
int trylock; /* 36 4 */
int read; /* 40 4 */
int check; /* 44 4 */
int hardirqs_off; /* 48 4 */
/* size: 56, cachelines: 1 */
/* padding: 4 */
/* last cacheline: 56 bytes */
};
struct held_lock {
u64 prev_chain_key; /* 0 8 */
long unsigned int acquire_ip; /* 8 8 */
struct lockdep_map * instance; /* 16 8 */
unsigned int class_idx:11; /* 24:21 4 */
unsigned int irq_context:2; /* 24:19 4 */
unsigned int trylock:1; /* 24:18 4 */
unsigned int read:2; /* 24:16 4 */
unsigned int check:2; /* 24:14 4 */
unsigned int hardirqs_off:1; /* 24:13 4 */
/* size: 32, cachelines: 1 */
/* padding: 4 */
/* bit_padding: 13 bits */
/* last cacheline: 32 bytes */
};
[mingo@elte.hu: shrunk hlock->class too]
[peterz@infradead.org: fixup bit sizes]
Signed-off-by: Dave Jones <davej@redhat.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Diffstat (limited to 'include/linux')
| -rw-r--r-- | include/linux/lockdep.h | 16 |
1 files changed, 9 insertions, 7 deletions
diff --git a/include/linux/lockdep.h b/include/linux/lockdep.h index f270ce1582ff..b49bfa8e4a5c 100644 --- a/include/linux/lockdep.h +++ b/include/linux/lockdep.h | |||
| @@ -190,6 +190,9 @@ struct lock_chain { | |||
| 190 | u64 chain_key; | 190 | u64 chain_key; |
| 191 | }; | 191 | }; |
| 192 | 192 | ||
| 193 | #define MAX_LOCKDEP_KEYS_BITS 11 | ||
| 194 | #define MAX_LOCKDEP_KEYS (1UL << MAX_LOCKDEP_KEYS_BITS) | ||
| 195 | |||
| 193 | struct held_lock { | 196 | struct held_lock { |
| 194 | /* | 197 | /* |
| 195 | * One-way hash of the dependency chain up to this point. We | 198 | * One-way hash of the dependency chain up to this point. We |
| @@ -206,14 +209,13 @@ struct held_lock { | |||
| 206 | * with zero), here we store the previous hash value: | 209 | * with zero), here we store the previous hash value: |
| 207 | */ | 210 | */ |
| 208 | u64 prev_chain_key; | 211 | u64 prev_chain_key; |
| 209 | struct lock_class *class; | ||
| 210 | unsigned long acquire_ip; | 212 | unsigned long acquire_ip; |
| 211 | struct lockdep_map *instance; | 213 | struct lockdep_map *instance; |
| 212 | |||
| 213 | #ifdef CONFIG_LOCK_STAT | 214 | #ifdef CONFIG_LOCK_STAT |
| 214 | u64 waittime_stamp; | 215 | u64 waittime_stamp; |
| 215 | u64 holdtime_stamp; | 216 | u64 holdtime_stamp; |
| 216 | #endif | 217 | #endif |
| 218 | unsigned int class_idx:MAX_LOCKDEP_KEYS_BITS; | ||
| 217 | /* | 219 | /* |
| 218 | * The lock-stack is unified in that the lock chains of interrupt | 220 | * The lock-stack is unified in that the lock chains of interrupt |
| 219 | * contexts nest ontop of process context chains, but we 'separate' | 221 | * contexts nest ontop of process context chains, but we 'separate' |
| @@ -227,11 +229,11 @@ struct held_lock { | |||
| 227 | * The following field is used to detect when we cross into an | 229 | * The following field is used to detect when we cross into an |
| 228 | * interrupt context: | 230 | * interrupt context: |
| 229 | */ | 231 | */ |
| 230 | int irq_context; | 232 | unsigned int irq_context:2; /* bit 0 - soft, bit 1 - hard */ |
| 231 | int trylock; | 233 | unsigned int trylock:1; |
| 232 | int read; | 234 | unsigned int read:2; /* see lock_acquire() comment */ |
| 233 | int check; | 235 | unsigned int check:2; /* see lock_acquire() comment */ |
| 234 | int hardirqs_off; | 236 | unsigned int hardirqs_off:1; |
| 235 | }; | 237 | }; |
| 236 | 238 | ||
| 237 | /* | 239 | /* |
