All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v3] tty: Set correct tty name in 'active' sysfs attribute
@ 2014-02-27 11:30 David Herrmann
  2014-02-28 14:14 ` Hannes Reinecke
  0 siblings, 1 reply; 2+ messages in thread
From: David Herrmann @ 2014-02-27 11:30 UTC (permalink / raw)
  To: linux-kernel
  Cc: Ray Strode, Werner Fink, Hannes Reinecke, Peter Hurley,
	Lennart Poettering, Kay Sievers, Greg Kroah-Hartman, Jiri Slaby,
	David Herrmann

From: Hannes Reinecke <hare@suse.de>

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>
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>
---
v2: use cs[i]->index instead of ->index
    refactor code to avoid >80 lines
    split out sprintf("%c",...);

Tested on my x86-64 machine.

David

 drivers/tty/tty_io.c | 23 +++++++++++++++++------
 1 file changed, 17 insertions(+), 6 deletions(-)

diff --git a/drivers/tty/tty_io.c b/drivers/tty/tty_io.c
index c74a00a..d3448a9 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)
  *
  *	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--)
-		count += sprintf(buf + count, "%s%d%c",
-				 cs[i]->name, cs[i]->index, i ? ' ':'\n');
+	while (i--) {
+		int index = cs[i]->index;
+		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();
 
 	return count;
-- 
1.9.0


^ permalink raw reply related	[flat|nested] 2+ messages in thread

* Re: [PATCH v3] tty: Set correct tty name in 'active' sysfs attribute
  2014-02-27 11:30 [PATCH v3] tty: Set correct tty name in 'active' sysfs attribute David Herrmann
@ 2014-02-28 14:14 ` Hannes Reinecke
  0 siblings, 0 replies; 2+ messages in thread
From: Hannes Reinecke @ 2014-02-28 14:14 UTC (permalink / raw)
  To: David Herrmann, linux-kernel
  Cc: Ray Strode, Werner Fink, Peter Hurley, Lennart Poettering,
	Kay Sievers, Greg Kroah-Hartman, Jiri Slaby

On 02/27/2014 12:30 PM, David Herrmann wrote:
> From: Hannes Reinecke <hare@suse.de>
> 
> 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>
> 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>
> ---
> v2: use cs[i]->index instead of ->index
>     refactor code to avoid >80 lines
>     split out sprintf("%c",...);
> 
> Tested on my x86-64 machine.

Thanks for this.
Patch looks good.

Acked-by: Hannes Reinecke <hare@suse.de>

Cheers,

Hannes
-- 
Dr. Hannes Reinecke		      zSeries & Storage
hare@suse.de			      +49 911 74053 688
SUSE LINUX Products GmbH, Maxfeldstr. 5, 90409 Nürnberg
GF: J. Hawn, J. Guild, F. Imendörffer, HRB 16746 (AG Nürnberg)

^ permalink raw reply	[flat|nested] 2+ messages in thread

end of thread, other threads:[~2014-02-28 14:14 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2014-02-27 11:30 [PATCH v3] tty: Set correct tty name in 'active' sysfs attribute David Herrmann
2014-02-28 14:14 ` Hannes Reinecke

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.