diff options
Diffstat (limited to 'kernel/locking')
| -rw-r--r-- | kernel/locking/lockdep.c | 18 | 
1 files changed, 11 insertions, 7 deletions
diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c index 2fad21d345b0..54b74fabf40c 100644 --- a/kernel/locking/lockdep.c +++ b/kernel/locking/lockdep.c @@ -3756,7 +3756,7 @@ void noinstr lockdep_hardirqs_on(unsigned long ip)  skip_checks:  	/* we'll do an OFF -> ON transition: */ -	this_cpu_write(hardirqs_enabled, 1); +	__this_cpu_write(hardirqs_enabled, 1);  	trace->hardirq_enable_ip = ip;  	trace->hardirq_enable_event = ++trace->irq_events;  	debug_atomic_inc(hardirqs_on_events); @@ -3795,7 +3795,7 @@ void noinstr lockdep_hardirqs_off(unsigned long ip)  		/*  		 * We have done an ON -> OFF transition:  		 */ -		this_cpu_write(hardirqs_enabled, 0); +		__this_cpu_write(hardirqs_enabled, 0);  		trace->hardirq_disable_ip = ip;  		trace->hardirq_disable_event = ++trace->irq_events;  		debug_atomic_inc(hardirqs_off_events); @@ -4977,6 +4977,8 @@ void lock_acquire(struct lockdep_map *lock, unsigned int subclass,  {  	unsigned long flags; +	trace_lock_acquire(lock, subclass, trylock, read, check, nest_lock, ip); +  	if (unlikely(current->lockdep_recursion)) {  		/* XXX allow trylock from NMI ?!? */  		if (lockdep_nmi() && !trylock) { @@ -5001,7 +5003,6 @@ void lock_acquire(struct lockdep_map *lock, unsigned int subclass,  	check_flags(flags);  	current->lockdep_recursion++; -	trace_lock_acquire(lock, subclass, trylock, read, check, nest_lock, ip);  	__lock_acquire(lock, subclass, trylock, read, check,  		       irqs_disabled_flags(flags), nest_lock, ip, 0, 0);  	lockdep_recursion_finish(); @@ -5013,13 +5014,15 @@ void lock_release(struct lockdep_map *lock, unsigned long ip)  {  	unsigned long flags; +	trace_lock_release(lock, ip); +  	if (unlikely(current->lockdep_recursion))  		return;  	raw_local_irq_save(flags);  	check_flags(flags); +  	current->lockdep_recursion++; -	trace_lock_release(lock, ip);  	if (__lock_release(lock, ip))  		check_chain_key(current);  	lockdep_recursion_finish(); @@ -5205,8 +5208,6 @@ __lock_acquired(struct lockdep_map *lock, unsigned long ip)  		hlock->holdtime_stamp = now;  	} -	trace_lock_acquired(lock, ip); -  	stats = get_lock_stats(hlock_class(hlock));  	if (waittime) {  		if (hlock->read) @@ -5225,6 +5226,8 @@ void lock_contended(struct lockdep_map *lock, unsigned long ip)  {  	unsigned long flags; +	trace_lock_acquired(lock, ip); +  	if (unlikely(!lock_stat || !debug_locks))  		return; @@ -5234,7 +5237,6 @@ void lock_contended(struct lockdep_map *lock, unsigned long ip)  	raw_local_irq_save(flags);  	check_flags(flags);  	current->lockdep_recursion++; -	trace_lock_contended(lock, ip);  	__lock_contended(lock, ip);  	lockdep_recursion_finish();  	raw_local_irq_restore(flags); @@ -5245,6 +5247,8 @@ void lock_acquired(struct lockdep_map *lock, unsigned long ip)  {  	unsigned long flags; +	trace_lock_contended(lock, ip); +  	if (unlikely(!lock_stat || !debug_locks))  		return;  |