aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2014-02-27 06:30:51 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-02-28 19:36:46 -0500
commit723abd87f6e536f1353c8f64f621520bc29523a3 (patch)
treeb6e8eb73dcccf8f11124844c9c30d3b38a367589
parent45af780a0fcac8fbba0ac740a671b2af80bcf189 (diff)
tty: Set correct tty name in 'active' sysfs attribute
The 'active' sysfs attribute should refer to the currently active tty devices the console is running on, not the currently active console. The console structure doesn't refer to any device in sysfs, only the tty the console is running on has. So we need to print out the tty names in 'active', not the console names. There is one special-case, which is tty0. If the console is directed to it, we want 'tty0' to show up in the file, so user-space knows that the messages get forwarded to the active VT. The ->device() callback would resolve tty0, though. Hence, treat it special and don't call into the VT layer to resolve it (plymouth is known to depend on it). Cc: Lennart Poettering <lennart@poettering.net> Cc: Kay Sievers <kay@vrfy.org> Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org> Cc: Jiri Slaby <jslaby@suse.cz> Cc: stable <stable@vger.kernel.org> Signed-off-by: Werner Fink <werner@suse.de> Signed-off-by: Hannes Reinecke <hare@suse.de> Signed-off-by: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--drivers/tty/tty_io.c23
1 files changed, 17 insertions, 6 deletions
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index c74a00ad7add..d3448a90f0f9 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -1271,12 +1271,13 @@ static void pty_line_name(struct tty_driver *driver, int index, char *p)
1271 * 1271 *
1272 * Locking: None 1272 * Locking: None
1273 */ 1273 */
1274static void tty_line_name(struct tty_driver *driver, int index, char *p) 1274static ssize_t tty_line_name(struct tty_driver *driver, int index, char *p)
1275{ 1275{
1276 if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE) 1276 if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE)
1277 strcpy(p, driver->name); 1277 return sprintf(p, "%s", driver->name);
1278 else 1278 else
1279 sprintf(p, "%s%d", driver->name, index + driver->name_base); 1279 return sprintf(p, "%s%d", driver->name,
1280 index + driver->name_base);
1280} 1281}
1281 1282
1282/** 1283/**
@@ -3545,9 +3546,19 @@ static ssize_t show_cons_active(struct device *dev,
3545 if (i >= ARRAY_SIZE(cs)) 3546 if (i >= ARRAY_SIZE(cs))
3546 break; 3547 break;
3547 } 3548 }
3548 while (i--) 3549 while (i--) {
3549 count += sprintf(buf + count, "%s%d%c", 3550 int index = cs[i]->index;
3550 cs[i]->name, cs[i]->index, i ? ' ':'\n'); 3551 struct tty_driver *drv = cs[i]->device(cs[i], &index);
3552
3553 /* don't resolve tty0 as some programs depend on it */
3554 if (drv && (cs[i]->index > 0 || drv->major != TTY_MAJOR))
3555 count += tty_line_name(drv, index, buf + count);
3556 else
3557 count += sprintf(buf + count, "%s%d",
3558 cs[i]->name, cs[i]->index);
3559
3560 count += sprintf(buf + count, "%c", i ? ' ':'\n');
3561 }
3551 console_unlock(); 3562 console_unlock();
3552 3563
3553 return count; 3564 return count;