diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/lockdep.c | 11 |
1 files changed, 6 insertions, 5 deletions
diff --git a/kernel/lockdep.c b/kernel/lockdep.c index 0bb246e21cd7..2b443b5090a1 100644 --- a/kernel/lockdep.c +++ b/kernel/lockdep.c | |||
| @@ -861,14 +861,15 @@ struct circular_queue { | |||
| 861 | }; | 861 | }; |
| 862 | 862 | ||
| 863 | static struct circular_queue lock_cq; | 863 | static struct circular_queue lock_cq; |
| 864 | static unsigned long bfs_accessed[BITS_TO_LONGS(MAX_LOCKDEP_ENTRIES)]; | ||
| 865 | 864 | ||
| 866 | unsigned int max_bfs_queue_depth; | 865 | unsigned int max_bfs_queue_depth; |
| 867 | 866 | ||
| 867 | static unsigned int lockdep_dependency_gen_id; | ||
| 868 | |||
| 868 | static inline void __cq_init(struct circular_queue *cq) | 869 | static inline void __cq_init(struct circular_queue *cq) |
| 869 | { | 870 | { |
| 870 | cq->front = cq->rear = 0; | 871 | cq->front = cq->rear = 0; |
| 871 | bitmap_zero(bfs_accessed, MAX_LOCKDEP_ENTRIES); | 872 | lockdep_dependency_gen_id++; |
| 872 | } | 873 | } |
| 873 | 874 | ||
| 874 | static inline int __cq_empty(struct circular_queue *cq) | 875 | static inline int __cq_empty(struct circular_queue *cq) |
| @@ -914,7 +915,7 @@ static inline void mark_lock_accessed(struct lock_list *lock, | |||
| 914 | nr = lock - list_entries; | 915 | nr = lock - list_entries; |
| 915 | WARN_ON(nr >= nr_list_entries); | 916 | WARN_ON(nr >= nr_list_entries); |
| 916 | lock->parent = parent; | 917 | lock->parent = parent; |
| 917 | set_bit(nr, bfs_accessed); | 918 | lock->class->dep_gen_id = lockdep_dependency_gen_id; |
| 918 | } | 919 | } |
| 919 | 920 | ||
| 920 | static inline unsigned long lock_accessed(struct lock_list *lock) | 921 | static inline unsigned long lock_accessed(struct lock_list *lock) |
| @@ -923,7 +924,7 @@ static inline unsigned long lock_accessed(struct lock_list *lock) | |||
| 923 | 924 | ||
| 924 | nr = lock - list_entries; | 925 | nr = lock - list_entries; |
| 925 | WARN_ON(nr >= nr_list_entries); | 926 | WARN_ON(nr >= nr_list_entries); |
| 926 | return test_bit(nr, bfs_accessed); | 927 | return lock->class->dep_gen_id == lockdep_dependency_gen_id; |
| 927 | } | 928 | } |
| 928 | 929 | ||
| 929 | static inline struct lock_list *get_lock_parent(struct lock_list *child) | 930 | static inline struct lock_list *get_lock_parent(struct lock_list *child) |
| @@ -3604,7 +3605,7 @@ void __init lockdep_info(void) | |||
| 3604 | sizeof(struct lock_chain) * MAX_LOCKDEP_CHAINS + | 3605 | sizeof(struct lock_chain) * MAX_LOCKDEP_CHAINS + |
| 3605 | sizeof(struct list_head) * CHAINHASH_SIZE) / 1024 | 3606 | sizeof(struct list_head) * CHAINHASH_SIZE) / 1024 |
| 3606 | #ifdef CONFIG_PROVE_LOCKING | 3607 | #ifdef CONFIG_PROVE_LOCKING |
| 3607 | + sizeof(struct circular_queue) + sizeof(bfs_accessed) | 3608 | + sizeof(struct circular_queue) |
| 3608 | #endif | 3609 | #endif |
| 3609 | ); | 3610 | ); |
| 3610 | 3611 | ||
