Browse Source

[PATCH] tty layer comment the locking assumptions and functions somewhat

Doesn't fix them but does show up some interesting areas that need review
and fixing.

Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Alan Cox 18 năm trước cách đây
mục cha
commit
af9b897ee6
2 tập tin đã thay đổi với 639 bổ sung38 xóa
  1. 582 36
      drivers/char/tty_io.c
  2. 57 2
      drivers/char/tty_ioctl.c

Những thai đổi đã bị hủy bỏ vì nó quá lớn
+ 582 - 36
drivers/char/tty_io.c


+ 57 - 2
drivers/char/tty_ioctl.c

@@ -36,6 +36,18 @@
 #define TERMIOS_WAIT	2
 #define TERMIOS_WAIT	2
 #define TERMIOS_TERMIO	4
 #define TERMIOS_TERMIO	4
 
 
+
+/**
+ *	tty_wait_until_sent	-	wait for I/O to finish
+ *	@tty: tty we are waiting for
+ *	@timeout: how long we will wait
+ *
+ *	Wait for characters pending in a tty driver to hit the wire, or
+ *	for a timeout to occur (eg due to flow control)
+ *
+ *	Locking: none
+ */
+
 void tty_wait_until_sent(struct tty_struct * tty, long timeout)
 void tty_wait_until_sent(struct tty_struct * tty, long timeout)
 {
 {
 	DECLARE_WAITQUEUE(wait, current);
 	DECLARE_WAITQUEUE(wait, current);
@@ -94,6 +106,18 @@ static void unset_locked_termios(struct termios *termios,
 			old->c_cc[i] : termios->c_cc[i];
 			old->c_cc[i] : termios->c_cc[i];
 }
 }
 
 
+/**
+ *	change_termios		-	update termios values
+ *	@tty: tty to update
+ *	@new_termios: desired new value
+ *
+ *	Perform updates to the termios values set on this terminal. There
+ *	is a bit of layering violation here with n_tty in terms of the
+ *	internal knowledge of this function.
+ *
+ *	Locking: termios_sem
+ */
+
 static void change_termios(struct tty_struct * tty, struct termios * new_termios)
 static void change_termios(struct tty_struct * tty, struct termios * new_termios)
 {
 {
 	int canon_change;
 	int canon_change;
@@ -155,6 +179,19 @@ static void change_termios(struct tty_struct * tty, struct termios * new_termios
 	up(&tty->termios_sem);
 	up(&tty->termios_sem);
 }
 }
 
 
+/**
+ *	set_termios		-	set termios values for a tty
+ *	@tty: terminal device
+ *	@arg: user data
+ *	@opt: option information
+ *
+ *	Helper function to prepare termios data and run neccessary other
+ *	functions before using change_termios to do the actual changes.
+ *
+ *	Locking:
+ *		Called functions take ldisc and termios_sem locks
+ */
+
 static int set_termios(struct tty_struct * tty, void __user *arg, int opt)
 static int set_termios(struct tty_struct * tty, void __user *arg, int opt)
 {
 {
 	struct termios tmp_termios;
 	struct termios tmp_termios;
@@ -284,6 +321,17 @@ static void set_sgflags(struct termios * termios, int flags)
 	}
 	}
 }
 }
 
 
+/**
+ *	set_sgttyb		-	set legacy terminal values
+ *	@tty: tty structure
+ *	@sgttyb: pointer to old style terminal structure
+ *
+ *	Updates a terminal from the legacy BSD style terminal information
+ *	structure.
+ *
+ *	Locking: termios_sem
+ */
+
 static int set_sgttyb(struct tty_struct * tty, struct sgttyb __user * sgttyb)
 static int set_sgttyb(struct tty_struct * tty, struct sgttyb __user * sgttyb)
 {
 {
 	int retval;
 	int retval;
@@ -369,9 +417,16 @@ static int set_ltchars(struct tty_struct * tty, struct ltchars __user * ltchars)
 }
 }
 #endif
 #endif
 
 
-/*
- * Send a high priority character to the tty.
+/**
+ *	send_prio_char		-	send priority character
+ *
+ *	Send a high priority character to the tty even if stopped
+ *
+ *	Locking: none
+ *
+ *	FIXME: overlapping calls with start/stop tty lose state of tty
  */
  */
+
 static void send_prio_char(struct tty_struct *tty, char ch)
 static void send_prio_char(struct tty_struct *tty, char ch)
 {
 {
 	int	was_stopped = tty->stopped;
 	int	was_stopped = tty->stopped;

Một số tệp đã không được hiển thị bởi vì quá nhiều tập tin thay đổi trong này khác