[RFC 4/13] Char: nozomi, tty index cleanup

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



nozomi, tty index cleanup

- don't store unneeded copy of tty->index into port structure, tty->index
  is available everywhere
- mod tty->index by MAX_PORT where expected (otherwise array index out of
  bounds)

Signed-off-by: Jiri Slaby <[email protected]>

---
commit 3afb47133874a0979f57928d7450612fa982a6c5
tree 8d9ea282ddbffed0d75c946b3ae046e3bdcc7456
parent 14e887763c076e45f4f768348361a37c10709902
author Jiri Slaby <[email protected]> Sun, 28 Oct 2007 22:15:22 +0100
committer Jiri Slaby <[email protected]> Fri, 09 Nov 2007 23:09:04 +0100

 drivers/char/nozomi.c |   47 +++++++++++++++++++----------------------------
 1 files changed, 19 insertions(+), 28 deletions(-)

diff --git a/drivers/char/nozomi.c b/drivers/char/nozomi.c
index e33f21e..d19b5c5 100644
--- a/drivers/char/nozomi.c
+++ b/drivers/char/nozomi.c
@@ -411,7 +411,6 @@ struct port {
 	struct semaphore tty_sem;
 	wait_queue_head_t tty_wait;
 	struct async_icount tty_icount;
-	int tty_index;
 };
 
 /* Private data one for each card in the system */
@@ -1782,22 +1781,22 @@ static void __devexit nozomi_card_exit(struct pci_dev *pdev)
 static void set_rts(int index, int rts)
 {
 	struct nozomi *dc = get_dc_by_index(index);
-	int devindex = index % NTTY_TTY_MINORS;
+	struct port *port = &dc->port[index % MAX_PORT];
 
-	dc->port[devindex].ctrl_ul.RTS = rts;
-	dc->port[devindex].update_flow_control = 1;
+	port->ctrl_ul.RTS = rts;
+	port->update_flow_control = 1;
 	enable_transmit_ul(PORT_CTRL, dc);
 }
 
 static void set_dtr(int index, int dtr)
 {
 	struct nozomi *dc = get_dc_by_index(index);
-	int devindex = index % NTTY_TTY_MINORS;
+	struct port *port = &dc->port[index % MAX_PORT];
 
 	DBG1("SETTING DTR index: %d, dtr: %d", index, dtr);
 
-	dc->port[devindex].ctrl_ul.DTR = dtr;
-	dc->port[devindex].update_flow_control = 1;
+	port->ctrl_ul.DTR = dtr;
+	port->update_flow_control = 1;
 	enable_transmit_ul(PORT_CTRL, dc);
 }
 
@@ -1828,7 +1827,6 @@ static int ntty_open(struct tty_struct *tty, struct file *file)
 		tty->low_latency = 1;
 		tty->driver_data = port;
 		port->tty = tty;
-		port->tty_index = tty->index;
 		DBG1("open: %d", port->token_dl);
 		spin_lock_irqsave(&dc->spin_mutex, flags);
 		dc->last_ier =
