public inbox for linux-kernel@vger.kernel.org
 help / color / mirror / Atom feed
From: "karl malbrain" <karl@petzent.com>
To: "Linux-Os@Analogic. Com" <linux-os@analogic.com>
Cc: "Linux-Kernel@Vger. Kernel. Org" <linux-kernel@vger.kernel.org>
Subject: RE: 2.6.9: serial_core: uart_open
Date: Tue, 12 Jul 2005 12:27:51 -0700	[thread overview]
Message-ID: <02e201c58717$cb97adc0$4b010059@petzent.com> (raw)

>On Tue, 12 Jul 2005, karl malbrain wrote:

>> The uart_open code loops waiting for CD to be asserted (whenever CLOCAL
>> is not set).  The bottom of the loop contains the following code:
>>
>> up(&state->sem);
>> schedule();
>> down(&state->sem);
>>
>> if( signal_pending(current) )
>>   break;
>>
>> When I issue an open("/dev/ttyS1", O_RDWR) from a terminal session on
>> the console, the system seems to come to a stop in this loop until the
>> process is killed.  I suspect that the scheduler is choosing this process
>> to run again because of an elevated console priority of some sort.
>>
>> Is there a kernel mechanism to put a process to sleep until awakened by
>> an event to replace this looping behaviour?
>>
>> Thanks, karl malbrain, malbrain-at-yahoo-dot-com
>>

>In the first place, you should perform an open(O_NDELAY), so the open
>returns immediately with anything that has potential "modem-control".
>Then you can set the device to blocking using fcntl(F_GETFL), F_SETFL.

>Also, the task that is waiting for the open() is sleeping. That's
>what schedule() does.

>Cheers,
>Dick Johnson

I'm looking for the POSIX behaviour of delaying the open until CD is
asserted by the modem.  If schedule() doesn't select another process to run,
no wonder the system is hung at this point, because the uart_open loop
doesn't break until CD is asserted by the modem.  This sounds like a serious
bug.

karl_m




             reply	other threads:[~2005-07-12 19:31 UTC|newest]

Thread overview: 17+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-07-12 19:27 karl malbrain [this message]
     [not found] <Pine.LNX.4.61.0507151150290.11664@chaos.analogic.com>
2005-07-15 16:57 ` 2.6.9: serial_core: uart_open karl malbrain
     [not found] <Pine.LNX.4.61.0507130850110.18969@chaos.analogic.com>
2005-07-13 17:53 ` karl malbrain
2005-07-14  8:26   ` Russell King
2005-07-14 17:16     ` karl malbrain
2005-07-14 18:57       ` Russell King
2005-07-14 19:30         ` karl malbrain
2005-07-14 22:35         ` karl malbrain
2005-07-15  7:28           ` Russell King
2005-07-15 16:02             ` karl malbrain
2005-07-15 20:32               ` Russell King
2005-07-15 20:48                 ` karl malbrain
2005-07-15 16:20             ` karl malbrain
  -- strict thread matches above, loose matches on Subject: below --
2005-07-12 20:32 karl malbrain
2005-07-12 18:36 karl malbrain
2005-07-12 21:03 ` Russell King
2005-07-12 21:17   ` karl malbrain

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='02e201c58717$cb97adc0$4b010059@petzent.com' \
    --to=karl@petzent.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=linux-os@analogic.com \
    /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