From: Till Straumann <strauman@slac.stanford.edu>
To: Josh Cartwright <josh.cartwright@ni.com>
Cc: "linux-rt-users@vger.kernel.org" <linux-rt-users@vger.kernel.org>
Subject: Re: How to unblock a thread from a hard isr (IRQF_NO_THREAD)
Date: Thu, 08 Nov 2012 22:28:53 -0600 [thread overview]
Message-ID: <509C8685.3000704@slac.stanford.edu> (raw)
In-Reply-To: <20121109040810.GD1718@beefymiracle.amer.corp.natinst.com>
Thanks, that's helpful.
Wouldn't it also be possible to make my own version of
prepare_to_wait()/finish_wait()/wake_up() etc. which internally
use a raw spinlock instead of a normal one?
- Till
On 11/08/2012 10:08 PM, Josh Cartwright wrote:
> On Thu, Nov 08, 2012 at 04:28:48PM -0600, Till Straumann wrote:
>> Hello list.
>>
>> I have a driver which is designed to do most work in user-space.
>> The ISR is really simple. It just ACKs/clears the interrupt and
>> then should unblock a waiting thread.
>> It seems overkill (and costs me about 5-10us) to use a threaded
>> interrupt in such a case (hard isr unblocks a kthread whose only
>> 'work' is unblocking another (user) thread).
>>
>> I have found some references where users try to do a similar
>> thing via UIO
>> (e.g.,
>> http://article.gmane.org/gmane.linux.rt.user/7372/
>> http://article.gmane.org/gmane.linux.rt.user/7676)
>>
>> However, the succinct answer was along the line 'that can't work with UIO'.
>>
>> IMHO it would be very helpful to get a more detailed explanation
>> as to why it doesn't work (i.e., what things you are and are not
>> allowed to do from a hard-isr under RT_PREEMPT). I suspect it is
>> because UIO calls routines such as 'kill_fasync' which use
>> ordinary (as opposed to raw) spinlocks which means that the
>> caller could be preempted (under RT_PREEMPT), right?
> Correct. Not just kill_fasync(), but the use of
> wake_up_interruptible() as well (and maybe others).
>
>> What *is* the recommended mechanism to wake up a thread from
>> a hard-isr?
> I'd suggest you look at the hrtimer_sleeper code for an example of
> process wakeup done in hardirq context. (hint, the low-level answer to
> your question is wake_up_process()).
>
> Josh
next prev parent reply other threads:[~2012-11-09 4:28 UTC|newest]
Thread overview: 8+ messages / expand[flat|nested] mbox.gz Atom feed top
2012-11-08 22:28 How to unblock a thread from a hard isr (IRQF_NO_THREAD) Till Straumann
2012-11-08 23:12 ` Tim Sander
2012-11-09 0:53 ` Till Straumann
[not found] ` <201211091518.36344.tim01@vlsi.informatik.tu-darmstadt.de>
2012-11-09 17:27 ` Till Straumann
2012-11-09 4:08 ` Josh Cartwright
2012-11-09 4:28 ` Till Straumann [this message]
2012-11-09 4:42 ` Josh Cartwright
2012-11-09 4:50 ` Till Straumann
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=509C8685.3000704@slac.stanford.edu \
--to=strauman@slac.stanford.edu \
--cc=josh.cartwright@ni.com \
--cc=linux-rt-users@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 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.