All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name
@ 2015-03-31 13:55 Rasmus Villemoes
  2015-03-31 13:55 ` [PATCH 1/3] tty: constify return type of tty_name Rasmus Villemoes
                   ` (3 more replies)
  0 siblings, 4 replies; 7+ messages in thread
From: Rasmus Villemoes @ 2015-03-31 13:55 UTC (permalink / raw)
  To: Dmitry Torokhov, Greg Kroah-Hartman, Jiri Slaby, Mikael Starvik,
	Jesper Nilsson
  Cc: Rasmus Villemoes, linux-input, linux-kernel, linux-cris-kernel,
	linux-serial

All users of tty_name pass the return value directly to a printf
function, so we might as well use tty->name directly instead of
copying it to a user-supplied (stack) buffer.

allmodconfig compile-tested only.

Rasmus Villemoes (3):
  tty: constify return type of tty_name
  tty: return tty->name directly from tty_name
  tty: remove buf parameter from tty_name()

 drivers/input/serio/serport.c    |  5 ++---
 drivers/tty/amiserial.c          |  8 ++------
 drivers/tty/cyclades.c           |  8 ++------
 drivers/tty/n_gsm.c              |  3 +--
 drivers/tty/n_tty.c              |  7 ++-----
 drivers/tty/serial/crisv10.c     |  8 ++------
 drivers/tty/serial/serial_core.c |  4 +---
 drivers/tty/tty_io.c             | 34 +++++++++++++---------------------
 drivers/tty/tty_ioctl.c          |  4 +---
 drivers/tty/tty_ldisc.c          |  8 +++-----
 include/linux/tty.h              |  2 +-
 11 files changed, 30 insertions(+), 61 deletions(-)

-- 
2.1.3


^ permalink raw reply	[flat|nested] 7+ messages in thread

