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-04-26 20:15:34 -0400
commitf5b4cbf53a1da6f90b4ac8c5389d6c8528507e8b (patch)
tree7a2085e215fd587c3c954210db62dd9d41368c8e
parent7a63f58358152cb2757cae6184bb39a25e3069d7 (diff)
tty: Set correct tty name in 'active' sysfs attribute
commit 723abd87f6e536f1353c8f64f621520bc29523a3 upstream. 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: Jiri Slaby <jslaby@suse.cz> 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 59d26ef538d8..3723c0ebb316 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -1267,12 +1267,13 @@ static void pty_line_name(struct tty_driver *driver, int index, char *p)
1267 * 1267 *
1268 * Locking: None 1268 * Locking: None
1269 */ 1269 */
1270static void tty_line_name(struct tty_driver *driver, int index, char *p) 1270static ssize_t tty_line_name(struct tty_driver *driver, int index, char *p)
1271{ 1271{
1272 if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE) 1272 if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE)
1273 strcpy(p, driver->name); 1273 return sprintf(p, "%s", driver->name);
1274 else 1274 else
1275 sprintf(p, "%s%d", driver->name, index + driver->name_base); 1275 return sprintf(p, "%s%d", driver->name,
1276 index + driver->name_base);
1276} 1277}
1277 1278
1278/** 1279/**
@@ -3538,9 +3539,19 @@ static ssize_t show_cons_active(struct device *dev,
3538 if (i >= ARRAY_SIZE(cs)) 3539 if (i >= ARRAY_SIZE(cs))
3539 break; 3540 break;
3540 } 3541 }
3541 while (i--) 3542 while (i--) {
3542 count += sprintf(buf + count, "%s%d%c", 3543 int index = cs[i]->index;
3543 cs[i]->name, cs[i]->index, i ? ' ':'\n'); 3544 struct tty_driver *drv = cs[i]->device(cs[i], &index);
3545
3546 /* don't resolve tty0 as some programs depend on it */
3547 if (drv && (cs[i]->index > 0 || drv->major != TTY_MAJOR))
3548 count += tty_line_name(drv, index, buf + count);
3549 else
3550 count += sprintf(buf + count, "%s%d",
3551 cs[i]->name, cs[i]->index);
3552
3553 count += sprintf(buf + count, "%c", i ? ' ':'\n');
3554 }
3544 console_unlock(); 3555 console_unlock();
3545 3556
3546 return count; 3557 return count;