termios+PTY=real-time killer? (was Re: Interrupt Latency on PPC)

Tu Juan jtu at utstar.com
Tue Nov 20 22:43:10 UTC 2001


I'm confused.
I see In termios.c: (4.5.0)

osend (const char *buf, int len, struct rtems_termios_tty *tty)
{
        unsigned int newHead;
        rtems_interrupt_level level;
        rtems_status_code sc;

**      if (!tty->device.outputUsesInterrupts) {
**              (*tty->device.write)(tty->minor, buf, len);
**              return;
**      }
** Is this no use??? Or you are talking about something else?
        ...................
                rtems_interrupt_disable (level);
                while (newHead == tty->rawOutBufTail) {
                        tty->rawOutBufState = rob_wait;
                        rtems_interrupt_enable (level);
                        sc = rtems_semaphore_obtain
(tty->rawOutBufSemaphore,
                                                        RTEMS_WAIT,
                                                        RTEMS_NO_TIMEOUT);
                        if (sc != RTEMS_SUCCESSFUL)
                                rtems_fatal_error_occurred (sc);
                        rtems_interrupt_disable (level);
                }
                tty->rawOutBuf[tty->rawOutBufHead] = *buf++;
                tty->rawOutBufHead = newHead;
                if (tty->rawOutBufState == rob_idle) {
                  /* check, whether XOFF has been received */
                  if (!(tty->flow_ctrl & FL_ORCVXOF)) {
**                      (*tty->device.write)(tty->minor,
                                (char
*)&tty->rawOutBuf[tty->rawOutBufTail],1);
                  }
                  else {
                    /* remember that output has been stopped due to flow
ctrl*/
                    tty->flow_ctrl |= FL_OSTOP;
                  }
                  tty->rawOutBufState = rob_busy;
                }
                rtems_interrupt_enable (level);


Have a nice day!

Juan Tu


-----Original Message-----
From: till at MAILBOX.SLAC.Stanford.EDU
[mailto:till at MAILBOX.SLAC.Stanford.EDU]On Behalf Of Till Straumann
Sent: 2001?11?16? 12:21
To: Fernando RUIZ CASAS (E-mail)
Cc: 'RTEMS List'; joel.sherrill at oarcorp.com
Subject: termios+PTY=real-time killer? (was Re: Interrupt Latency on PPC)


"Fernando RUIZ CASAS (E-mail)" wrote:

> Hi.
>  Is the PTY driver the pty.c file placed close to telnetd.c?
>
>  This pty driver doesn't make any special thing with termios.
>  If the tcp/ip works fine the driver also.
>

We are talking about the very one. I agree, pty.c does not do anything
special. However, termios [under some circumstances] calls
pty's pollWrite() function with _Interrupts_disabled_:

  rtems_interrupt_disable(level);
  ...
  tty->device.write(...);
  ...
  rtems_interrupt_enable(level);

Because PTY's pollWrite() does socket/IO, I guess it could even
block! - Or am I missing something?

I suppose that termios could relax its interrupt-disabling policy
in task driven mode. PTY should then probably be run in task
driven or polled mode.

-- Till

>
> Perhaps I'm speaking about other oignons.
>
> Fernando RUIZ CASAS
> home:correo at fenando-ruiz.com
> work:fernando.ruiz at ctv.es
>
> -----Mensaje original-----
> De: till at MAILBOX.SLAC.Stanford.EDU
> [mailto:till at MAILBOX.SLAC.Stanford.EDU]En nombre de Till Straumann
> Enviado el: viernes, 16 de noviembre de 2001 2:26
> Para: RTEMS List; joel.sherrill at oarcorp.com
> Asunto: Re: Interrupt Latency on PPC
>
> Things get _really_ bad when the PTY driver is
> heavily used. I measured IRQ latencies of ~200us
> during quite short measurement intervals (remember,
> we're doing statistics here). This is in the order of
> 100 times the average.
>
> I guess that the problem is caused by termios.c
> which under some circumstances calls the
> device's 'write' callback with _IRQs_disabled_.
> The PTY driver's write callback is a
>
> write(socket,...)
>
> outchh!
>
> Is there a termios expert out there who could explain
> to me what really needs to be protected from interrupts?
>
> Also, shouldn't the PTY driver run in task driven
> (as opposed to the current IRQ driven) mode?
>
> -----Mensaje original-----
> De: till at MAILBOX.SLAC.Stanford.EDU
> [mailto:till at MAILBOX.SLAC.Stanford.EDU]En nombre de Till Straumann
> Enviado el: viernes, 16 de noviembre de 2001 2:26
> Para: RTEMS List; joel.sherrill at oarcorp.com
> Asunto: Re: Interrupt Latency on PPC
>
> Things get _really_ bad when the PTY driver is
> heavily used. I measured IRQ latencies of ~200us
> during quite short measurement intervals (remember,
> we're doing statistics here). This is in the order of
> 100 times the average.
>
> I guess that the problem is caused by termios.c
> which under some circumstances calls the
> device's 'write' callback with _IRQs_disabled_.
> The PTY driver's write callback is a
>
> write(socket,...)
>
> outchh!
>
> Is there a termios expert out there who could explain
> to me what really needs to be protected from interrupts?
>
> Also, shouldn't the PTY driver run in task driven
> (as opposed to the current IRQ driven) mode?
>
> -- Till.




More information about the users mailing list