* [PATCH 1/3] tty: constify return type of tty_name
  2015-03-31 13:55 [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Rasmus Villemoes
@ 2015-03-31 13:55 ` Rasmus Villemoes
  2015-03-31 13:55 ` [PATCH 2/3] tty: return tty->name directly from tty_name Rasmus Villemoes
                   ` (2 subsequent siblings)
  3 siblings, 0 replies; 7+ messages in thread
From: Rasmus Villemoes @ 2015-03-31 13:55 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby; +Cc: Rasmus Villemoes, linux-kernel

All users of tty_name pass the result directly to a printf-like
function. This means we can actually let tty_name return the literal
"NULL tty" or tty->name directly, avoiding the strcpy and a lot of
medium-sized stack buffers. In preparation for that, make the return
type const char*.

While at it, we can also constify the tty parameter.

Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
---
 drivers/tty/tty_io.c | 2 +-
 include/linux/tty.h  | 2 +-
 2 files changed, 2 insertions(+), 2 deletions(-)

diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index 2bb4dfc02873..5d4a9fd7510a 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -243,7 +243,7 @@ static void tty_del_file(struct file *file)
  *	Locking: none
  */
 
-char *tty_name(struct tty_struct *tty, char *buf)
+const char *tty_name(const struct tty_struct *tty, char *buf)
 {
 	if (!tty) /* Hmm.  NULL pointer.  That's fun. */
 		strcpy(buf, "NULL tty");
diff --git a/include/linux/tty.h b/include/linux/tty.h
index 358a337af598..8771cc4faf9f 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -421,7 +421,7 @@ static inline struct tty_struct *tty_kref_get(struct tty_struct *tty)
 
 extern int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
 			      const char *routine);
-extern char *tty_name(struct tty_struct *tty, char *buf);
+extern const char *tty_name(const struct tty_struct *tty, char *buf);
 extern void tty_wait_until_sent(struct tty_struct *tty, long timeout);
 extern int tty_check_change(struct tty_struct *tty);
 extern void __stop_tty(struct tty_struct *tty);
-- 
2.1.3


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 2/3] tty: return tty->name directly from tty_name
  2015-03-31 13:55 [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Rasmus Villemoes
  2015-03-31 13:55 ` [PATCH 1/3] tty: constify return type of tty_name Rasmus Villemoes
@ 2015-03-31 13:55 ` Rasmus Villemoes
  2015-03-31 13:55 ` [PATCH 3/3] tty: remove buf parameter from tty_name() Rasmus Villemoes
  2015-04-04  0:20 ` [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Peter Hurley
  3 siblings, 0 replies; 7+ messages in thread
From: Rasmus Villemoes @ 2015-03-31 13:55 UTC (permalink / raw)
  To: Greg Kroah-Hartman, Jiri Slaby; +Cc: Rasmus Villemoes, linux-kernel

All users of tty_name pass the return value (the provided buffer) to
some printf-like function. We can thus avoid the strcpy and, more
importantly, later remove the buf parameter completely, eliminating
the need for some 64 byte stack buffers.

Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
---
 drivers/tty/tty_io.c | 8 +++-----
 1 file changed, 3 insertions(+), 5 deletions(-)

diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index 5d4a9fd7510a..ab549e7bdaa8 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -235,7 +235,7 @@ static void tty_del_file(struct file *file)
 /**
  *	tty_name	-	return tty naming
  *	@tty: tty structure
- *	@buf: buffer for output
+ *	@buf: unused
  *
  *	Convert a tty structure into a name. The name reflects the kernel
  *	naming policy and if udev is in use may not reflect user space
@@ -246,10 +246,8 @@ static void tty_del_file(struct file *file)
 const char *tty_name(const struct tty_struct *tty, char *buf)
 {
 	if (!tty) /* Hmm.  NULL pointer.  That's fun. */
-		strcpy(buf, "NULL tty");
-	else
-		strcpy(buf, tty->name);
-	return buf;
+		return "NULL tty";
+	return tty->name;
 }
 
 EXPORT_SYMBOL(tty_name);
-- 
2.1.3


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* [PATCH 3/3] tty: remove buf parameter from tty_name()
  2015-03-31 13:55 [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Rasmus Villemoes
  2015-03-31 13:55 ` [PATCH 1/3] tty: constify return type of tty_name Rasmus Villemoes
  2015-03-31 13:55 ` [PATCH 2/3] tty: return tty->name directly from tty_name Rasmus Villemoes
@ 2015-03-31 13:55 ` Rasmus Villemoes
  2015-03-31 21:40   ` Dmitry Torokhov
  2015-04-07  8:57   ` Jesper Nilsson
  2015-04-04  0:20 ` [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Peter Hurley
  3 siblings, 2 replies; 7+ messages in thread
From: Rasmus Villemoes @ 2015-03-31 13:55 UTC (permalink / raw)
  To: Dmitry Torokhov, Greg Kroah-Hartman, Jiri Slaby, Mikael Starvik,
	Jesper Nilsson
  Cc: Rasmus Villemoes, linux-input, linux-kernel, linux-cris-kernel,
	linux-serial

tty_name no longer uses the buf parameter, so remove it along with all
the 64 byte stack buffers that used to be passed in.

Mostly generated by the coccinelle script

@depends on patch@
identifier buf;
constant C;
expression tty;
@@
- char buf[C];
  <+...
- tty_name(tty, buf)
+ tty_name(tty)
  ...+>

allmodconfig compiles, so I'm fairly confident the stack buffers
weren't used for other purposes as well.

Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
---
 drivers/input/serio/serport.c    |  5 ++---
 drivers/tty/amiserial.c          |  8 ++------
 drivers/tty/cyclades.c           |  8 ++------
 drivers/tty/n_gsm.c              |  3 +--
 drivers/tty/n_tty.c              |  7 ++-----
 drivers/tty/serial/crisv10.c     |  8 ++------
 drivers/tty/serial/serial_core.c |  4 +---
 drivers/tty/tty_io.c             | 28 +++++++++++-----------------
 drivers/tty/tty_ioctl.c          |  4 +---
 drivers/tty/tty_ldisc.c          |  8 +++-----
 include/linux/tty.h              |  2 +-
 11 files changed, 28 insertions(+), 57 deletions(-)

diff --git a/drivers/input/serio/serport.c b/drivers/input/serio/serport.c
index 69175b825346..9c927d35c1f5 100644
--- a/drivers/input/serio/serport.c
+++ b/drivers/input/serio/serport.c
@@ -167,7 +167,6 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
 {
 	struct serport *serport = (struct serport*) tty->disc_data;
 	struct serio *serio;
-	char name[64];
 
 	if (test_and_set_bit(SERPORT_BUSY, &serport->flags))
 		return -EBUSY;
@@ -177,7 +176,7 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
 		return -ENOMEM;
 
 	strlcpy(serio->name, "Serial port", sizeof(serio->name));
-	snprintf(serio->phys, sizeof(serio->phys), "%s/serio0", tty_name(tty, name));
+	snprintf(serio->phys, sizeof(serio->phys), "%s/serio0", tty_name(tty));
 	serio->id = serport->id;
 	serio->id.type = SERIO_RS232;
 	serio->write = serport_serio_write;
@@ -187,7 +186,7 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
 	serio->dev.parent = tty->dev;
 
 	serio_register_port(serport->serio);
-	printk(KERN_INFO "serio: Serial port %s\n", tty_name(tty, name));
+	printk(KERN_INFO "serio: Serial port %s\n", tty_name(tty));
 
 	wait_event_interruptible(serport->wait, test_bit(SERPORT_DEAD, &serport->flags));
 	serio_unregister_port(serport->serio);
diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c
index b2d760055952..894d3a84e285 100644
--- a/drivers/tty/amiserial.c
+++ b/drivers/tty/amiserial.c
@@ -966,9 +966,7 @@ static void rs_throttle(struct tty_struct * tty)
 	struct serial_state *info = tty->driver_data;
 	unsigned long flags;
 #ifdef SERIAL_DEBUG_THROTTLE
-	char	buf[64];
-
-	printk("throttle %s: %d....\n", tty_name(tty, buf),
+	printk("throttle %s: %d....\n", tty_name(tty),
 	       tty->ldisc.chars_in_buffer(tty));
 #endif
 
@@ -991,9 +989,7 @@ static void rs_unthrottle(struct tty_struct * tty)
 	struct serial_state *info = tty->driver_data;
 	unsigned long flags;
 #ifdef SERIAL_DEBUG_THROTTLE
-	char	buf[64];
-
-	printk("unthrottle %s: %d....\n", tty_name(tty, buf),
+	printk("unthrottle %s: %d....\n", tty_name(tty),
 	       tty->ldisc.chars_in_buffer(tty));
 #endif
 
diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
index fd66f57390d0..87f6578c6f4a 100644
--- a/drivers/tty/cyclades.c
+++ b/drivers/tty/cyclades.c
@@ -2861,9 +2861,7 @@ static void cy_throttle(struct tty_struct *tty)
 	unsigned long flags;
 
 #ifdef CY_DEBUG_THROTTLE
-	char buf[64];
-
-	printk(KERN_DEBUG "cyc:throttle %s: %ld...ttyC%d\n", tty_name(tty, buf),
+	printk(KERN_DEBUG "cyc:throttle %s: %ld...ttyC%d\n", tty_name(tty),
 			tty->ldisc.chars_in_buffer(tty), info->line);
 #endif
 
@@ -2902,10 +2900,8 @@ static void cy_unthrottle(struct tty_struct *tty)
 	unsigned long flags;
 
 #ifdef CY_DEBUG_THROTTLE
-	char buf[64];
-
 	printk(KERN_DEBUG "cyc:unthrottle %s: %ld...ttyC%d\n",
-		tty_name(tty, buf), tty_chars_in_buffer(tty), info->line);
+		tty_name(tty), tty_chars_in_buffer(tty), info->line);
 #endif
 
 	if (serial_paranoia_check(info, tty->name, "cy_unthrottle"))
diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
index c4343764cc5b..9b6d3d5ee51c 100644
--- a/drivers/tty/n_gsm.c
+++ b/drivers/tty/n_gsm.c
@@ -2274,7 +2274,6 @@ static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp,
 	const unsigned char *dp;
 	char *f;
 	int i;
-	char buf[64];
 	char flags = TTY_NORMAL;
 
 	if (debug & 4)
@@ -2296,7 +2295,7 @@ static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp,
 			break;
 		default:
 			WARN_ONCE(1, "%s: unknown flag %d\n",
-			       tty_name(tty, buf), flags);
+			       tty_name(tty), flags);
 			break;
 		}
 	}
diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
index cf6e0f2e1331..54da8f49394d 100644
--- a/drivers/tty/n_tty.c
+++ b/drivers/tty/n_tty.c
@@ -1179,13 +1179,12 @@ static void n_tty_receive_break(struct tty_struct *tty)
 static void n_tty_receive_overrun(struct tty_struct *tty)
 {
 	struct n_tty_data *ldata = tty->disc_data;
-	char buf[64];
 
 	ldata->num_overrun++;
 	if (time_after(jiffies, ldata->overrun_time + HZ) ||
 			time_after(ldata->overrun_time, jiffies)) {
 		printk(KERN_WARNING "%s: %d input overrun(s)\n",
-			tty_name(tty, buf),
+			tty_name(tty),
 			ldata->num_overrun);
 		ldata->overrun_time = jiffies;
 		ldata->num_overrun = 0;
@@ -1460,8 +1459,6 @@ static void n_tty_receive_char_closing(struct tty_struct *tty, unsigned char c)
 static void
 n_tty_receive_char_flagged(struct tty_struct *tty, unsigned char c, char flag)
 {
-	char buf[64];
-
 	switch (flag) {
 	case TTY_BREAK:
 		n_tty_receive_break(tty);
@@ -1475,7 +1472,7 @@ n_tty_receive_char_flagged(struct tty_struct *tty, unsigned char c, char flag)
 		break;
 	default:
 		printk(KERN_ERR "%s: unknown flag %d\n",
-		       tty_name(tty, buf), flag);
+		       tty_name(tty), flag);
 		break;
 	}
 }
diff --git a/drivers/tty/serial/crisv10.c b/drivers/tty/serial/crisv10.c
index 0c1825b0b41d..568ea0d2d699 100644
--- a/drivers/tty/serial/crisv10.c
+++ b/drivers/tty/serial/crisv10.c
@@ -3216,9 +3216,7 @@ rs_throttle(struct tty_struct * tty)
 {
 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
 #ifdef SERIAL_DEBUG_THROTTLE
-	char	buf[64];
-
-	printk("throttle %s: %lu....\n", tty_name(tty, buf),
+	printk("throttle %s: %lu....\n", tty_name(tty),
 	       (unsigned long)tty->ldisc.chars_in_buffer(tty));
 #endif
 	DFLOW(DEBUG_LOG(info->line,"rs_throttle %lu\n", tty->ldisc.chars_in_buffer(tty)));
@@ -3238,9 +3236,7 @@ rs_unthrottle(struct tty_struct * tty)
 {
 	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
 #ifdef SERIAL_DEBUG_THROTTLE
-	char	buf[64];
-
-	printk("unthrottle %s: %lu....\n", tty_name(tty, buf),
+	printk("unthrottle %s: %lu....\n", tty_name(tty),
 	       (unsigned long)tty->ldisc.chars_in_buffer(tty));
 #endif
 	DFLOW(DEBUG_LOG(info->line,"rs_unthrottle ldisc %d\n", tty->ldisc.chars_in_buffer(tty)));
diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
index 6a1055ae3437..4e73b6482f0b 100644
--- a/drivers/tty/serial/serial_core.c
+++ b/drivers/tty/serial/serial_core.c
@@ -894,12 +894,10 @@ static int uart_set_info(struct tty_struct *tty, struct tty_port *port,
 			 * need to rate-limit; it's CAP_SYS_ADMIN only.
 			 */
 			if (uport->flags & UPF_SPD_MASK) {
-				char buf[64];
-
 				dev_notice(uport->dev,
 				       "%s sets custom speed on %s. This is deprecated.\n",
 				      current->comm,
-				      tty_name(port->tty, buf));
+				      tty_name(port->tty));
 			}
 			uart_change_speed(tty, state, NULL);
 		}
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index ab549e7bdaa8..96f948dc43a6 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -235,7 +235,6 @@ static void tty_del_file(struct file *file)
 /**
  *	tty_name	-	return tty naming
  *	@tty: tty structure
- *	@buf: unused
  *
  *	Convert a tty structure into a name. The name reflects the kernel
  *	naming policy and if udev is in use may not reflect user space
@@ -243,7 +242,7 @@ static void tty_del_file(struct file *file)
  *	Locking: none
  */
 
-const char *tty_name(const struct tty_struct *tty, char *buf)
+const char *tty_name(const struct tty_struct *tty)
 {
 	if (!tty) /* Hmm.  NULL pointer.  That's fun. */
 		return "NULL tty";
@@ -768,8 +767,7 @@ static void do_tty_hangup(struct work_struct *work)
 void tty_hangup(struct tty_struct *tty)
 {
 #ifdef TTY_DEBUG_HANGUP
-	char	buf[64];
-	printk(KERN_DEBUG "%s hangup...\n", tty_name(tty, buf));
+	printk(KERN_DEBUG "%s hangup...\n", tty_name(tty));
 #endif
 	schedule_work(&tty->hangup_work);
 }
@@ -788,9 +786,7 @@ EXPORT_SYMBOL(tty_hangup);
 void tty_vhangup(struct tty_struct *tty)
 {
 #ifdef TTY_DEBUG_HANGUP
-	char	buf[64];
-
-	printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty, buf));
+	printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty));
 #endif
 	__tty_hangup(tty, 0);
 }
@@ -829,9 +825,7 @@ void tty_vhangup_self(void)
 static void tty_vhangup_session(struct tty_struct *tty)
 {
 #ifdef TTY_DEBUG_HANGUP
-	char	buf[64];
-
-	printk(KERN_DEBUG "%s vhangup session...\n", tty_name(tty, buf));
+	printk(KERN_DEBUG "%s vhangup session...\n", tty_name(tty));
 #endif
 	__tty_hangup(tty, 1);
 }
@@ -1761,7 +1755,6 @@ int tty_release(struct inode *inode, struct file *filp)
 	struct tty_struct *o_tty = NULL;
 	int	do_sleep, final;
 	int	idx;
-	char	buf[64];
 	long	timeout = 0;
 	int	once = 1;
 
@@ -1785,7 +1778,7 @@ int tty_release(struct inode *inode, struct file *filp)
 
 #ifdef TTY_DEBUG_HANGUP
 	printk(KERN_DEBUG "%s: %s (tty count=%d)...\n", __func__,
-			tty_name(tty, buf), tty->count);
+			tty_name(tty), tty->count);
 #endif
 
 	if (tty->ops->close)
@@ -1836,7 +1829,7 @@ int tty_release(struct inode *inode, struct file *filp)
 		if (once) {
 			once = 0;
 			printk(KERN_WARNING "%s: %s: read/write wait queue active!\n",
-			       __func__, tty_name(tty, buf));
+			       __func__, tty_name(tty));
 		}
 		schedule_timeout_killable(timeout);
 		if (timeout < 120 * HZ)
@@ -1848,13 +1841,13 @@ int tty_release(struct inode *inode, struct file *filp)
 	if (o_tty) {
 		if (--o_tty->count < 0) {
 			printk(KERN_WARNING "%s: bad pty slave count (%d) for %s\n",
-				__func__, o_tty->count, tty_name(o_tty, buf));
+				__func__, o_tty->count, tty_name(o_tty));
 			o_tty->count = 0;
 		}
 	}
 	if (--tty->count < 0) {
 		printk(KERN_WARNING "%s: bad tty->count (%d) for %s\n",
-				__func__, tty->count, tty_name(tty, buf));
+				__func__, tty->count, tty_name(tty));
 		tty->count = 0;
 	}
 
@@ -1897,7 +1890,7 @@ int tty_release(struct inode *inode, struct file *filp)
 		return 0;
 
 #ifdef TTY_DEBUG_HANGUP
-	printk(KERN_DEBUG "%s: %s: final close\n", __func__, tty_name(tty, buf));
+	printk(KERN_DEBUG "%s: %s: final close\n", __func__, tty_name(tty));
 #endif
 	/*
 	 * Ask the line discipline code to release its structures
@@ -1908,7 +1901,8 @@ int tty_release(struct inode *inode, struct file *filp)
 	tty_flush_works(tty);
 
 #ifdef TTY_DEBUG_HANGUP
-	printk(KERN_DEBUG "%s: %s: freeing structure...\n", __func__, tty_name(tty, buf));
+	printk(KERN_DEBUG "%s: %s: freeing structure...\n", __func__,
+	       tty_name(tty));
 #endif
 	/*
 	 * The release_tty function takes care of the details of clearing
diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c
index 632fc8152061..e590207e9c0a 100644
--- a/drivers/tty/tty_ioctl.c
+++ b/drivers/tty/tty_ioctl.c
@@ -211,9 +211,7 @@ int tty_unthrottle_safe(struct tty_struct *tty)
 void tty_wait_until_sent(struct tty_struct *tty, long timeout)
 {
 #ifdef TTY_DEBUG_WAIT_UNTIL_SENT
-	char buf[64];
-
-	printk(KERN_DEBUG "%s wait until sent...\n", tty_name(tty, buf));
+	printk(KERN_DEBUG "%s wait until sent...\n", tty_name(tty));
 #endif
 	if (!timeout)
 		timeout = MAX_SCHEDULE_TIMEOUT;
diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
index 3737f55272d2..c07fb5d9bcf9 100644
--- a/drivers/tty/tty_ldisc.c
+++ b/drivers/tty/tty_ldisc.c
@@ -22,9 +22,8 @@
 #undef LDISC_DEBUG_HANGUP
 
 #ifdef LDISC_DEBUG_HANGUP
-#define tty_ldisc_debug(tty, f, args...) ({				       \
-	char __b[64];							       \
-	printk(KERN_DEBUG "%s: %s: " f, __func__, tty_name(tty, __b), ##args); \
+#define tty_ldisc_debug(tty, f, args...) ({				  \
+	printk(KERN_DEBUG "%s: %s: " f, __func__, tty_name(tty), ##args); \
 })
 #else
 #define tty_ldisc_debug(tty, f, args...)
@@ -483,7 +482,6 @@ static void tty_ldisc_close(struct tty_struct *tty, struct tty_ldisc *ld)
 
 static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old)
 {
-	char buf[64];
 	struct tty_ldisc *new_ldisc;
 	int r;
 
@@ -504,7 +502,7 @@ static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old)
 		if (r < 0)
 			panic("Couldn't open N_TTY ldisc for "
 			      "%s --- error %d.",
-			      tty_name(tty, buf), r);
+			      tty_name(tty), r);
 	}
 }
 
diff --git a/include/linux/tty.h b/include/linux/tty.h
index 8771cc4faf9f..f0fc326cf08e 100644
--- a/include/linux/tty.h
+++ b/include/linux/tty.h
@@ -421,7 +421,7 @@ static inline struct tty_struct *tty_kref_get(struct tty_struct *tty)
 
 extern int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
 			      const char *routine);
-extern const char *tty_name(const struct tty_struct *tty, char *buf);
+extern const char *tty_name(const struct tty_struct *tty);
 extern void tty_wait_until_sent(struct tty_struct *tty, long timeout);
 extern int tty_check_change(struct tty_struct *tty);
 extern void __stop_tty(struct tty_struct *tty);
-- 
2.1.3


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH 3/3] tty: remove buf parameter from tty_name()
  2015-03-31 13:55 ` [PATCH 3/3] tty: remove buf parameter from tty_name() Rasmus Villemoes
@ 2015-03-31 21:40   ` Dmitry Torokhov
  2015-04-07  8:57   ` Jesper Nilsson
  1 sibling, 0 replies; 7+ messages in thread
From: Dmitry Torokhov @ 2015-03-31 21:40 UTC (permalink / raw)
  To: Rasmus Villemoes
  Cc: Greg Kroah-Hartman, Jiri Slaby, Mikael Starvik, Jesper Nilsson,
	linux-input, linux-kernel, linux-cris-kernel, linux-serial

On Tue, Mar 31, 2015 at 03:55:59PM +0200, Rasmus Villemoes wrote:
> tty_name no longer uses the buf parameter, so remove it along with all
> the 64 byte stack buffers that used to be passed in.
> 
> Mostly generated by the coccinelle script
> 
> @depends on patch@
> identifier buf;
> constant C;
> expression tty;
> @@
> - char buf[C];
>   <+...
> - tty_name(tty, buf)
> + tty_name(tty)
>   ...+>
> 
> allmodconfig compiles, so I'm fairly confident the stack buffers
> weren't used for other purposes as well.
> 
> Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>
> ---
>  drivers/input/serio/serport.c    |  5 ++---

I am fine with serport changes.

Acked-by: Dmitry Torokhov <dmitry.torokhov@gmail.com>

Thanks.

>  drivers/tty/amiserial.c          |  8 ++------
>  drivers/tty/cyclades.c           |  8 ++------
>  drivers/tty/n_gsm.c              |  3 +--
>  drivers/tty/n_tty.c              |  7 ++-----
>  drivers/tty/serial/crisv10.c     |  8 ++------
>  drivers/tty/serial/serial_core.c |  4 +---
>  drivers/tty/tty_io.c             | 28 +++++++++++-----------------
>  drivers/tty/tty_ioctl.c          |  4 +---
>  drivers/tty/tty_ldisc.c          |  8 +++-----
>  include/linux/tty.h              |  2 +-
>  11 files changed, 28 insertions(+), 57 deletions(-)
> 
> diff --git a/drivers/input/serio/serport.c b/drivers/input/serio/serport.c
> index 69175b825346..9c927d35c1f5 100644
> --- a/drivers/input/serio/serport.c
> +++ b/drivers/input/serio/serport.c
> @@ -167,7 +167,6 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
>  {
>  	struct serport *serport = (struct serport*) tty->disc_data;
>  	struct serio *serio;
> -	char name[64];
>  
>  	if (test_and_set_bit(SERPORT_BUSY, &serport->flags))
>  		return -EBUSY;
> @@ -177,7 +176,7 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
>  		return -ENOMEM;
>  
>  	strlcpy(serio->name, "Serial port", sizeof(serio->name));
> -	snprintf(serio->phys, sizeof(serio->phys), "%s/serio0", tty_name(tty, name));
> +	snprintf(serio->phys, sizeof(serio->phys), "%s/serio0", tty_name(tty));
>  	serio->id = serport->id;
>  	serio->id.type = SERIO_RS232;
>  	serio->write = serport_serio_write;
> @@ -187,7 +186,7 @@ static ssize_t serport_ldisc_read(struct tty_struct * tty, struct file * file, u
>  	serio->dev.parent = tty->dev;
>  
>  	serio_register_port(serport->serio);
> -	printk(KERN_INFO "serio: Serial port %s\n", tty_name(tty, name));
> +	printk(KERN_INFO "serio: Serial port %s\n", tty_name(tty));
>  
>  	wait_event_interruptible(serport->wait, test_bit(SERPORT_DEAD, &serport->flags));
>  	serio_unregister_port(serport->serio);
> diff --git a/drivers/tty/amiserial.c b/drivers/tty/amiserial.c
> index b2d760055952..894d3a84e285 100644
> --- a/drivers/tty/amiserial.c
> +++ b/drivers/tty/amiserial.c
> @@ -966,9 +966,7 @@ static void rs_throttle(struct tty_struct * tty)
>  	struct serial_state *info = tty->driver_data;
>  	unsigned long flags;
>  #ifdef SERIAL_DEBUG_THROTTLE
> -	char	buf[64];
> -
> -	printk("throttle %s: %d....\n", tty_name(tty, buf),
> +	printk("throttle %s: %d....\n", tty_name(tty),
>  	       tty->ldisc.chars_in_buffer(tty));
>  #endif
>  
> @@ -991,9 +989,7 @@ static void rs_unthrottle(struct tty_struct * tty)
>  	struct serial_state *info = tty->driver_data;
>  	unsigned long flags;
>  #ifdef SERIAL_DEBUG_THROTTLE
> -	char	buf[64];
> -
> -	printk("unthrottle %s: %d....\n", tty_name(tty, buf),
> +	printk("unthrottle %s: %d....\n", tty_name(tty),
>  	       tty->ldisc.chars_in_buffer(tty));
>  #endif
>  
> diff --git a/drivers/tty/cyclades.c b/drivers/tty/cyclades.c
> index fd66f57390d0..87f6578c6f4a 100644
> --- a/drivers/tty/cyclades.c
> +++ b/drivers/tty/cyclades.c
> @@ -2861,9 +2861,7 @@ static void cy_throttle(struct tty_struct *tty)
>  	unsigned long flags;
>  
>  #ifdef CY_DEBUG_THROTTLE
> -	char buf[64];
> -
> -	printk(KERN_DEBUG "cyc:throttle %s: %ld...ttyC%d\n", tty_name(tty, buf),
> +	printk(KERN_DEBUG "cyc:throttle %s: %ld...ttyC%d\n", tty_name(tty),
>  			tty->ldisc.chars_in_buffer(tty), info->line);
>  #endif
>  
> @@ -2902,10 +2900,8 @@ static void cy_unthrottle(struct tty_struct *tty)
>  	unsigned long flags;
>  
>  #ifdef CY_DEBUG_THROTTLE
> -	char buf[64];
> -
>  	printk(KERN_DEBUG "cyc:unthrottle %s: %ld...ttyC%d\n",
> -		tty_name(tty, buf), tty_chars_in_buffer(tty), info->line);
> +		tty_name(tty), tty_chars_in_buffer(tty), info->line);
>  #endif
>  
>  	if (serial_paranoia_check(info, tty->name, "cy_unthrottle"))
> diff --git a/drivers/tty/n_gsm.c b/drivers/tty/n_gsm.c
> index c4343764cc5b..9b6d3d5ee51c 100644
> --- a/drivers/tty/n_gsm.c
> +++ b/drivers/tty/n_gsm.c
> @@ -2274,7 +2274,6 @@ static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp,
>  	const unsigned char *dp;
>  	char *f;
>  	int i;
> -	char buf[64];
>  	char flags = TTY_NORMAL;
>  
>  	if (debug & 4)
> @@ -2296,7 +2295,7 @@ static void gsmld_receive_buf(struct tty_struct *tty, const unsigned char *cp,
>  			break;
>  		default:
>  			WARN_ONCE(1, "%s: unknown flag %d\n",
> -			       tty_name(tty, buf), flags);
> +			       tty_name(tty), flags);
>  			break;
>  		}
>  	}
> diff --git a/drivers/tty/n_tty.c b/drivers/tty/n_tty.c
> index cf6e0f2e1331..54da8f49394d 100644
> --- a/drivers/tty/n_tty.c
> +++ b/drivers/tty/n_tty.c
> @@ -1179,13 +1179,12 @@ static void n_tty_receive_break(struct tty_struct *tty)
>  static void n_tty_receive_overrun(struct tty_struct *tty)
>  {
>  	struct n_tty_data *ldata = tty->disc_data;
> -	char buf[64];
>  
>  	ldata->num_overrun++;
>  	if (time_after(jiffies, ldata->overrun_time + HZ) ||
>  			time_after(ldata->overrun_time, jiffies)) {
>  		printk(KERN_WARNING "%s: %d input overrun(s)\n",
> -			tty_name(tty, buf),
> +			tty_name(tty),
>  			ldata->num_overrun);
>  		ldata->overrun_time = jiffies;
>  		ldata->num_overrun = 0;
> @@ -1460,8 +1459,6 @@ static void n_tty_receive_char_closing(struct tty_struct *tty, unsigned char c)
>  static void
>  n_tty_receive_char_flagged(struct tty_struct *tty, unsigned char c, char flag)
>  {
> -	char buf[64];
> -
>  	switch (flag) {
>  	case TTY_BREAK:
>  		n_tty_receive_break(tty);
> @@ -1475,7 +1472,7 @@ n_tty_receive_char_flagged(struct tty_struct *tty, unsigned char c, char flag)
>  		break;
>  	default:
>  		printk(KERN_ERR "%s: unknown flag %d\n",
> -		       tty_name(tty, buf), flag);
> +		       tty_name(tty), flag);
>  		break;
>  	}
>  }
> diff --git a/drivers/tty/serial/crisv10.c b/drivers/tty/serial/crisv10.c
> index 0c1825b0b41d..568ea0d2d699 100644
> --- a/drivers/tty/serial/crisv10.c
> +++ b/drivers/tty/serial/crisv10.c
> @@ -3216,9 +3216,7 @@ rs_throttle(struct tty_struct * tty)
>  {
>  	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
>  #ifdef SERIAL_DEBUG_THROTTLE
> -	char	buf[64];
> -
> -	printk("throttle %s: %lu....\n", tty_name(tty, buf),
> +	printk("throttle %s: %lu....\n", tty_name(tty),
>  	       (unsigned long)tty->ldisc.chars_in_buffer(tty));
>  #endif
>  	DFLOW(DEBUG_LOG(info->line,"rs_throttle %lu\n", tty->ldisc.chars_in_buffer(tty)));
> @@ -3238,9 +3236,7 @@ rs_unthrottle(struct tty_struct * tty)
>  {
>  	struct e100_serial *info = (struct e100_serial *)tty->driver_data;
>  #ifdef SERIAL_DEBUG_THROTTLE
> -	char	buf[64];
> -
> -	printk("unthrottle %s: %lu....\n", tty_name(tty, buf),
> +	printk("unthrottle %s: %lu....\n", tty_name(tty),
>  	       (unsigned long)tty->ldisc.chars_in_buffer(tty));
>  #endif
>  	DFLOW(DEBUG_LOG(info->line,"rs_unthrottle ldisc %d\n", tty->ldisc.chars_in_buffer(tty)));
> diff --git a/drivers/tty/serial/serial_core.c b/drivers/tty/serial/serial_core.c
> index 6a1055ae3437..4e73b6482f0b 100644
> --- a/drivers/tty/serial/serial_core.c
> +++ b/drivers/tty/serial/serial_core.c
> @@ -894,12 +894,10 @@ static int uart_set_info(struct tty_struct *tty, struct tty_port *port,
>  			 * need to rate-limit; it's CAP_SYS_ADMIN only.
>  			 */
>  			if (uport->flags & UPF_SPD_MASK) {
> -				char buf[64];
> -
>  				dev_notice(uport->dev,
>  				       "%s sets custom speed on %s. This is deprecated.\n",
>  				      current->comm,
> -				      tty_name(port->tty, buf));
> +				      tty_name(port->tty));
>  			}
>  			uart_change_speed(tty, state, NULL);
>  		}
> diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
> index ab549e7bdaa8..96f948dc43a6 100644
> --- a/drivers/tty/tty_io.c
> +++ b/drivers/tty/tty_io.c
> @@ -235,7 +235,6 @@ static void tty_del_file(struct file *file)
>  /**
>   *	tty_name	-	return tty naming
>   *	@tty: tty structure
> - *	@buf: unused
>   *
>   *	Convert a tty structure into a name. The name reflects the kernel
>   *	naming policy and if udev is in use may not reflect user space
> @@ -243,7 +242,7 @@ static void tty_del_file(struct file *file)
>   *	Locking: none
>   */
>  
> -const char *tty_name(const struct tty_struct *tty, char *buf)
> +const char *tty_name(const struct tty_struct *tty)
>  {
>  	if (!tty) /* Hmm.  NULL pointer.  That's fun. */
>  		return "NULL tty";
> @@ -768,8 +767,7 @@ static void do_tty_hangup(struct work_struct *work)
>  void tty_hangup(struct tty_struct *tty)
>  {
>  #ifdef TTY_DEBUG_HANGUP
> -	char	buf[64];
> -	printk(KERN_DEBUG "%s hangup...\n", tty_name(tty, buf));
> +	printk(KERN_DEBUG "%s hangup...\n", tty_name(tty));
>  #endif
>  	schedule_work(&tty->hangup_work);
>  }
> @@ -788,9 +786,7 @@ EXPORT_SYMBOL(tty_hangup);
>  void tty_vhangup(struct tty_struct *tty)
>  {
>  #ifdef TTY_DEBUG_HANGUP
> -	char	buf[64];
> -
> -	printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty, buf));
> +	printk(KERN_DEBUG "%s vhangup...\n", tty_name(tty));
>  #endif
>  	__tty_hangup(tty, 0);
>  }
> @@ -829,9 +825,7 @@ void tty_vhangup_self(void)
>  static void tty_vhangup_session(struct tty_struct *tty)
>  {
>  #ifdef TTY_DEBUG_HANGUP
> -	char	buf[64];
> -
> -	printk(KERN_DEBUG "%s vhangup session...\n", tty_name(tty, buf));
> +	printk(KERN_DEBUG "%s vhangup session...\n", tty_name(tty));
>  #endif
>  	__tty_hangup(tty, 1);
>  }
> @@ -1761,7 +1755,6 @@ int tty_release(struct inode *inode, struct file *filp)
>  	struct tty_struct *o_tty = NULL;
>  	int	do_sleep, final;
>  	int	idx;
> -	char	buf[64];
>  	long	timeout = 0;
>  	int	once = 1;
>  
> @@ -1785,7 +1778,7 @@ int tty_release(struct inode *inode, struct file *filp)
>  
>  #ifdef TTY_DEBUG_HANGUP
>  	printk(KERN_DEBUG "%s: %s (tty count=%d)...\n", __func__,
> -			tty_name(tty, buf), tty->count);
> +			tty_name(tty), tty->count);
>  #endif
>  
>  	if (tty->ops->close)
> @@ -1836,7 +1829,7 @@ int tty_release(struct inode *inode, struct file *filp)
>  		if (once) {
>  			once = 0;
>  			printk(KERN_WARNING "%s: %s: read/write wait queue active!\n",
> -			       __func__, tty_name(tty, buf));
> +			       __func__, tty_name(tty));
>  		}
>  		schedule_timeout_killable(timeout);
>  		if (timeout < 120 * HZ)
> @@ -1848,13 +1841,13 @@ int tty_release(struct inode *inode, struct file *filp)
>  	if (o_tty) {
>  		if (--o_tty->count < 0) {
>  			printk(KERN_WARNING "%s: bad pty slave count (%d) for %s\n",
> -				__func__, o_tty->count, tty_name(o_tty, buf));
> +				__func__, o_tty->count, tty_name(o_tty));
>  			o_tty->count = 0;
>  		}
>  	}
>  	if (--tty->count < 0) {
>  		printk(KERN_WARNING "%s: bad tty->count (%d) for %s\n",
> -				__func__, tty->count, tty_name(tty, buf));
> +				__func__, tty->count, tty_name(tty));
>  		tty->count = 0;
>  	}
>  
> @@ -1897,7 +1890,7 @@ int tty_release(struct inode *inode, struct file *filp)
>  		return 0;
>  
>  #ifdef TTY_DEBUG_HANGUP
> -	printk(KERN_DEBUG "%s: %s: final close\n", __func__, tty_name(tty, buf));
> +	printk(KERN_DEBUG "%s: %s: final close\n", __func__, tty_name(tty));
>  #endif
>  	/*
>  	 * Ask the line discipline code to release its structures
> @@ -1908,7 +1901,8 @@ int tty_release(struct inode *inode, struct file *filp)
>  	tty_flush_works(tty);
>  
>  #ifdef TTY_DEBUG_HANGUP
> -	printk(KERN_DEBUG "%s: %s: freeing structure...\n", __func__, tty_name(tty, buf));
> +	printk(KERN_DEBUG "%s: %s: freeing structure...\n", __func__,
> +	       tty_name(tty));
>  #endif
>  	/*
>  	 * The release_tty function takes care of the details of clearing
> diff --git a/drivers/tty/tty_ioctl.c b/drivers/tty/tty_ioctl.c
> index 632fc8152061..e590207e9c0a 100644
> --- a/drivers/tty/tty_ioctl.c
> +++ b/drivers/tty/tty_ioctl.c
> @@ -211,9 +211,7 @@ int tty_unthrottle_safe(struct tty_struct *tty)
>  void tty_wait_until_sent(struct tty_struct *tty, long timeout)
>  {
>  #ifdef TTY_DEBUG_WAIT_UNTIL_SENT
> -	char buf[64];
> -
> -	printk(KERN_DEBUG "%s wait until sent...\n", tty_name(tty, buf));
> +	printk(KERN_DEBUG "%s wait until sent...\n", tty_name(tty));
>  #endif
>  	if (!timeout)
>  		timeout = MAX_SCHEDULE_TIMEOUT;
> diff --git a/drivers/tty/tty_ldisc.c b/drivers/tty/tty_ldisc.c
> index 3737f55272d2..c07fb5d9bcf9 100644
> --- a/drivers/tty/tty_ldisc.c
> +++ b/drivers/tty/tty_ldisc.c
> @@ -22,9 +22,8 @@
>  #undef LDISC_DEBUG_HANGUP
>  
>  #ifdef LDISC_DEBUG_HANGUP
> -#define tty_ldisc_debug(tty, f, args...) ({				       \
> -	char __b[64];							       \
> -	printk(KERN_DEBUG "%s: %s: " f, __func__, tty_name(tty, __b), ##args); \
> +#define tty_ldisc_debug(tty, f, args...) ({				  \
> +	printk(KERN_DEBUG "%s: %s: " f, __func__, tty_name(tty), ##args); \
>  })
>  #else
>  #define tty_ldisc_debug(tty, f, args...)
> @@ -483,7 +482,6 @@ static void tty_ldisc_close(struct tty_struct *tty, struct tty_ldisc *ld)
>  
>  static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old)
>  {
> -	char buf[64];
>  	struct tty_ldisc *new_ldisc;
>  	int r;
>  
> @@ -504,7 +502,7 @@ static void tty_ldisc_restore(struct tty_struct *tty, struct tty_ldisc *old)
>  		if (r < 0)
>  			panic("Couldn't open N_TTY ldisc for "
>  			      "%s --- error %d.",
> -			      tty_name(tty, buf), r);
> +			      tty_name(tty), r);
>  	}
>  }
>  
> diff --git a/include/linux/tty.h b/include/linux/tty.h
> index 8771cc4faf9f..f0fc326cf08e 100644
> --- a/include/linux/tty.h
> +++ b/include/linux/tty.h
> @@ -421,7 +421,7 @@ static inline struct tty_struct *tty_kref_get(struct tty_struct *tty)
>  
>  extern int tty_paranoia_check(struct tty_struct *tty, struct inode *inode,
>  			      const char *routine);
> -extern const char *tty_name(const struct tty_struct *tty, char *buf);
> +extern const char *tty_name(const struct tty_struct *tty);
>  extern void tty_wait_until_sent(struct tty_struct *tty, long timeout);
>  extern int tty_check_change(struct tty_struct *tty);
>  extern void __stop_tty(struct tty_struct *tty);
> -- 
> 2.1.3
> 

-- 
Dmitry

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name
  2015-03-31 13:55 [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Rasmus Villemoes
                   ` (2 preceding siblings ...)
  2015-03-31 13:55 ` [PATCH 3/3] tty: remove buf parameter from tty_name() Rasmus Villemoes
@ 2015-04-04  0:20 ` Peter Hurley
  3 siblings, 0 replies; 7+ messages in thread
From: Peter Hurley @ 2015-04-04  0:20 UTC (permalink / raw)
  To: Rasmus Villemoes, Greg Kroah-Hartman
  Cc: Dmitry Torokhov, Jiri Slaby, Mikael Starvik, Jesper Nilsson,
	linux-input, linux-kernel, linux-cris-kernel, linux-serial

On 03/31/2015 09:55 AM, Rasmus Villemoes wrote:
> All users of tty_name pass the return value directly to a printf
> function, so we might as well use tty->name directly instead of
> copying it to a user-supplied (stack) buffer.

Reviewed-by: Peter Hurley <peter@hurleysoftware.com>


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH 3/3] tty: remove buf parameter from tty_name()
  2015-03-31 13:55 ` [PATCH 3/3] tty: remove buf parameter from tty_name() Rasmus Villemoes
  2015-03-31 21:40   ` Dmitry Torokhov
@ 2015-04-07  8:57   ` Jesper Nilsson
  1 sibling, 0 replies; 7+ messages in thread
From: Jesper Nilsson @ 2015-04-07  8:57 UTC (permalink / raw)
  To: Rasmus Villemoes
  Cc: Dmitry Torokhov, Greg Kroah-Hartman, Jiri Slaby, Mikael Starvik,
	Jesper Nilsson, linux-input, linux-kernel, linux-cris-kernel,
	linux-serial

On Tue, Mar 31, 2015 at 03:55:59PM +0200, Rasmus Villemoes wrote:
> tty_name no longer uses the buf parameter, so remove it along with all
> the 64 byte stack buffers that used to be passed in.
> 
> Mostly generated by the coccinelle script
> 
> @depends on patch@
> identifier buf;
> constant C;
> expression tty;
> @@
> - char buf[C];
>   <+...
> - tty_name(tty, buf)
> + tty_name(tty)
>   ...+>
> 
> allmodconfig compiles, so I'm fairly confident the stack buffers
> weren't used for other purposes as well.
> 
> Signed-off-by: Rasmus Villemoes <linux@rasmusvillemoes.dk>

For the CRISv10 driver:

Acked-by: Jesper Nilsson <jesper.nilsson@axis.com>

/^JN - Jesper Nilsson
-- 
               Jesper Nilsson -- jesper.nilsson@axis.com

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2015-04-07  8:57 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2015-03-31 13:55 [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Rasmus Villemoes
2015-03-31 13:55 ` [PATCH 1/3] tty: constify return type of tty_name Rasmus Villemoes
2015-03-31 13:55 ` [PATCH 2/3] tty: return tty->name directly from tty_name Rasmus Villemoes
2015-03-31 13:55 ` [PATCH 3/3] tty: remove buf parameter from tty_name() Rasmus Villemoes
2015-03-31 21:40   ` Dmitry Torokhov
2015-04-07  8:57   ` Jesper Nilsson
2015-04-04  0:20 ` [PATCH 0/3] tty: eliminate 64 byte stack buffers passed to tty_name Peter Hurley

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.