lockdep: fully reduce mark_lock_irq()
Now what its only two functions, they again look rather similar. Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl> Signed-off-by: Ingo Molnar <mingo@elte.hu>
This commit is contained in:
		
							parent
							
								
									42c50d544e
								
							
						
					
					
						commit
						9d3651a23d
					
				| @ -2061,13 +2061,13 @@ typedef int (*check_usage_f)(struct task_struct *, struct held_lock *, | ||||
| 			     enum lock_usage_bit bit, const char *name); | ||||
| 
 | ||||
| static int | ||||
| mark_lock_irq_write(struct task_struct *curr, struct held_lock *this, | ||||
| 		      int new_bit) | ||||
| mark_lock_irq(struct task_struct *curr, struct held_lock *this, int new_bit) | ||||
| { | ||||
| 	const char *name = state_name(new_bit); | ||||
| 	const char *rname = state_rname(new_bit); | ||||
| 
 | ||||
| 	int excl_bit = exclusive_bit(new_bit); | ||||
| 	int read = new_bit & 1; | ||||
| 	int dir = new_bit & 2; | ||||
| 
 | ||||
| 	check_usage_f usage = dir ? | ||||
| @ -2075,57 +2075,17 @@ mark_lock_irq_write(struct task_struct *curr, struct held_lock *this, | ||||
| 
 | ||||
| 	if (!valid_state(curr, this, new_bit, excl_bit)) | ||||
| 		return 0; | ||||
| 	if (!valid_state(curr, this, new_bit, excl_bit + 1)) | ||||
| 
 | ||||
| 	if (!read && !valid_state(curr, this, new_bit, excl_bit + 1)) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	/*
 | ||||
| 	 * just marked it hardirq-safe, check that this lock | ||||
| 	 * took no hardirq-unsafe lock in the past: | ||||
| 	 */ | ||||
| 	if (!usage(curr, this, excl_bit, name)) | ||||
| 		return 0; | ||||
| #if STRICT_READ_CHECKS | ||||
| 	/*
 | ||||
| 	 * just marked it hardirq-safe, check that this lock | ||||
| 	 * took no hardirq-unsafe-read lock in the past: | ||||
| 	 */ | ||||
| 	if (!usage(curr, this, excl_bit + 1, rname)) | ||||
| 		return 0; | ||||
| #endif | ||||
| 	if (state_verbose(new_bit, hlock_class(this))) | ||||
| 		return 2; | ||||
| 
 | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| static int | ||||
| mark_lock_irq_read(struct task_struct *curr, struct held_lock *this, | ||||
| 			   int new_bit) | ||||
| { | ||||
| 	const char *name = state_name(new_bit); | ||||
| 	const char *rname = state_rname(new_bit); | ||||
| 
 | ||||
| 	int excl_bit = exclusive_bit(new_bit); | ||||
| 	int dir = new_bit & 2; | ||||
| 
 | ||||
| 	if (!valid_state(curr, this, new_bit, excl_bit)) | ||||
| 	if ((!read || (!dir || STRICT_READ_CHECKS)) && | ||||
| 			!usage(curr, this, excl_bit, name)) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	if (!dir) { | ||||
| 		/*
 | ||||
| 		 * just marked it hardirq-read-safe, check that this lock | ||||
| 		 * took no hardirq-unsafe lock in the past: | ||||
| 		 */ | ||||
| 		if (!check_usage_forwards(curr, this, excl_bit, name)) | ||||
| 			return 0; | ||||
| 	} else if (STRICT_READ_CHECKS) { | ||||
| 		/*
 | ||||
| 		 * just marked it hardirq-read-unsafe, check that no | ||||
| 		 * hardirq-safe lock in the system ever took it in the past: | ||||
| 		 */ | ||||
| 		if (!check_usage_backwards(curr, this, excl_bit, name)) | ||||
| 			return 0; | ||||
| 	} | ||||
| 	if ((!read && STRICT_READ_CHECKS) && | ||||
| 			!usage(curr, this, excl_bit + 1, rname)) | ||||
| 		return 0; | ||||
| 
 | ||||
| 	if (state_verbose(new_bit, hlock_class(this))) | ||||
| 		return 2; | ||||
| @ -2133,36 +2093,6 @@ mark_lock_irq_read(struct task_struct *curr, struct held_lock *this, | ||||
| 	return 1; | ||||
| } | ||||
| 
 | ||||
| static int mark_lock_irq(struct task_struct *curr, struct held_lock *this, | ||||
| 		enum lock_usage_bit new_bit) | ||||
| { | ||||
| 	int ret = 1; | ||||
| 
 | ||||
| 	switch(new_bit) { | ||||
| 	case LOCK_USED_IN_HARDIRQ: | ||||
| 	case LOCK_USED_IN_SOFTIRQ: | ||||
| 	case LOCK_USED_IN_RECLAIM_FS: | ||||
| 	case LOCK_ENABLED_HARDIRQ: | ||||
| 	case LOCK_ENABLED_SOFTIRQ: | ||||
| 	case LOCK_ENABLED_RECLAIM_FS: | ||||
| 		return mark_lock_irq_write(curr, this, new_bit); | ||||
| 
 | ||||
| 	case LOCK_USED_IN_HARDIRQ_READ: | ||||
| 	case LOCK_USED_IN_SOFTIRQ_READ: | ||||
| 	case LOCK_USED_IN_RECLAIM_FS_READ: | ||||
| 	case LOCK_ENABLED_HARDIRQ_READ: | ||||
| 	case LOCK_ENABLED_SOFTIRQ_READ: | ||||
| 	case LOCK_ENABLED_RECLAIM_FS_READ: | ||||
| 		return mark_lock_irq_read(curr, this, new_bit); | ||||
| 
 | ||||
| 	default: | ||||
| 		WARN_ON(1); | ||||
| 		break; | ||||
| 	} | ||||
| 
 | ||||
| 	return ret; | ||||
| } | ||||
| 
 | ||||
| enum mark_type { | ||||
| #define LOCKDEP_STATE(__STATE)	__STATE, | ||||
| #include "lockdep_states.h" | ||||
|  | ||||
		Loading…
	
		Reference in New Issue
	
	Block a user