mirror of
				https://github.com/torvalds/linux.git
				synced 2025-10-31 16:48:26 +02:00 
			
		
		
		
	locking/lockdep: Adjust lock usage bit character checks
The lock usage bit characters are defined and determined with tricks. Add some explanation to make it a bit clearer, then adjust the logic to check the usage, which optimizes the code a bit. No functional change. Signed-off-by: Yuyang Du <duyuyang@gmail.com> Signed-off-by: Peter Zijlstra (Intel) <peterz@infradead.org> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Thomas Gleixner <tglx@linutronix.de> Cc: bvanassche@acm.org Cc: frederic@kernel.org Cc: ming.lei@redhat.com Cc: will.deacon@arm.com Link: https://lkml.kernel.org/r/20190506081939.74287-4-duyuyang@gmail.com Signed-off-by: Ingo Molnar <mingo@kernel.org>
This commit is contained in:
		
							parent
							
								
									c01fbbc83f
								
							
						
					
					
						commit
						c52478f4f3
					
				
					 1 changed files with 16 additions and 5 deletions
				
			
		|  | @ -500,15 +500,26 @@ static inline unsigned long lock_flag(enum lock_usage_bit bit) | |||
| 
 | ||||
| static char get_usage_char(struct lock_class *class, enum lock_usage_bit bit) | ||||
| { | ||||
| 	/*
 | ||||
| 	 * The usage character defaults to '.' (i.e., irqs disabled and not in | ||||
| 	 * irq context), which is the safest usage category. | ||||
| 	 */ | ||||
| 	char c = '.'; | ||||
| 
 | ||||
| 	if (class->usage_mask & lock_flag(bit + LOCK_USAGE_DIR_MASK)) | ||||
| 	/*
 | ||||
| 	 * The order of the following usage checks matters, which will | ||||
| 	 * result in the outcome character as follows: | ||||
| 	 * | ||||
| 	 * - '+': irq is enabled and not in irq context | ||||
| 	 * - '-': in irq context and irq is disabled | ||||
| 	 * - '?': in irq context and irq is enabled | ||||
| 	 */ | ||||
| 	if (class->usage_mask & lock_flag(bit + LOCK_USAGE_DIR_MASK)) { | ||||
| 		c = '+'; | ||||
| 	if (class->usage_mask & lock_flag(bit)) { | ||||
| 		c = '-'; | ||||
| 		if (class->usage_mask & lock_flag(bit + LOCK_USAGE_DIR_MASK)) | ||||
| 		if (class->usage_mask & lock_flag(bit)) | ||||
| 			c = '?'; | ||||
| 	} | ||||
| 	} else if (class->usage_mask & lock_flag(bit)) | ||||
| 		c = '-'; | ||||
| 
 | ||||
| 	return c; | ||||
| } | ||||
|  |  | |||
		Loading…
	
		Reference in a new issue
	
	 Yuyang Du
						Yuyang Du