From: Anders Blomdell <anders.blomdell@domain.hid>
To: xenomai@xenomai.org
Subject: Re: [Xenomai-core] Are XN_ISR_CHAINED and XN_ISR_ENABLE mutually exclusive?
Date: Wed, 01 Feb 2006 16:26:16 +0100 [thread overview]
Message-ID: <43E0D318.5000505@domain.hid> (raw)
In-Reply-To: <43E0CD23.7000502@domain.hid>
Anders Blomdell wrote:
> Jan Kiszka wrote:
>
>> Anders Blomdell wrote:
>>
>>> While looking into how to implement sharing of interrupts between
>>> realtime and non-realtime domains (and applying Wolfgang Grandegger's
>>> patch [https://mail.gna.org/public/xenomai-core/2006-01/msg00233.html],
>>> which is necessary to make XN_ISR_ENABLE work at all on the PowerPC
>>> platform), I'm beginning to think that XN_ISR_CHAINED and XN_ISR_ENABLE
>>> are mutually exclusive, since if both are set, desc->handler->end will
>>> be called twice:
>>>
>>> 1. When the realtime isr handler returns
>>> 2. When the Linux domain calls it in __do_IRQ
>>
>>
>>
>> Yes, those bits are semantically exclusive. Actually, I think passing
>> both bits could even cause deadlocks if the RT-IRQ is raised again
>> before the non-RT handler got a chance to clear the IRQ source in
>> hardware.
>
> My impression as well, but it's nowhere documented, nor enforced in the
> code.
>
>>
>>
>>> In the solution I have in mind at the moment, I will:
>>>
>>> 1. Add an extra iend handler argument to xnintr_init
>>> 2. If XN_ISR_ENABLE is returned from the isr handler,
>>> replace desc->handler->end with the user supplied
>>> iend handler.
>>>
>>> Hereby I hope to be able to handle interrupts shared between realtime
>>> and non-realtime domain, without having the realtime domain wait for all
>>> non-realtime interrupts to finish. This is the scenario I'm thinking of:
>>>
>>> 1. A non-RT interrupt occurs
>>> 2. The (RT) isr handler detects the non-RT interrupt,
>>> disables further non-RT interrupts on that irq-vector, replaces
>>
>>
>>
>> This remains vague to me. How precisely will you disable? I guess at
>> hardware level, i.e. in a (non-RT) device-specific way: switch off the
>> bit in some hardware register that says "this device can produce IRQs",
>> right?
>
> Yes.
>
>>
>>
>>> desc->handler->end with the user supplied iend handler,
>>> returns XN_ISR_CHAINED | XN_ISR_ENABLE.
>>> 3. RT interrupts are serviced by the (RT) isr handler,
>>> returns XN_ISR_ENABLE
>>> 4. The Linux domain get a chance to run the chained interrupt,
>>> and eventually calls desc->handler->end (supplied iend handler)
>>> 5. The iend handler reenables non-RT interrupts.
>>
>>
>>
>> Then this would switch on that bit again? Note that this may require to
>> synchronise the hardware access with parts of the non-RT driver.
>
> If the non-RT driver sets that bit in its ISR routine, yes. I have the
> (overly optimistic?) view that the non-RT ISR only does whatever is
> necessary to clear the interrupt and leaves the enable/disable bits
> untouched.
Or perhaps the whole conceptis of no interest to others, and I should put this
arbitration in the platform specific part (arch/ppc/platform/prpmc800.c) and
consider the harrier chip as a cascaded interrupt controller, and handle it as such?
--
Anders Blomdell
next prev parent reply other threads:[~2006-02-01 15:26 UTC|newest]
Thread overview: 17+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-01-31 18:53 [Xenomai-core] [PATCH] Shared irqs v.6 Dmitry Adamushko
2006-01-31 19:09 ` Jan Kiszka
2006-01-31 19:50 ` Dmitry Adamushko
2006-01-31 20:14 ` Jan Kiszka
2006-02-01 8:32 ` Jeroen Van den Keybus
2006-02-01 8:46 ` Jan Kiszka
2006-01-31 19:40 ` Jan Kiszka
2006-02-01 13:59 ` [Xenomai-core] Are XN_ISR_CHAINED and XN_ISR_ENABLE mutually exclusive? Anders Blomdell
2006-02-01 14:52 ` Jan Kiszka
2006-02-01 15:00 ` Anders Blomdell
2006-02-01 15:26 ` Anders Blomdell [this message]
2006-02-06 11:34 ` [Xenomai-core] [BUG] problems with adeos-ipipe-2.6.14-ppc-1.2-00.patch Anders Blomdell
2006-02-06 18:44 ` Philippe Gerum
2006-02-07 16:04 ` [Xenomai-core] [PATCH] Slow is faster arch/ppc/syslib/open_pic.c Anders Blomdell
2006-02-07 16:16 ` Philippe Gerum
2006-02-08 9:40 ` Philippe Gerum
2006-02-08 17:57 ` Philippe Gerum
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=43E0D318.5000505@domain.hid \
--to=anders.blomdell@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.