|
@@ -1973,7 +1973,7 @@ static inline int lookup_chain_cache(struct task_struct *curr,
|
|
struct list_head *hash_head = chainhashentry(chain_key);
|
|
struct list_head *hash_head = chainhashentry(chain_key);
|
|
struct lock_chain *chain;
|
|
struct lock_chain *chain;
|
|
struct held_lock *hlock_curr, *hlock_next;
|
|
struct held_lock *hlock_curr, *hlock_next;
|
|
- int i, j, n, cn;
|
|
|
|
|
|
+ int i, j;
|
|
|
|
|
|
if (DEBUG_LOCKS_WARN_ON(!irqs_disabled()))
|
|
if (DEBUG_LOCKS_WARN_ON(!irqs_disabled()))
|
|
return 0;
|
|
return 0;
|
|
@@ -2033,15 +2033,9 @@ cache_hit:
|
|
}
|
|
}
|
|
i++;
|
|
i++;
|
|
chain->depth = curr->lockdep_depth + 1 - i;
|
|
chain->depth = curr->lockdep_depth + 1 - i;
|
|
- cn = nr_chain_hlocks;
|
|
|
|
- while (cn + chain->depth <= MAX_LOCKDEP_CHAIN_HLOCKS) {
|
|
|
|
- n = cmpxchg(&nr_chain_hlocks, cn, cn + chain->depth);
|
|
|
|
- if (n == cn)
|
|
|
|
- break;
|
|
|
|
- cn = n;
|
|
|
|
- }
|
|
|
|
- if (likely(cn + chain->depth <= MAX_LOCKDEP_CHAIN_HLOCKS)) {
|
|
|
|
- chain->base = cn;
|
|
|
|
|
|
+ if (likely(nr_chain_hlocks + chain->depth <= MAX_LOCKDEP_CHAIN_HLOCKS)) {
|
|
|
|
+ chain->base = nr_chain_hlocks;
|
|
|
|
+ nr_chain_hlocks += chain->depth;
|
|
for (j = 0; j < chain->depth - 1; j++, i++) {
|
|
for (j = 0; j < chain->depth - 1; j++, i++) {
|
|
int lock_id = curr->held_locks[i].class_idx - 1;
|
|
int lock_id = curr->held_locks[i].class_idx - 1;
|
|
chain_hlocks[chain->base + j] = lock_id;
|
|
chain_hlocks[chain->base + j] = lock_id;
|