All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alex Ivchenko <aivchenko@ueidaq.com>
To: root@chaos.analogic.com
Cc: Linus Torvalds <torvalds@transmeta.com>, linux-kernel@vger.kernel.org
Subject: Re: 2.4.6 possible problem
Date: Tue, 17 Jul 2001 18:33:32 -0400	[thread overview]
Message-ID: <3B54BD3C.A8E1E47F@ueidaq.com> (raw)
In-Reply-To: <Pine.LNX.3.95.1010717153319.6035A-100000@chaos.analogic.com>

Dick,

"Richard B. Johnson" wrote:
> 
> On Tue, 17 Jul 2001, Linus Torvalds wrote:
> 
> > In article <Pine.LNX.3.95.1010717103652.1430A-100000@chaos.analogic.com>,
> > Richard B. Johnson <root@chaos.analogic.com> wrote:
> > >
> > >    ticks = 1 * HZ;        /* For 1 second */
> > >    while((ticks = interruptible_sleep_on_timeout(&wqhead, ticks)) > 0)
> > >                  ;
> >
> > Don't do this.
> >
> > Imagine what happens if a signal comes in and wakes you up? The signal
> > will continue to be pending, which will make your "sleep loop" be a busy
> > loop as you can never go to sleep interruptibly with a pending signal.

Sleep like this is useless in real code. You either want your ioctl to unblock
when event (or time-out) happens or use sleep function to make driver wait certain 
amount of time (if you need to access poorly-designed hardware).

Off-topic:

>     I was going to compile a list of innovations that could be
>     attributed to Microsoft. Once I realized that Ctrl-Alt-Del
>     was handled in the BIOS, I found that there aren't any.
Well, give 'em at least some credit for copycating :-)
As a system architect I would say a *good* copycating.

For example:

Win32 events (CreateEvent(), WaitForxxxObject()) are very useful things.
The whole reason I was asking my questions is because I want to emulate Win32-like
event mechanism it Linux driver. I wouldn't mind to have this mechanism built into
Linux kernel. 

Say, one of the user process threads calls:
ret = WaitForSingleObject(hObject, dwTimeoutms);
or
ret = WaitForMultipleObjects(nNumber, hObjects[], FALSE, dwTimeoutms);

and waits until time-out or one (or more) objects are set.

>From the driver side you call:
KeSetEvent(hNotifyEvent, (KPRIORITY)1, FALSE);
when you want to release object.

It's very useful.
For example, with our hardware I can have up to 16*4 = 64 totally separated 
subsystems. Each subsystem can fire event asynchronously. It's much easier to
control each subsystem in separate thread and Win32 events are very handy.

-- 
Regards,
Alex

--
Alex Ivchenko, Ph.D.
United Electronic Industries, Inc.
"The High-Performance Alternative (tm)"
--
10 Dexter Avenue
Watertown, Massachusetts 02472
Tel: (617) 924-1155 x 222 Fax: (617) 924-1441
http://www.ueidaq.com

      parent reply	other threads:[~2001-07-17 22:32 UTC|newest]

Thread overview: 8+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2001-07-17 14:01 2.4.6 possible problem Alex Ivchenko
2001-07-17 14:46 ` Richard B. Johnson
2001-07-17 18:44   ` Alex Ivchenko
2001-07-17 18:52     ` Richard B. Johnson
2001-07-17 19:24   ` Linus Torvalds
2001-07-17 19:36     ` Richard B. Johnson
2001-07-17 19:42       ` Richard B. Johnson
2001-07-17 22:33       ` Alex Ivchenko [this message]

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=3B54BD3C.A8E1E47F@ueidaq.com \
    --to=aivchenko@ueidaq.com \
    --cc=linux-kernel@vger.kernel.org \
    --cc=root@chaos.analogic.com \
    --cc=torvalds@transmeta.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 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.