aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorHannes Reinecke <hare@suse.de>2014-02-07 05:38:30 -0500
committerGreg Kroah-Hartman <gregkh@linuxfoundation.org>2014-02-07 11:40:54 -0500
commitd8a5dc3033af2fd6d16030d2ee4fbd073460fe54 (patch)
tree52ecd6d59354df0c3b26c9f3236f668ed26af1c7
parent3ac06b905655b3ef2fd2196bab36e4587e1e4e4f (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. This resolves an issue on s390 platforms in determining the correct console device to use. Cc: Lennart Poettering <lennart@poettering.net> Cc: Kay Sievers <kay@vrfy.org> Cc: Jiri Slaby <jslaby@suse.cz> Cc: David Herrmann <dh.herrmann@gmail.com> Signed-off-by: Werner Fink <werner@suse.de> Signed-off-by: Hannes Reinecke <hare@suse.de> Cc: stable <stable@vger.kernel.org> Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
-rw-r--r--Documentation/ABI/testing/sysfs-tty3
-rw-r--r--drivers/tty/tty_io.c25
2 files changed, 20 insertions, 8 deletions
diff --git a/Documentation/ABI/testing/sysfs-tty b/Documentation/ABI/testing/sysfs-tty
index ad22fb0ee765..a2ccec35ffce 100644
--- a/Documentation/ABI/testing/sysfs-tty
+++ b/Documentation/ABI/testing/sysfs-tty
@@ -3,7 +3,8 @@ Date: Nov 2010
3Contact: Kay Sievers <kay.sievers@vrfy.org> 3Contact: Kay Sievers <kay.sievers@vrfy.org>
4Description: 4Description:
5 Shows the list of currently configured 5 Shows the list of currently configured
6 console devices, like 'tty1 ttyS0'. 6 tty devices used for the console,
7 like 'tty1 ttyS0'.
7 The last entry in the file is the active 8 The last entry in the file is the active
8 device connected to /dev/console. 9 device connected to /dev/console.
9 The file supports poll() to detect virtual 10 The file supports poll() to detect virtual
diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index c74a00ad7add..bd2715a9d8e5 100644
--- a/drivers/tty/tty_io.c
+++ b/drivers/tty/tty_io.c
@@ -1267,16 +1267,17 @@ static void pty_line_name(struct tty_driver *driver, int index, char *p)
1267 * @p: output buffer of at least 7 bytes 1267 * @p: output buffer of at least 7 bytes
1268 * 1268 *
1269 * Generate a name from a driver reference and write it to the output 1269 * Generate a name from a driver reference and write it to the output
1270 * buffer. 1270 * buffer. Return the number of bytes written.
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 struct tty_driver *driver;
3550 cs[i]->name, cs[i]->index, i ? ' ':'\n'); 3551 const char *name = cs[i]->name;
3552 int index = cs[i]->index;
3553
3554 driver = cs[i]->device(cs[i], &index);
3555 if (driver) {
3556 count += tty_line_name(driver, index, buf + count);
3557 count += sprintf(buf + count, "%c", i ? ' ':'\n');
3558 } else
3559 count += sprintf(buf + count, "%s%d%c",
3560 name, index, i ? ' ':'\n');
3561 }
3551 console_unlock(); 3562 console_unlock();
3552 3563
3553 return count; 3564 return count;