All of lore.kernel.org
 help / color / mirror / Atom feed
From: Philippe Gerum <rpm@xenomai.org>
To: Tomas Kalibera <kalibera@domain.hid>
Cc: xenomai@xenomai.org
Subject: Re: [Xenomai-help] Interrupt propagation question
Date: Mon, 14 Apr 2008 22:33:35 +0200	[thread overview]
Message-ID: <4803BF9F.6010507@domain.hid> (raw)
In-Reply-To: <48039113.2000905@domain.hid>

Tomas Kalibera wrote:
> 
> Hi,
> 
> so I've gone through the sources and made my guesses. When called from
> user space, rt_intr_create results in a kernel-space handler being
> installed using kernel-space rt_intr_create. The kernel handler only
> counts received interrupts, exiting as soon as the count is updated. The
> kernel handler is called with the interrupt disabled. On return, it uses
> the I_NOAUTOENA flag from the user space call to rt_intr_create. When
> the flag is set, the interrupts should stay disabled at hardware level
> unless explicitly enabled by application.
> 
> If rt_intr_wait is called from user space, it blocks until interrupt
> count is >=1, then returns the interrupt count. Enabling/disabling
> interrupts has thus no direct impact on rt_intr_wait returning - if some
> interrupts are left to handle, rt_intr_wait will return even if the
> interrupt is disabled.
> 
> As far as my guesses based on the code are correct, rt_intr_enable and
> rt_intr_disable called from user space should do end up in the
> interrupts being enabled/disabled at hardware level. A simple example
> however does not seem to follow this - I disable interrupts, do not
> enable it, and they're still received. Why could this be happening ? Is
> there a way to inquire if the interrupt is really disabled, at
> application level ?
>

What do

$ cat /proc/interrupts
and
$ cat /proc/xenomai/irq

say?


> Tomas
> 
> Philippe Gerum wrote:
>> Tomas Kalibera wrote:
>>  
>>> Hi,
>>>
>>> I'm receiving interrupts in Xenomai user-domain using rt_intr_wait.
>>> What is the semantics of rt_intr_enable and rt_intr_disable ? And
>>> I_NOAUTOENA ?
>>>
>>> I used I_NOAUTOENA when calling rt_intr_create. I thought that after
>>> returning from rt_intr_wait, the interrupt would be disabled before I
>>> explicitly call rt_intr_enable. However, next call to rt_intr_wait
>>> happily returned with the next interrupt, as opposed to blocking
>>> indefinitely. Why ? Does rt_intr_wait automatically re-enable the
>>> interrupt ?
>>>
>>> I tried to intentionally loose interrupts - I called rt_intr_enable
>>> while handling an interrupt intentionally before making the hardware
>>> generate next one. Still, the next call to rt_intr_wait did return
>>> (the interrupt was not lost). How could this happen ? If interrupts
>>> are logged anyway, what the rt_intr_enable/disable does ?
>>>
>>> I read in the API documentation
>>>
>>> "Interrupt receipts are logged if they cannot be delivered
>>> immediately to some interrupt server task, so that a call to
>>> rt_intr_wait()
>>> <http://www.xenomai.org/documentation/branches/v2.4.x/html/api/group__interrupt.html#g222e6a9a681f83b13ed5b51021711f4d>
>>> might return immediately if an IRQ is already pending on entry of the
>>> service."
>>>
>>> How does Xenomai find out about this ? I mean, if a "interrupt server
>>> task" is not presently blocked in rt_intr_wait for a particular
>>> interrupt, how does Xenomai know that a task is actually an
>>> "interrupt server task" ? When does this association happen ? Does a
>>> call to rt_intr_create make Xenomai log interrupts for the domain
>>> from which rt_intr_create was called ?
>>>
>>>     
>>
>> This call delivers interrupts to the Xenomai domain, only.
>>
>> For the rest, have a look at ksrc/skins/native/syscall.c,
>> __rt_intr_wait, and
>> __rt_intr_handler.
>>
>>  
>>> Thanks !
>>> Tomas
>>>
>>>
>>>
>>>
>>>
>>>
>>> _______________________________________________
>>> Xenomai-help mailing list
>>> Xenomai-help@domain.hid
>>> https://mail.gna.org/listinfo/xenomai-help
>>>
>>>     
>>
>>
>>   
> 
> 


-- 
Philippe.


  reply	other threads:[~2008-04-14 20:33 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2008-04-14  0:44 [Xenomai-help] Interrupt propagation question Tomas Kalibera
2008-04-14  7:26 ` Philippe Gerum
2008-04-14 17:14   ` Tomas Kalibera
2008-04-14 20:33     ` Philippe Gerum [this message]
     [not found]       ` <4803D33B.5050507@domain.hid>
     [not found]         ` <48045AEF.5000005@domain.hid>
2008-04-15 17:08           ` Tomas Kalibera

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=4803BF9F.6010507@domain.hid \
    --to=rpm@xenomai.org \
    --cc=kalibera@domain.hid \
    --cc=xenomai@xenomai.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.