Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit d8a5dc30 authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Greg Kroah-Hartman
Browse files

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: default avatarWerner Fink <werner@suse.de>
Signed-off-by: default avatarHannes Reinecke <hare@suse.de>
Cc: stable <stable@vger.kernel.org>
Signed-off-by: default avatarGreg Kroah-Hartman <gregkh@linuxfoundation.org>
parent 3ac06b90
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -3,7 +3,8 @@ Date: Nov 2010
Contact:	Kay Sievers <kay.sievers@vrfy.org>
Description:
		 Shows the list of currently configured
		 console devices, like 'tty1 ttyS0'.
		 tty devices used for the console,
		 like 'tty1 ttyS0'.
		 The last entry in the file is the active
		 device connected to /dev/console.
		 The file supports poll() to detect virtual
+18 −7
Original line number Diff line number Diff line
@@ -1267,16 +1267,17 @@ static void pty_line_name(struct tty_driver *driver, int index, char *p)
 *	@p: output buffer of at least 7 bytes
 *
 *	Generate a name from a driver reference and write it to the output
 *	buffer.
 *	buffer. Return the number of bytes written.
 *
 *	Locking: None
 */
static void tty_line_name(struct tty_driver *driver, int index, char *p)
static ssize_t tty_line_name(struct tty_driver *driver, int index, char *p)
{
	if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE)
		strcpy(p, driver->name);
		return sprintf(p, "%s", driver->name);
	else
		sprintf(p, "%s%d", driver->name, index + driver->name_base);
		return sprintf(p, "%s%d", driver->name,
			       index + driver->name_base);
}

/**
@@ -3545,9 +3546,19 @@ static ssize_t show_cons_active(struct device *dev,
		if (i >= ARRAY_SIZE(cs))
			break;
	}
	while (i--)
	while (i--) {
		struct tty_driver *driver;
		const char *name = cs[i]->name;
		int index = cs[i]->index;

		driver = cs[i]->device(cs[i], &index);
		if (driver) {
			count += tty_line_name(driver, index, buf + count);
			count += sprintf(buf + count, "%c", i ? ' ':'\n');
		} else
			count += sprintf(buf + count, "%s%d%c",
				 cs[i]->name, cs[i]->index, i ? ' ':'\n');
					 name, index, i ? ' ':'\n');
	}
	console_unlock();

	return count;