@@ -1918,14 +1916,13 @@ static int ntty_write(struct tty_struct *tty, const unsigned char *buffer,
 	if (port == &(dc->port[PORT_MDM])) {
 		if (port->ctrl_dl.CTS) {
 			DBG4("Enable interrupt");
-			enable_transmit_ul(port->tty_index % NTTY_TTY_MINORS,
-									dc);
+			enable_transmit_ul(tty->index % MAX_PORT, dc);
 		} else {
 			dev_err(&dc->pdev->dev,
 				"CTS not active on modem port?\n");
 		}
 	} else {
-		enable_transmit_ul(port->tty_index % NTTY_TTY_MINORS, dc);
+		enable_transmit_ul(tty->index % MAX_PORT, dc);
 	}
 	spin_unlock_irqrestore(&dc->spin_mutex, flags);
 
@@ -1980,17 +1977,15 @@ static int ntty_tiocmget(struct tty_struct *tty, struct file *file)
 static int ntty_tiocmset(struct tty_struct *tty, struct file *file,
 	unsigned int set, unsigned int clear)
 {
-	struct port *port = (struct port *)tty->driver_data;
-
 	if (set & TIOCM_RTS)
-		set_rts(port->tty_index, 1);
+		set_rts(tty->index, 1);
 	else if (clear & TIOCM_RTS)
-		set_rts(port->tty_index, 0);
+		set_rts(tty->index, 0);
 
 	if (set & TIOCM_DTR)
-		set_dtr(port->tty_index, 1);
+		set_dtr(tty->index, 1);
 	else if (clear & TIOCM_DTR)
-		set_dtr(port->tty_index, 0);
+		set_dtr(tty->index, 0);
 
 	return 0;
 }
@@ -2064,7 +2059,6 @@ static int ntty_ioctl_tiocgicount(struct tty_struct *tty, struct file *file,
 static int ntty_ioctl(struct tty_struct *tty, struct file *file,
 		      unsigned int cmd, unsigned long arg)
 {
-	struct port *port = tty->driver_data;
 	struct nozomi *dc = get_dc_by_tty(tty);
 	unsigned long flags;
 	int mask;
@@ -2094,9 +2088,9 @@ static int ntty_ioctl(struct tty_struct *tty, struct file *file,
 
 		spin_lock_irqsave(&dc->spin_mutex, flags);
 		if (mask & TIOCM_RTS)
-			set_rts(port->tty_index, 0);
+			set_rts(tty->index, 0);
 		if (mask & TIOCM_DTR)
-			set_dtr(port->tty_index, 0);
+			set_dtr(tty->index, 0);
 		spin_unlock_irqrestore(&dc->spin_mutex, flags);
 		rval = 0;
 		break;
@@ -2106,9 +2100,9 @@ static int ntty_ioctl(struct tty_struct *tty, struct file *file,
 
 		spin_lock_irqsave(&dc->spin_mutex, flags);
 		if (mask & TIOCM_RTS)
-			set_rts(port->tty_index, 1);
+			set_rts(tty->index, 1);
 		if (mask & TIOCM_DTR)
-			set_dtr(port->tty_index, 1);
+			set_dtr(tty->index, 1);
 		spin_unlock_irqrestore(&dc->spin_mutex, flags);
 		rval = 0;
 		break;
@@ -2126,15 +2120,13 @@ static int ntty_ioctl(struct tty_struct *tty, struct file *file,
  */
 static void ntty_unthrottle(struct tty_struct *tty)
 {
-	struct port *port = (struct port *)tty->driver_data;
 	struct nozomi *dc = get_dc_by_tty(tty);
 	unsigned long flags;
 
 	DBG1("UNTHROTTLE");
 	spin_lock_irqsave(&dc->spin_mutex, flags);
-	enable_transmit_dl(port->tty_index % NTTY_TTY_MINORS, dc);
-	set_rts(port->tty_index, 1);
-
+	enable_transmit_dl(tty->index % MAX_PORT, dc);
+	set_rts(tty->index, 1);
 	spin_unlock_irqrestore(&dc->spin_mutex, flags);
 }
 
@@ -2144,13 +2136,12 @@ static void ntty_unthrottle(struct tty_struct *tty)
  */
 static void ntty_throttle(struct tty_struct *tty)
 {
-	struct port *port = (struct port *)tty->driver_data;
 	struct nozomi *dc = get_dc_by_tty(tty);
 	unsigned long flags;
 
 	DBG1("THROTTLE");
 	spin_lock_irqsave(&dc->spin_mutex, flags);
-	set_rts(port->tty_index, 0);
+	set_rts(tty->index, 0);
 	spin_unlock_irqrestore(&dc->spin_mutex, flags);
 }
 
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to [email protected]
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/

[Index of Archives]     [Kernel Newbies]     [Netfilter]     [Bugtraq]     [Photo]     [Stuff]     [Gimp]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Video 4 Linux]     [Linux for the blind]     [Linux Resources]
  Powered by Linux