From: Corey Minyard <cminyard@mvista.com>
To: Alan <alan@lxorguk.ukuu.org.uk>
Cc: Guennadi Liakhovetski <g.liakhovetski@gmx.de>,
Tilman Schmidt <tilman@imap.cc>,
linux-serial@vger.kernel.org,
Linux Kernel <linux-kernel@vger.kernel.org>,
Hansjoerg Lipp <hjlipp@web.de>, Russell Doty <rdoty@redhat.com>
Subject: Re: [PATCH] Add the ability to layer another driver over the serial driver
Date: Mon, 11 Dec 2006 10:29:31 -0600 [thread overview]
Message-ID: <457D876B.9000508@mvista.com> (raw)
In-Reply-To: <20061211151943.2bbc720e@localhost.localdomain>
Alan wrote:
> On Mon, 11 Dec 2006 08:52:20 -0600
> Corey Minyard <cminyard@mvista.com> wrote:
>
>> So here's the start of discussion:
>>
>> 1) The IPMI driver needs to run at panic time to modify watchdog
>> timers and store panic information in the event log. So no work
>> queues, no delayed work, and the need for some type of poll
>> operation on the device.
>>
>
> That would be the existing serial console interface. For things like USB
> serial you are probably out of luck. At the moment we have a single
> "console" attached to a specific serial console interface. The code is
> almost all there for allowing other parties to create new synchronous
> serial logging devices by opening open as the console driver does.
>
I don't think the console interface really helps. Input processing is also
needed, and the output blocks until the character is sent. A poll routine
is a better way to accomplish this, IMHO.
>
>> 2) The IPMI driver needs to get messages through even when
>> the system is very busy. Since a watchdog runs over the driver,
>> it needs to be able to get messages through to avoid a system
>> reset as long as something is pinging the watchdog from userland.
>>
>
> You have a high priority character output function which jumps existing
> data. Not all hardware implements this, and some of the modern hardware
> in particular simply doesn't physically support such behaviour. Also if
> you are the sole user of the port you *know* nobody else will be queuing
> data to it anyway.
>
That's not really the issue. The input processing is again the
issue.
>
>> Currently there are mutexes, lock_kernel() calls, and work queues
>> that cause trouble for these.
>>
>> There is also a comment that you can't set low_latency and call
>> tty_flip_buffer_push from IRQ context. This seems to be due to a
>> lack of anything in flush_to_ldisc to handle reentrancy, and perhaps
>> because disc->receive_buf can block, but I couldn't tell easily.
>>
>
> The entire tty side locking, scheduling and design is based upon the idea
> that input processing is deferred. Otherwise you get long chains of
> recursion from the worst cases.
>
I was actually wrong, flush_to_ldisc does handle reentrancy.
It can only have one caller to disc->receive_buf() at a time. So
long chains of recursion don't seem to be possible, even if called
from IRQ context.
And studying the way ppp does writing, it can bypass the tty_write()
call and directly call the drivers. So that bypasses the transmit
locking problems I saw.
This is going to require some more thought. But I believe it can be
done with adding a poll routine to the tty_operations structure and
perhaps some minor changes around tty_flip_buffer_push.
Thanks for your help.
-Corey
next prev parent reply other threads:[~2006-12-11 16:29 UTC|newest]
Thread overview: 19+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-10-16 16:53 [PATCH] Add the ability to layer another driver over the serial driver Corey Minyard
2006-12-10 19:19 ` Tilman Schmidt
2006-12-10 20:21 ` Guennadi Liakhovetski
2006-12-11 1:23 ` Corey Minyard
2006-12-11 10:20 ` Alan
2006-12-11 14:52 ` Corey Minyard
2006-12-11 15:19 ` Alan
2006-12-11 16:29 ` Corey Minyard [this message]
2006-12-11 17:15 ` Alan
2006-12-11 17:22 ` Corey Minyard
2006-12-19 19:27 ` Corey Minyard
2006-12-11 16:58 ` Tilman Schmidt
2006-12-11 17:07 ` Corey Minyard
2006-12-12 23:50 ` Tilman Schmidt
2006-12-11 17:40 ` Alan
2006-12-13 0:21 ` Tilman Schmidt
2006-12-11 19:01 ` Guennadi Liakhovetski
2006-12-11 19:15 ` Alan
2006-12-11 20:16 ` Guennadi Liakhovetski
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=457D876B.9000508@mvista.com \
--to=cminyard@mvista.com \
--cc=alan@lxorguk.ukuu.org.uk \
--cc=g.liakhovetski@gmx.de \
--cc=hjlipp@web.de \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-serial@vger.kernel.org \
--cc=rdoty@redhat.com \
--cc=tilman@imap.cc \
/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