aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux
diff options
context:
space:
mode:
authorDave Jones <davej@redhat.com>2008-08-11 03:30:23 -0400
committerIngo Molnar <mingo@elte.hu>2008-08-11 03:30:23 -0400
commitf82b217e3513fe3af342c0f3ee1494e86250c21c (patch)
tree144b724c9e0c491c0983087627000080b25b9852 /include/linux
parent1b12bbc747560ea68bcc132c3d05699e52271da0 (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.h16
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
193struct held_lock { 196struct 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/*