mirror of https://lore.kernel.org/lkml/
 help / color / mirror / Atom feed
From: Alan Cox <alan@lxorguk.ukuu.org.uk>
To: Samo Pogacnik <samo_pogacnik@t-2.net>
Cc: linux-embedded <linux-embedded@vger.kernel.org>,
	linux kernel <linux-kernel@vger.kernel.org>,
	Randy Dunlap <rdunlap@xenotime.net>
Subject: Re: [PATCH] detour TTY driver
Date: Sat, 29 May 2010 23:54:02 +0100	[thread overview]
Message-ID: <20100529235402.296406d9@lxorguk.ukuu.org.uk> (raw)
In-Reply-To: <1275171436.2122.29.camel@itpsd6lap>

> Randy, Alan: Would you be so kind to comment on usability and
> acceptability of this tty driver approach? Thanks.

Not sure the naming is ideal (detour what where, simply calling it
'/dev/ttyprintk' might be clearer - but this is detail

> +void set_console_detour(void)
> +{
> +	console_detour = 1;
> +}
> +EXPORT_SYMBOL(set_console_detour);

module parameters can be set compiled in with modulename.option=foo so
there are easier ways to do that.

> + * Our simple preformatting:
> + * - every cr is replaced by '^'nl combination
> + * - every non cr or nl ended write is padded with '\'nl combination
> + * - adds a detour source tag in front of each line

This seems to make it more ambiguous


> +/*
> + *	Dummy tty ops open for succesfull terminal device open.
> + */
> +static int dty_open(struct tty_struct *tty, struct file *filp)
> +{
> +	return 0;

The kernel really expects posix behaviour but I'm not sure how much it
really matters in this case. Fixing that isn't hard though (use tty_port
helpers and basically no supporting functions)


> +	/* register our fops write function */
> +	tty_default_fops(&detour_fops);
> +	detour_fops.write = detour_write;

No. The behaviour of a tty is very precisely defined by the standards and
stomping over things you shouldn't is not good at all. Remember your tty
sets its own initial termios settings so you can set those to give the
initial behaviour you want. You need the tty layer here in your case
anyway as you don't have sufficient locking otherwise !

Also I'd provide a write_room method which always answers 'lots'

Do you need a recursion check. Suppose I open this device and capture
printk console messages to it ? Alternatively maybe you need an ioctl
handler to trap that case and reject it as a stupidity filter (or both ?)

> +	cdev_init(&dty_driver->cdev, &detour_fops);
> +
> +	/* create our unnumbered device */
> +	device_create(tty_class, NULL, MKDEV(TTYAUX_MAJOR, 3), NULL,
> +		dty_driver->name);

These need to check for failures.


> +static void initial_console_redirect(void)
> +{
> +	long ret;
> +
> +	/* re-register our fops write function */
> +	detour_fops.write = detour_write;
> +
> +	detour_file.f_dentry = &detour_dentry;
> +	detour_file.f_dentry->d_inode = &detour_inode;
> +	detour_file.f_op = &detour_fops;
> +	detour_file.f_mode |= FMODE_WRITE;
> +	security_file_alloc(&detour_file);
> +	INIT_LIST_HEAD(&detour_file.f_u.fu_list);
> +
> +	detour_inode.i_rdev = MKDEV(TTYAUX_MAJOR, 3);
> +	security_inode_alloc(&detour_inode);
> +	INIT_LIST_HEAD(&detour_inode.inotify_watches);
> +
> +	ret = detour_fops.open(&detour_inode, &detour_file);
> +	printk(KERN_INFO "detour_fops.open() returned %ld\n", ret);
> +	ret = detour_fops.unlocked_ioctl(&detour_file, TIOCCONS, 0);
> +	printk(KERN_INFO "detour_fops.ioctl() returned %ld\n", ret);
> +}

Bletch.. I'm really opposed to this kind of hackery. Fix your userspace a
tiny bit.

So
- Write only tty that uses printk: Looks good to me, implementation
  quibbles only
- Magic kernel hacks to shuffle things around in the initial console
  logic - hideous. I still really think you need to fix your userspace


  reply	other threads:[~2010-05-29 22:46 UTC|newest]

Thread overview: 47+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-05-15 10:17 Samo Pogacnik
2010-05-29 22:17 ` Samo Pogacnik
2010-05-29 22:54   ` Alan Cox [this message]
2010-05-29 22:59     ` Al Viro
2010-05-29 23:33     ` Samo Pogacnik
2010-06-09 22:37       ` [PATCH] detour TTY driver - now ttyprintk Samo Pogacnik
2010-06-11 12:44         ` Alan Cox
2010-06-11 21:32           ` Samo Pogacnik
2010-06-21 14:38             ` Alan Cox
2010-06-22 22:06               ` Samo Pogacnik
2010-06-22 22:21                 ` Alan Cox
2010-06-25 10:43                   ` Samo Pogacnik
2010-06-25 11:03                     ` Alan Cox
2010-06-26  1:48                       ` Samo Pogacnik
2010-06-27 13:35                         ` Alan Cox
2010-06-28 23:27                           ` Samo Pogacnik
2010-07-03 19:21                           ` Samo Pogacnik
2010-06-26 15:12                       ` Samo Pogacnik
2010-08-24 20:03                       ` Samo Pogacnik
2010-08-24 20:13                         ` Greg KH
2010-08-24 20:57                       ` Samo Pogacnik
2010-08-24 21:10                         ` Greg KH
2010-08-24 22:09                           ` Samo Pogacnik
2010-08-24 22:20                             ` Greg KH
2010-08-24 22:50                               ` Samo Pogacnik
2010-08-24 22:57                                 ` Greg KH
2010-08-24 23:22                                   ` Alan Cox
2010-08-24 23:12                                     ` Greg KH
2010-08-24 23:51                                       ` Alan Cox
2010-08-25  0:41                                         ` Greg KH
2010-08-25  6:50                                           ` Marco Stornelli
2010-08-25 10:08                                           ` Alan Cox
2010-08-25 15:57                                             ` Greg KH
2010-08-25 17:11                                               ` Alan Cox
2010-08-25 17:10                                                 ` Greg KH
2010-08-25 18:14                                                   ` Alan Cox
2010-08-25 18:16                                                     ` Greg KH
2010-08-25 19:30                                                       ` Alan Cox
2010-08-26 17:24                                                       ` Samo Pogacnik
2010-08-26 23:02                                                         ` Greg KH
2010-08-25 18:44                                                   ` Samo Pogacnik
2010-09-01 22:50                                                     ` patch "add ttyprintk driver" added to gregkh-2.6 tree gregkh
2010-08-25  7:40                                       ` [PATCH] detour TTY driver - now ttyprintk Kay Sievers
2010-08-25  7:48                                         ` Kay Sievers
2010-08-24 22:16                           ` Alan Cox
2010-08-24 22:02                             ` Greg KH
2010-06-11 23:31           ` Samo Pogacnik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20100529235402.296406d9@lxorguk.ukuu.org.uk \
    --to=alan@lxorguk.ukuu.org.uk \
    --cc=linux-embedded@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=rdunlap@xenotime.net \
    --cc=samo_pogacnik@t-2.net \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox

all inboxes | Powered by JetHome®