All of lore.kernel.org
 help / color / mirror / Atom feed
* nozomi: ERESTARTSYS to userspace?
@ 2007-10-08 10:26 Jiri Slaby
  2007-10-08 12:02 ` Alan Cox
  0 siblings, 1 reply; 2+ messages in thread
From: Jiri Slaby @ 2007-10-08 10:26 UTC (permalink / raw)
  To: Paul Hardwick; +Cc: Linux Kernel Mailing List

Hi,

static int ntty_write(struct tty_struct *tty, const unsigned char *buffer,
                      int count)
{
        int rval = -EINVAL;
        struct nozomi *dc = get_dc_by_tty(tty);
        struct port *port = (struct port *)tty->driver_data;
        unsigned long flags;

        /* DBG1( "WRITEx: %d, index = %d", count, index); */

        if (!dc || !port)
                return -ENODEV;

        if (unlikely(down_trylock(&port->tty_sem))) {
                /*
                 * must test lock as tty layer wraps calls
                 * to this function with BKL
                 */
                dev_err(&dc->pdev->dev, "Would have deadlocked - "
                        "return ERESTARTSYS\n");
                return -ERESTARTSYS;
        }

The use of ERESTARTSYS seems bogus to me, no signal is pending and this flag
would reach userspace (that is not permitted), am I right?

--js

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

* Re: nozomi: ERESTARTSYS to userspace?
  2007-10-08 10:26 nozomi: ERESTARTSYS to userspace? Jiri Slaby
@ 2007-10-08 12:02 ` Alan Cox
  0 siblings, 0 replies; 2+ messages in thread
From: Alan Cox @ 2007-10-08 12:02 UTC (permalink / raw)
  To: Jiri Slaby; +Cc: Paul Hardwick, Linux Kernel Mailing List

>         if (unlikely(down_trylock(&port->tty_sem))) {
>                 /*
>                  * must test lock as tty layer wraps calls
>                  * to this function with BKL
>                  */
>                 dev_err(&dc->pdev->dev, "Would have deadlocked - "
>                         "return ERESTARTSYS\n");
>                 return -ERESTARTSYS;
>         }
> 
> The use of ERESTARTSYS seems bogus to me, no signal is pending and this flag
> would reach userspace (that is not permitted), am I right?

serial driver write methods are called from the ldisc not the tty so the
code is in fact totally bogus.

I suspect what is needed (other than to take the entire driver to bits
and put it back together using serial_core) is 

	if (down_trylock(&port->tty_sem))
		return 0;

and the driver is then required to wake the write wait queue when that
condition becomes false - or at least before/when it runs out of
data (which currently it doesn't seem to for all cases).

Lots of other breakage in it as well (termios function is totally bogus,
tty_flip_queue_function is a no-op) etc etc

Alan

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

end of thread, other threads:[~2007-10-08 11:58 UTC | newest]

Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-10-08 10:26 nozomi: ERESTARTSYS to userspace? Jiri Slaby
2007-10-08 12:02 ` Alan Cox

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.