mirror of
				https://github.com/torvalds/linux.git
				synced 2025-11-04 10:40:15 +02:00 
			
		
		
		
	tty: add lockdep annotations
tty_lock_pair() do the right thing to avoid deadlocks, but should instruct LOCKDEP of this to avoid a splat. Signed-off-by: Eric Dumazet <edumazet@google.com> Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
This commit is contained in:
		
							parent
							
								
									1d59d61f60
								
							
						
					
					
						commit
						fde86d3108
					
				
					 1 changed files with 15 additions and 4 deletions
				
			
		| 
						 | 
					@ -6,11 +6,17 @@
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/* Legacy tty mutex glue */
 | 
					/* Legacy tty mutex glue */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					enum {
 | 
				
			||||||
 | 
						TTY_MUTEX_NORMAL,
 | 
				
			||||||
 | 
						TTY_MUTEX_NESTED,
 | 
				
			||||||
 | 
					};
 | 
				
			||||||
 | 
					
 | 
				
			||||||
/*
 | 
					/*
 | 
				
			||||||
 * Getting the big tty mutex.
 | 
					 * Getting the big tty mutex.
 | 
				
			||||||
 */
 | 
					 */
 | 
				
			||||||
 | 
					
 | 
				
			||||||
void __lockfunc tty_lock(struct tty_struct *tty)
 | 
					static void __lockfunc tty_lock_nested(struct tty_struct *tty,
 | 
				
			||||||
 | 
									       unsigned int subclass)
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (tty->magic != TTY_MAGIC) {
 | 
						if (tty->magic != TTY_MAGIC) {
 | 
				
			||||||
		printk(KERN_ERR "L Bad %p\n", tty);
 | 
							printk(KERN_ERR "L Bad %p\n", tty);
 | 
				
			||||||
| 
						 | 
					@ -18,7 +24,12 @@ void __lockfunc tty_lock(struct tty_struct *tty)
 | 
				
			||||||
		return;
 | 
							return;
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
	tty_kref_get(tty);
 | 
						tty_kref_get(tty);
 | 
				
			||||||
	mutex_lock(&tty->legacy_mutex);
 | 
						mutex_lock_nested(&tty->legacy_mutex, subclass);
 | 
				
			||||||
 | 
					}
 | 
				
			||||||
 | 
					
 | 
				
			||||||
 | 
					void __lockfunc tty_lock(struct tty_struct *tty)
 | 
				
			||||||
 | 
					{
 | 
				
			||||||
 | 
						return tty_lock_nested(tty, TTY_MUTEX_NORMAL);
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(tty_lock);
 | 
					EXPORT_SYMBOL(tty_lock);
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					@ -43,11 +54,11 @@ void __lockfunc tty_lock_pair(struct tty_struct *tty,
 | 
				
			||||||
{
 | 
					{
 | 
				
			||||||
	if (tty < tty2) {
 | 
						if (tty < tty2) {
 | 
				
			||||||
		tty_lock(tty);
 | 
							tty_lock(tty);
 | 
				
			||||||
		tty_lock(tty2);
 | 
							tty_lock_nested(tty2, TTY_MUTEX_NESTED);
 | 
				
			||||||
	} else {
 | 
						} else {
 | 
				
			||||||
		if (tty2 && tty2 != tty)
 | 
							if (tty2 && tty2 != tty)
 | 
				
			||||||
			tty_lock(tty2);
 | 
								tty_lock(tty2);
 | 
				
			||||||
		tty_lock(tty);
 | 
							tty_lock_nested(tty, TTY_MUTEX_NESTED);
 | 
				
			||||||
	}
 | 
						}
 | 
				
			||||||
}
 | 
					}
 | 
				
			||||||
EXPORT_SYMBOL(tty_lock_pair);
 | 
					EXPORT_SYMBOL(tty_lock_pair);
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue