From: Gabriele Brugnoni <news@dveprojects.com>
To: linux-kernel@vger.kernel.org
Subject: Re: interruptible_sleep_on, interrupts and device drivers
Date: Sat, 15 Oct 2005 12:29:36 +0200 [thread overview]
Message-ID: <200510151229.37124.news@dveprojects.com> (raw)
Arjan van de Ven wrote:
>
> don't.
>
> interruptible_sleep_on() is a broken interface (see the comments in the
> header) and should not be used in any new code (where "new" is "since
> the year 2000" :)
>
> Just use the wait_event() interfaces .... or just a simple semaphore
> even if what you want to do is simple and performance isn't too
> critical.
>
OK, i'll not use, but the kernel has a lot of device drivers using it, that
may present the problem explained in my message.
In my code i've try the following:
save_flags(flags); cli();
if( !rs.txdone ) {
if( arg < 0 ) arg = rs.ttimeout;
if( arg > 0 )
interruptible_sleep_on_timeout ( &rs.txwait, arg );
else
interruptible_sleep_on ( &rs.txwait );
}
restore_flags(flags);
return rs.txdone;
Before testing the flag, interrupt are closed and if the TX is not terminated,
the interruptible_sleep_on_timeout will be called with interrupt DISABLED.
This is not a problem, because the scheduler will switch to another process,
and the new process will enable again the IRQ. When the scheduler will give
back the control to my process, it will continue with interrupt disabled, and
will be reenabled before exit.
This seems to work very fine.
Calling the waiting function with IRQ enabled may expose the device driver to
the risk of infinite wait (until a signal, obvious).
Thanks
Gabriele
next reply other threads:[~2005-10-15 10:27 UTC|newest]
Thread overview: 7+ messages / expand[flat|nested] mbox.gz Atom feed top
2005-10-15 10:29 Gabriele Brugnoni [this message]
2005-10-15 10:36 ` interruptible_sleep_on, interrupts and device drivers Arjan van de Ven
2005-10-15 10:57 ` Russell King
[not found] <4XQZI-5QC-1@gated-at.bofh.it>
2005-10-15 20:21 ` Robert Hancock
-- strict thread matches above, loose matches on Subject: below --
2005-10-15 10:00 Gabriele Brugnoni
2005-10-15 10:05 ` Arjan van de Ven
2005-10-15 13:01 ` Tushar Adeshara
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=200510151229.37124.news@dveprojects.com \
--to=news@dveprojects.com \
--cc=linux-kernel@vger.kernel.org \
/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