Merge branch 'locking-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip
Pull locking fix from Ingo Molnar: "Fixes a crash when accessing /proc/lockdep" * 'locking-urgent-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/tip: locking/lockdep: Zap lock classes even with lock debugging disabled
This commit is contained in:
		
						commit
						26e2b81977
					
				| @ -4689,8 +4689,8 @@ static void free_zapped_rcu(struct rcu_head *ch) | ||||
| 		return; | ||||
| 
 | ||||
| 	raw_local_irq_save(flags); | ||||
| 	if (!graph_lock()) | ||||
| 		goto out_irq; | ||||
| 	arch_spin_lock(&lockdep_lock); | ||||
| 	current->lockdep_recursion = 1; | ||||
| 
 | ||||
| 	/* closed head */ | ||||
| 	pf = delayed_free.pf + (delayed_free.index ^ 1); | ||||
| @ -4702,8 +4702,8 @@ static void free_zapped_rcu(struct rcu_head *ch) | ||||
| 	 */ | ||||
| 	call_rcu_zapped(delayed_free.pf + delayed_free.index); | ||||
| 
 | ||||
| 	graph_unlock(); | ||||
| out_irq: | ||||
| 	current->lockdep_recursion = 0; | ||||
| 	arch_spin_unlock(&lockdep_lock); | ||||
| 	raw_local_irq_restore(flags); | ||||
| } | ||||
| 
 | ||||
| @ -4744,21 +4744,17 @@ static void lockdep_free_key_range_reg(void *start, unsigned long size) | ||||
| { | ||||
| 	struct pending_free *pf; | ||||
| 	unsigned long flags; | ||||
| 	int locked; | ||||
| 
 | ||||
| 	init_data_structures_once(); | ||||
| 
 | ||||
| 	raw_local_irq_save(flags); | ||||
| 	locked = graph_lock(); | ||||
| 	if (!locked) | ||||
| 		goto out_irq; | ||||
| 
 | ||||
| 	arch_spin_lock(&lockdep_lock); | ||||
| 	current->lockdep_recursion = 1; | ||||
| 	pf = get_pending_free(); | ||||
| 	__lockdep_free_key_range(pf, start, size); | ||||
| 	call_rcu_zapped(pf); | ||||
| 
 | ||||
| 	graph_unlock(); | ||||
| out_irq: | ||||
| 	current->lockdep_recursion = 0; | ||||
| 	arch_spin_unlock(&lockdep_lock); | ||||
| 	raw_local_irq_restore(flags); | ||||
| 
 | ||||
| 	/*
 | ||||
| @ -4911,9 +4907,8 @@ void lockdep_unregister_key(struct lock_class_key *key) | ||||
| 		return; | ||||
| 
 | ||||
| 	raw_local_irq_save(flags); | ||||
| 	if (!graph_lock()) | ||||
| 		goto out_irq; | ||||
| 
 | ||||
| 	arch_spin_lock(&lockdep_lock); | ||||
| 	current->lockdep_recursion = 1; | ||||
| 	pf = get_pending_free(); | ||||
| 	hlist_for_each_entry_rcu(k, hash_head, hash_entry) { | ||||
| 		if (k == key) { | ||||
| @ -4925,8 +4920,8 @@ void lockdep_unregister_key(struct lock_class_key *key) | ||||
| 	WARN_ON_ONCE(!found); | ||||
| 	__lockdep_free_key_range(pf, key, 1); | ||||
| 	call_rcu_zapped(pf); | ||||
| 	graph_unlock(); | ||||
| out_irq: | ||||
| 	current->lockdep_recursion = 0; | ||||
| 	arch_spin_unlock(&lockdep_lock); | ||||
| 	raw_local_irq_restore(flags); | ||||
| 
 | ||||
| 	/* Wait until is_dynamic_key() has finished accessing k->hash_entry. */ | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user