lab.nexedi.com will be down from Thursday, 20 March 2025, 07:30:00 UTC for a duration of approximately 2 hours

Commit 76ea3858 authored by Hannes Reinecke's avatar Hannes Reinecke Committed by Sasha Levin

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>

(cherry picked from commit d8a5dc30)
Signed-off-by: default avatarSasha Levin <sasha.levin@oracle.com>
parent cca6382b
...@@ -1221,12 +1221,13 @@ static void pty_line_name(struct tty_driver *driver, int index, char *p) ...@@ -1221,12 +1221,13 @@ static void pty_line_name(struct tty_driver *driver, int index, char *p)
* *
* Locking: None * 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) if (driver->flags & TTY_DRIVER_UNNUMBERED_NODE)
strcpy(p, driver->name); return sprintf(p, "%s", driver->name);
else else
sprintf(p, "%s%d", driver->name, index + driver->name_base); return sprintf(p, "%s%d", driver->name,
index + driver->name_base);
} }
/** /**
...@@ -3472,9 +3473,19 @@ static ssize_t show_cons_active(struct device *dev, ...@@ -3472,9 +3473,19 @@ static ssize_t show_cons_active(struct device *dev,
if (i >= ARRAY_SIZE(cs)) if (i >= ARRAY_SIZE(cs))
break; break;
} }
while (i--) while (i--) {
count += sprintf(buf + count, "%s%d%c", int index = cs[i]->index;
cs[i]->name, cs[i]->index, i ? ' ':'\n'); struct tty_driver *drv = cs[i]->device(cs[i], &index);
/* don't resolve tty0 as some programs depend on it */
if (drv && (cs[i]->index > 0 || drv->major != TTY_MAJOR))
count += tty_line_name(drv, index, buf + count);
else
count += sprintf(buf + count, "%s%d",
cs[i]->name, cs[i]->index);
count += sprintf(buf + count, "%c", i ? ' ':'\n');
}
console_unlock(); console_unlock();
return count; return count;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment