* [Xenomai-core] Missing IRQ end function on PowerPC
@ 2006-01-18 10:44 Wolfgang Grandegger
2006-01-19 12:29 ` Gilles Chanteperdrix
0 siblings, 1 reply; 16+ messages in thread
From: Wolfgang Grandegger @ 2006-01-18 10:44 UTC (permalink / raw)
To: xenomai
Hello,
with RTnet over Xenomai and Linux 2.4 on PowerPC I realized that Xenomai
does not distinguish between a normal IRQ enable and an IRQ unmask at
the end of an ISR (to reenable the IRQ). In the latter case the IRQ
should be enabled on PowerPC as shown:
if (rthal_irq_descp(irq)->handler->end != NULL)
rthal_irq_descp(irq)->handler->end(irq);
else
rthal_irq_descp(irq)->handler->enable(irq);
To handle this case properly, we need to different functions, I think.
Wolfgang.
^ permalink raw reply [flat|nested] 16+ messages in thread* Re: [Xenomai-core] Missing IRQ end function on PowerPC
2006-01-18 10:44 [Xenomai-core] Missing IRQ end function on PowerPC Wolfgang Grandegger
@ 2006-01-19 12:29 ` Gilles Chanteperdrix
2006-01-19 13:06 ` Wolfgang Grandegger
0 siblings, 1 reply; 16+ messages in thread
From: Gilles Chanteperdrix @ 2006-01-19 12:29 UTC (permalink / raw)
To: Wolfgang Grandegger; +Cc: xenomai
Wolfgang Grandegger wrote:
> Hello,
>
> with RTnet over Xenomai and Linux 2.4 on PowerPC I realized that Xenomai
> does not distinguish between a normal IRQ enable and an IRQ unmask at
> the end of an ISR (to reenable the IRQ). In the latter case the IRQ
> should be enabled on PowerPC as shown:
>
> if (rthal_irq_descp(irq)->handler->end != NULL)
> rthal_irq_descp(irq)->handler->end(irq);
> else
> rthal_irq_descp(irq)->handler->enable(irq);
>
> To handle this case properly, we need to different functions, I think.
I am not sure I understand what you mean. Would you want functions
rthal_end_irq and xnarch_end_irq added and that this xnarch_end_irq
would be called in xnintr_irq_handler when XN_ISR_ENABLE is set ?
--
Gilles Chanteperdrix.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Xenomai-core] Missing IRQ end function on PowerPC
2006-01-19 12:29 ` Gilles Chanteperdrix
@ 2006-01-19 13:06 ` Wolfgang Grandegger
2006-01-19 13:27 ` Gilles Chanteperdrix
0 siblings, 1 reply; 16+ messages in thread
From: Wolfgang Grandegger @ 2006-01-19 13:06 UTC (permalink / raw)
To: Gilles Chanteperdrix; +Cc: xenomai
Gilles Chanteperdrix wrote:
> Wolfgang Grandegger wrote:
> > Hello,
> >
> > with RTnet over Xenomai and Linux 2.4 on PowerPC I realized that Xenomai
> > does not distinguish between a normal IRQ enable and an IRQ unmask at
> > the end of an ISR (to reenable the IRQ). In the latter case the IRQ
> > should be enabled on PowerPC as shown:
> >
> > if (rthal_irq_descp(irq)->handler->end != NULL)
> > rthal_irq_descp(irq)->handler->end(irq);
> > else
> > rthal_irq_descp(irq)->handler->enable(irq);
> >
> > To handle this case properly, we need to different functions, I think.
>
> I am not sure I understand what you mean. Would you want functions
> rthal_end_irq and xnarch_end_irq added and that this xnarch_end_irq
> would be called in xnintr_irq_handler when XN_ISR_ENABLE is set ?
Yes, that's what I have basically done to get the RTnet SCC enet driver
working on my MPC8xx module. In arch/ppc/kernel/irq.c you can see how
Linux re-enables interrupts at the end of it's ISR (see
http://cvs.gna.org/cvsweb/linux/v2.4/2.4.25-ppc/arch/ppc/kernel/irq.c?rev=1.1;cvsroot=adeos):
507: * The ->end() handler has to deal with interrupts which got
508: * disabled while the handler was running.
509: */
510: if (desc->handler) {
511: if (desc->handler->end)
512: desc->handler->end(irq);
513: else if (desc->handler->enable)
514: desc->handler->enable(irq);
In PPC Linux 2.6 things are a bit different. The "end" functions seems
to be mandatory now (I have to check more carefully).
Therefore we need a dedicated function to re-enable interrupts in the
ISR. We could name it *_end_irq, but maybe *_enable_isr_irq is more
obvious. On non-PPC archs it would translate to *_irq_enable. I
realized, that *_irq_enable is used in various place/skins and therefore
I have not yet provided a patch.
Wolfgang.
^ permalink raw reply [flat|nested] 16+ messages in thread* Re: [Xenomai-core] Missing IRQ end function on PowerPC
2006-01-19 13:06 ` Wolfgang Grandegger
@ 2006-01-19 13:27 ` Gilles Chanteperdrix
2006-01-19 13:40 ` Wolfgang Grandegger
` (2 more replies)
0 siblings, 3 replies; 16+ messages in thread
From: Gilles Chanteperdrix @ 2006-01-19 13:27 UTC (permalink / raw)
To: Wolfgang Grandegger; +Cc: xenomai
Wolfgang Grandegger wrote:
> Therefore we need a dedicated function to re-enable interrupts in the
> ISR. We could name it *_end_irq, but maybe *_enable_isr_irq is more
> obvious. On non-PPC archs it would translate to *_irq_enable. I
> realized, that *_irq_enable is used in various place/skins and therefore
> I have not yet provided a patch.
The function xnarch_irq_enable seems to be called in only two functions,
xintr_enable and xnintr_irq_handler when the flag XN_ISR_ENABLE is set.
In any case, since I am not sure if this has to be done at the Adeos
level or in Xenomai, we will wait for Philippe to come back and decide.
--
Gilles Chanteperdrix.
^ permalink raw reply [flat|nested] 16+ messages in thread* Re: [Xenomai-core] Missing IRQ end function on PowerPC
2006-01-19 13:27 ` Gilles Chanteperdrix
@ 2006-01-19 13:40 ` Wolfgang Grandegger
2006-01-24 10:20 ` Wolfgang Grandegger
2006-01-29 22:56 ` Philippe Gerum
2 siblings, 0 replies; 16+ messages in thread
From: Wolfgang Grandegger @ 2006-01-19 13:40 UTC (permalink / raw)
To: Gilles Chanteperdrix; +Cc: xenomai
Gilles Chanteperdrix wrote:
> Wolfgang Grandegger wrote:
> > Therefore we need a dedicated function to re-enable interrupts in the
> > ISR. We could name it *_end_irq, but maybe *_enable_isr_irq is more
> > obvious. On non-PPC archs it would translate to *_irq_enable. I
> > realized, that *_irq_enable is used in various place/skins and therefore
> > I have not yet provided a patch.
>
> The function xnarch_irq_enable seems to be called in only two functions,
> xintr_enable and xnintr_irq_handler when the flag XN_ISR_ENABLE is set.
But the user may want to re-enable the interrupt without using
XN_ISR_ENABLE as well.
> In any case, since I am not sure if this has to be done at the Adeos
> level or in Xenomai, we will wait for Philippe to come back and decide.
In both, I guess. OK and thanks.
Wolfgang.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Xenomai-core] Missing IRQ end function on PowerPC
2006-01-19 13:27 ` Gilles Chanteperdrix
2006-01-19 13:40 ` Wolfgang Grandegger
@ 2006-01-24 10:20 ` Wolfgang Grandegger
2006-02-02 12:52 ` Philippe Gerum
2006-01-29 22:56 ` Philippe Gerum
2 siblings, 1 reply; 16+ messages in thread
From: Wolfgang Grandegger @ 2006-01-24 10:20 UTC (permalink / raw)
To: Gilles Chanteperdrix; +Cc: xenomai
[-- Attachment #1: Type: text/plain, Size: 1203 bytes --]
Gilles Chanteperdrix wrote:
> Wolfgang Grandegger wrote:
> > Therefore we need a dedicated function to re-enable interrupts in the
> > ISR. We could name it *_end_irq, but maybe *_enable_isr_irq is more
> > obvious. On non-PPC archs it would translate to *_irq_enable. I
> > realized, that *_irq_enable is used in various place/skins and therefore
> > I have not yet provided a patch.
>
> The function xnarch_irq_enable seems to be called in only two functions,
> xintr_enable and xnintr_irq_handler when the flag XN_ISR_ENABLE is set.
>
> In any case, since I am not sure if this has to be done at the Adeos
> level or in Xenomai, we will wait for Philippe to come back and decide.
Attached is a temporary Xenomai patch fixing the IRQ end problem for the
PowerPC arch. I had a closer look to the various IRQ end functions on
PowerPC:
ic_end(unsigned int irq)
{
ic_ack(irq);
if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
ic_enable(irq);
}
}
In most cases the end functions do the same than the begin functions but
there are exceptions where the end functions do an additional ic_ack()
as shown above.
Wolfgang.
[-- Attachment #2: xenomai-2.1-end-irq.patch --]
[-- Type: text/x-patch, Size: 3194 bytes --]
+ diff -u xenomai/include/asm-generic/hal.h.IRQEND xenomai/include/asm-generic/hal.h
--- xenomai/include/asm-generic/hal.h.IRQEND 2006-01-11 18:03:34.000000000 +0100
+++ xenomai/include/asm-generic/hal.h 2006-01-19 20:52:40.000000000 +0100
@@ -357,6 +357,8 @@
int rthal_irq_disable(unsigned irq);
+int rthal_irq_end(unsigned irq);
+
int rthal_irq_host_request(unsigned irq,
irqreturn_t (*handler)(int irq,
void *dev_id,
+ diff -u xenomai/include/asm-generic/system.h.IRQEND xenomai/include/asm-generic/system.h
--- xenomai/include/asm-generic/system.h.IRQEND 2006-01-11 18:03:34.000000000 +0100
+++ xenomai/include/asm-generic/system.h 2006-01-19 20:50:17.000000000 +0100
@@ -496,6 +496,12 @@
return rthal_irq_disable(irq);
}
+static inline int xnarch_end_irq (unsigned irq)
+
+{
+ return rthal_irq_end(irq);
+}
+
static inline void xnarch_chain_irq (unsigned irq)
{
+ diff -u xenomai/include/asm-uvm/system.h.IRQEND xenomai/include/asm-uvm/system.h
--- xenomai/include/asm-uvm/system.h.IRQEND 2006-01-11 18:03:34.000000000 +0100
+++ xenomai/include/asm-uvm/system.h 2006-01-19 20:51:36.000000000 +0100
@@ -296,6 +296,13 @@
return -ENOSYS;
}
+static inline int xnarch_end_irq (unsigned irq)
+
+{
+ return -ENOSYS;
+}
+
+
static inline void xnarch_chain_irq (unsigned irq)
{ /* Nop */ }
+ diff -u xenomai/ksrc/arch/generic/hal.c.IRQEND xenomai/ksrc/arch/generic/hal.c
--- xenomai/ksrc/arch/generic/hal.c.IRQEND 2006-01-11 18:03:42.000000000 +0100
+++ xenomai/ksrc/arch/generic/hal.c 2006-01-19 20:54:06.000000000 +0100
@@ -1156,6 +1156,7 @@
EXPORT_SYMBOL(rthal_irq_release);
EXPORT_SYMBOL(rthal_irq_enable);
EXPORT_SYMBOL(rthal_irq_disable);
+EXPORT_SYMBOL(rthal_irq_end);
EXPORT_SYMBOL(rthal_irq_host_request);
EXPORT_SYMBOL(rthal_irq_host_release);
EXPORT_SYMBOL(rthal_irq_host_pend);
+ diff -u xenomai/ksrc/arch/powerpc/hal.c.IRQEND xenomai/ksrc/arch/powerpc/hal.c
--- xenomai/ksrc/arch/powerpc/hal.c.IRQEND 2006-01-11 18:03:41.000000000 +0100
+++ xenomai/ksrc/arch/powerpc/hal.c 2006-01-19 21:56:19.000000000 +0100
@@ -356,6 +356,27 @@
return 0;
}
+int rthal_irq_end (unsigned irq)
+
+{
+ if (irq >= IPIPE_NR_XIRQS)
+ return -EINVAL;
+
+ if (rthal_irq_descp(irq)->handler != NULL)
+ {
+ if (rthal_irq_descp(irq)->handler->end != NULL)
+ rthal_irq_descp(irq)->handler->end(irq);
+ else if (rthal_irq_descp(irq)->handler->enable != NULL)
+ rthal_irq_descp(irq)->handler->enable(irq);
+ else
+ return -ENODEV;
+ }
+ else
+ return -ENODEV;
+
+ return 0;
+}
+
static inline int do_exception_event (unsigned event, unsigned domid, void *data)
{
+ diff -u xenomai/ksrc/nucleus/intr.c.IRQEND xenomai/ksrc/nucleus/intr.c
--- xenomai/ksrc/nucleus/intr.c.IRQEND 2006-01-11 18:03:42.000000000 +0100
+++ xenomai/ksrc/nucleus/intr.c 2006-01-19 20:42:53.000000000 +0100
@@ -363,7 +363,7 @@
++intr->hits;
if (s & XN_ISR_ENABLE)
- xnarch_enable_irq(irq);
+ xnarch_end_irq(irq);
if (s & XN_ISR_CHAINED)
xnarch_chain_irq(irq);
^ permalink raw reply [flat|nested] 16+ messages in thread* Re: [Xenomai-core] Missing IRQ end function on PowerPC
2006-01-24 10:20 ` Wolfgang Grandegger
@ 2006-02-02 12:52 ` Philippe Gerum
0 siblings, 0 replies; 16+ messages in thread
From: Philippe Gerum @ 2006-02-02 12:52 UTC (permalink / raw)
To: Wolfgang Grandegger; +Cc: xenomai
Wolfgang Grandegger wrote:
> Gilles Chanteperdrix wrote:
>
>> Wolfgang Grandegger wrote:
>> > Therefore we need a dedicated function to re-enable interrupts in
>> the > ISR. We could name it *_end_irq, but maybe *_enable_isr_irq is
>> more > obvious. On non-PPC archs it would translate to *_irq_enable.
>> I > realized, that *_irq_enable is used in various place/skins and
>> therefore > I have not yet provided a patch.
>>
>> The function xnarch_irq_enable seems to be called in only two functions,
>> xintr_enable and xnintr_irq_handler when the flag XN_ISR_ENABLE is set.
>>
>> In any case, since I am not sure if this has to be done at the Adeos
>> level or in Xenomai, we will wait for Philippe to come back and decide.
>
>
> Attached is a temporary Xenomai patch fixing the IRQ end problem for the
> PowerPC arch. I had a closer look to the various IRQ end functions on
> PowerPC:
Applied and generalized for all archs, thanks.
>
> ic_end(unsigned int irq)
> {
> ic_ack(irq);
> if (!(irq_desc[irq].status & (IRQ_DISABLED | IRQ_INPROGRESS))) {
> ic_enable(irq);
> }
> }
>
> In most cases the end functions do the same than the begin functions but
> there are exceptions where the end functions do an additional ic_ack()
> as shown above.
>
> Wolfgang.
>
>
>
> ------------------------------------------------------------------------
>
> + diff -u xenomai/include/asm-generic/hal.h.IRQEND xenomai/include/asm-generic/hal.h
> --- xenomai/include/asm-generic/hal.h.IRQEND 2006-01-11 18:03:34.000000000 +0100
> +++ xenomai/include/asm-generic/hal.h 2006-01-19 20:52:40.000000000 +0100
> @@ -357,6 +357,8 @@
>
> int rthal_irq_disable(unsigned irq);
>
> +int rthal_irq_end(unsigned irq);
> +
> int rthal_irq_host_request(unsigned irq,
> irqreturn_t (*handler)(int irq,
> void *dev_id,
> + diff -u xenomai/include/asm-generic/system.h.IRQEND xenomai/include/asm-generic/system.h
> --- xenomai/include/asm-generic/system.h.IRQEND 2006-01-11 18:03:34.000000000 +0100
> +++ xenomai/include/asm-generic/system.h 2006-01-19 20:50:17.000000000 +0100
> @@ -496,6 +496,12 @@
> return rthal_irq_disable(irq);
> }
>
> +static inline int xnarch_end_irq (unsigned irq)
> +
> +{
> + return rthal_irq_end(irq);
> +}
> +
> static inline void xnarch_chain_irq (unsigned irq)
>
> {
> + diff -u xenomai/include/asm-uvm/system.h.IRQEND xenomai/include/asm-uvm/system.h
> --- xenomai/include/asm-uvm/system.h.IRQEND 2006-01-11 18:03:34.000000000 +0100
> +++ xenomai/include/asm-uvm/system.h 2006-01-19 20:51:36.000000000 +0100
> @@ -296,6 +296,13 @@
> return -ENOSYS;
> }
>
> +static inline int xnarch_end_irq (unsigned irq)
> +
> +{
> + return -ENOSYS;
> +}
> +
> +
> static inline void xnarch_chain_irq (unsigned irq)
>
> { /* Nop */ }
> + diff -u xenomai/ksrc/arch/generic/hal.c.IRQEND xenomai/ksrc/arch/generic/hal.c
> --- xenomai/ksrc/arch/generic/hal.c.IRQEND 2006-01-11 18:03:42.000000000 +0100
> +++ xenomai/ksrc/arch/generic/hal.c 2006-01-19 20:54:06.000000000 +0100
> @@ -1156,6 +1156,7 @@
> EXPORT_SYMBOL(rthal_irq_release);
> EXPORT_SYMBOL(rthal_irq_enable);
> EXPORT_SYMBOL(rthal_irq_disable);
> +EXPORT_SYMBOL(rthal_irq_end);
> EXPORT_SYMBOL(rthal_irq_host_request);
> EXPORT_SYMBOL(rthal_irq_host_release);
> EXPORT_SYMBOL(rthal_irq_host_pend);
> + diff -u xenomai/ksrc/arch/powerpc/hal.c.IRQEND xenomai/ksrc/arch/powerpc/hal.c
> --- xenomai/ksrc/arch/powerpc/hal.c.IRQEND 2006-01-11 18:03:41.000000000 +0100
> +++ xenomai/ksrc/arch/powerpc/hal.c 2006-01-19 21:56:19.000000000 +0100
> @@ -356,6 +356,27 @@
> return 0;
> }
>
> +int rthal_irq_end (unsigned irq)
> +
> +{
> + if (irq >= IPIPE_NR_XIRQS)
> + return -EINVAL;
> +
> + if (rthal_irq_descp(irq)->handler != NULL)
> + {
> + if (rthal_irq_descp(irq)->handler->end != NULL)
> + rthal_irq_descp(irq)->handler->end(irq);
> + else if (rthal_irq_descp(irq)->handler->enable != NULL)
> + rthal_irq_descp(irq)->handler->enable(irq);
> + else
> + return -ENODEV;
> + }
> + else
> + return -ENODEV;
> +
> + return 0;
> +}
> +
> static inline int do_exception_event (unsigned event, unsigned domid, void *data)
>
> {
> + diff -u xenomai/ksrc/nucleus/intr.c.IRQEND xenomai/ksrc/nucleus/intr.c
> --- xenomai/ksrc/nucleus/intr.c.IRQEND 2006-01-11 18:03:42.000000000 +0100
> +++ xenomai/ksrc/nucleus/intr.c 2006-01-19 20:42:53.000000000 +0100
> @@ -363,7 +363,7 @@
> ++intr->hits;
>
> if (s & XN_ISR_ENABLE)
> - xnarch_enable_irq(irq);
> + xnarch_end_irq(irq);
>
> if (s & XN_ISR_CHAINED)
> xnarch_chain_irq(irq);
>
>
> ------------------------------------------------------------------------
>
> _______________________________________________
> Xenomai-core mailing list
> Xenomai-core@domain.hid
> https://mail.gna.org/listinfo/xenomai-core
--
Philippe.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Xenomai-core] Missing IRQ end function on PowerPC
2006-01-19 13:27 ` Gilles Chanteperdrix
2006-01-19 13:40 ` Wolfgang Grandegger
2006-01-24 10:20 ` Wolfgang Grandegger
@ 2006-01-29 22:56 ` Philippe Gerum
2006-01-30 8:16 ` Jan Kiszka
2 siblings, 1 reply; 16+ messages in thread
From: Philippe Gerum @ 2006-01-29 22:56 UTC (permalink / raw)
To: Gilles Chanteperdrix; +Cc: Jan Kiszka, xenomai
Gilles Chanteperdrix wrote:
> Wolfgang Grandegger wrote:
> > Therefore we need a dedicated function to re-enable interrupts in the
> > ISR. We could name it *_end_irq, but maybe *_enable_isr_irq is more
> > obvious. On non-PPC archs it would translate to *_irq_enable. I
> > realized, that *_irq_enable is used in various place/skins and therefore
> > I have not yet provided a patch.
>
> The function xnarch_irq_enable seems to be called in only two functions,
> xintr_enable and xnintr_irq_handler when the flag XN_ISR_ENABLE is set.
>
> In any case, since I am not sure if this has to be done at the Adeos
> level or in Xenomai, we will wait for Philippe to come back and decide.
>
->enable() and ->end() all mixed up illustrates a silly x86 bias I once had. We do
need to differentiate the mere enabling from the IRQ epilogue at PIC level since
Linux does it - i.e. we don't want to change the semantics here.
I would go for adding xnarch_end_irq -> rthal_irq_end to stick with the Linux
naming scheme, and have the proper epilogue done from there on a per-arch basis.
Current uses of xnarch_enable_irq() should be reserved to the non-epilogue case,
like xnintr_enable() i.e. forcibly unmasking the IRQ source at PIC level outside
of any ISR context for such interrupt (*). XN_ISR_ENABLE would trigger a call to
xnarch_end_irq, instead of xnarch_enable_irq. I see no reason for this fix to leak
to the Adeos layer, since the HAL already controls the way interrupts are ended
actually; it just does it improperly on some platforms.
(*) Jan, does rtdm_irq_enable() have the same meaning, or is it intended to be
used from the ISR too in order to revalidate the source at PIC level?
--
Philippe.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Xenomai-core] Missing IRQ end function on PowerPC
2006-01-29 22:56 ` Philippe Gerum
@ 2006-01-30 8:16 ` Jan Kiszka
2006-01-30 10:00 ` Philippe Gerum
0 siblings, 1 reply; 16+ messages in thread
From: Jan Kiszka @ 2006-01-30 8:16 UTC (permalink / raw)
To: Philippe Gerum; +Cc: xenomai
[-- Attachment #1: Type: text/plain, Size: 1986 bytes --]
Philippe Gerum wrote:
> Gilles Chanteperdrix wrote:
>> Wolfgang Grandegger wrote:
>> > Therefore we need a dedicated function to re-enable interrupts in
>> the > ISR. We could name it *_end_irq, but maybe *_enable_isr_irq is
>> more > obvious. On non-PPC archs it would translate to *_irq_enable.
>> I > realized, that *_irq_enable is used in various place/skins and
>> therefore > I have not yet provided a patch.
>>
>> The function xnarch_irq_enable seems to be called in only two functions,
>> xintr_enable and xnintr_irq_handler when the flag XN_ISR_ENABLE is set.
>>
>> In any case, since I am not sure if this has to be done at the Adeos
>> level or in Xenomai, we will wait for Philippe to come back and decide.
>>
>
> ->enable() and ->end() all mixed up illustrates a silly x86 bias I once
> had. We do need to differentiate the mere enabling from the IRQ epilogue
> at PIC level since Linux does it - i.e. we don't want to change the
> semantics here.
>
> I would go for adding xnarch_end_irq -> rthal_irq_end to stick with the
> Linux naming scheme, and have the proper epilogue done from there on a
> per-arch basis.
>
> Current uses of xnarch_enable_irq() should be reserved to the
> non-epilogue case, like xnintr_enable() i.e. forcibly unmasking the IRQ
> source at PIC level outside of any ISR context for such interrupt (*).
> XN_ISR_ENABLE would trigger a call to xnarch_end_irq, instead of
> xnarch_enable_irq. I see no reason for this fix to leak to the Adeos
> layer, since the HAL already controls the way interrupts are ended
> actually; it just does it improperly on some platforms.
>
> (*) Jan, does rtdm_irq_enable() have the same meaning, or is it intended
> to be used from the ISR too in order to revalidate the source at PIC level?
>
Nope, rtdm_irq_enable() was never intended to re-enable an IRQ line
after an interrupt, and the documentation does not suggest this either.
I see no problem here.
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 250 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Xenomai-core] Missing IRQ end function on PowerPC
2006-01-30 8:16 ` Jan Kiszka
@ 2006-01-30 10:00 ` Philippe Gerum
0 siblings, 0 replies; 16+ messages in thread
From: Philippe Gerum @ 2006-01-30 10:00 UTC (permalink / raw)
To: Jan Kiszka; +Cc: xenomai
Jan Kiszka wrote:
> Philippe Gerum wrote:
>
>>Gilles Chanteperdrix wrote:
>>
>>>Wolfgang Grandegger wrote:
>>> > Therefore we need a dedicated function to re-enable interrupts in
>>>the > ISR. We could name it *_end_irq, but maybe *_enable_isr_irq is
>>>more > obvious. On non-PPC archs it would translate to *_irq_enable.
>>>I > realized, that *_irq_enable is used in various place/skins and
>>>therefore > I have not yet provided a patch.
>>>
>>>The function xnarch_irq_enable seems to be called in only two functions,
>>>xintr_enable and xnintr_irq_handler when the flag XN_ISR_ENABLE is set.
>>>
>>>In any case, since I am not sure if this has to be done at the Adeos
>>>level or in Xenomai, we will wait for Philippe to come back and decide.
>>>
>>
>>->enable() and ->end() all mixed up illustrates a silly x86 bias I once
>>had. We do need to differentiate the mere enabling from the IRQ epilogue
>>at PIC level since Linux does it - i.e. we don't want to change the
>>semantics here.
>>
>>I would go for adding xnarch_end_irq -> rthal_irq_end to stick with the
>>Linux naming scheme, and have the proper epilogue done from there on a
>>per-arch basis.
>>
>>Current uses of xnarch_enable_irq() should be reserved to the
>>non-epilogue case, like xnintr_enable() i.e. forcibly unmasking the IRQ
>>source at PIC level outside of any ISR context for such interrupt (*).
>>XN_ISR_ENABLE would trigger a call to xnarch_end_irq, instead of
>>xnarch_enable_irq. I see no reason for this fix to leak to the Adeos
>>layer, since the HAL already controls the way interrupts are ended
>>actually; it just does it improperly on some platforms.
>>
>>(*) Jan, does rtdm_irq_enable() have the same meaning, or is it intended
>>to be used from the ISR too in order to revalidate the source at PIC level?
>>
>
>
> Nope, rtdm_irq_enable() was never intended to re-enable an IRQ line
> after an interrupt, and the documentation does not suggest this either.
> I see no problem here.
>
Ok, so no change would be needed here to implement what's described above.
> Jan
>
--
Philippe.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Xenomai-core] Missing IRQ end function on PowerPC
@ 2006-01-30 8:33 Wolfgang Grandegger
2006-01-30 9:20 ` Jan Kiszka
0 siblings, 1 reply; 16+ messages in thread
From: Wolfgang Grandegger @ 2006-01-30 8:33 UTC (permalink / raw)
To: Jan Kiszka, Philippe Gerum, Gilles Chanteperdrix,
Wolfgang Grandegger, xenomai
> This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
>
> Philippe Gerum wrote:
> > Gilles Chanteperdrix wrote:
> >> Wolfgang Grandegger wrote:
> >> > Therefore we need a dedicated function to re-enable interrupts in
> >> the > ISR. We could name it *_end_irq, but maybe *_enable_isr_irq is
> >> more > obvious. On non-PPC archs it would translate to *_irq_enable.
> >> I > realized, that *_irq_enable is used in various place/skins and
> >> therefore > I have not yet provided a patch.
> >>
> >> The function xnarch_irq_enable seems to be called in only two
functions,
> >> xintr_enable and xnintr_irq_handler when the flag XN_ISR_ENABLE is set.
> >>
> >> In any case, since I am not sure if this has to be done at the Adeos
> >> level or in Xenomai, we will wait for Philippe to come back and decide.
> >>
> >
> > ->enable() and ->end() all mixed up illustrates a silly x86 bias I once
> > had. We do need to differentiate the mere enabling from the IRQ epilogue
> > at PIC level since Linux does it - i.e. we don't want to change the
> > semantics here.
> >
> > I would go for adding xnarch_end_irq -> rthal_irq_end to stick with the
> > Linux naming scheme, and have the proper epilogue done from there on a
> > per-arch basis.
> >
> > Current uses of xnarch_enable_irq() should be reserved to the
> > non-epilogue case, like xnintr_enable() i.e. forcibly unmasking the IRQ
> > source at PIC level outside of any ISR context for such interrupt (*).
> > XN_ISR_ENABLE would trigger a call to xnarch_end_irq, instead of
> > xnarch_enable_irq. I see no reason for this fix to leak to the Adeos
> > layer, since the HAL already controls the way interrupts are ended
> > actually; it just does it improperly on some platforms.
> >
> > (*) Jan, does rtdm_irq_enable() have the same meaning, or is it intended
> > to be used from the ISR too in order to revalidate the source at PIC
level?
> >
>
> Nope, rtdm_irq_enable() was never intended to re-enable an IRQ line
> after an interrupt, and the documentation does not suggest this either.
> I see no problem here.
But RTDM needs a rtdm_irq_end() functions as well in case the
user wants to reenable the interrupt outside the ISR, I think.
Wolfgang.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Xenomai-core] Missing IRQ end function on PowerPC
2006-01-30 8:33 Wolfgang Grandegger
@ 2006-01-30 9:20 ` Jan Kiszka
2006-01-30 9:58 ` Philippe Gerum
0 siblings, 1 reply; 16+ messages in thread
From: Jan Kiszka @ 2006-01-30 9:20 UTC (permalink / raw)
To: Wolfgang Grandegger; +Cc: xenomai
[-- Attachment #1: Type: text/plain, Size: 2614 bytes --]
Wolfgang Grandegger wrote:
>
>> This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
>>
>> Philippe Gerum wrote:
>>> Gilles Chanteperdrix wrote:
>>>> Wolfgang Grandegger wrote:
>>>> > Therefore we need a dedicated function to re-enable interrupts in
>>>> the > ISR. We could name it *_end_irq, but maybe *_enable_isr_irq is
>>>> more > obvious. On non-PPC archs it would translate to *_irq_enable.
>>>> I > realized, that *_irq_enable is used in various place/skins and
>>>> therefore > I have not yet provided a patch.
>>>>
>>>> The function xnarch_irq_enable seems to be called in only two
> functions,
>>>> xintr_enable and xnintr_irq_handler when the flag XN_ISR_ENABLE is set.
>>>>
>>>> In any case, since I am not sure if this has to be done at the Adeos
>>>> level or in Xenomai, we will wait for Philippe to come back and decide.
>>>>
>>> ->enable() and ->end() all mixed up illustrates a silly x86 bias I once
>>> had. We do need to differentiate the mere enabling from the IRQ epilogue
>>> at PIC level since Linux does it - i.e. we don't want to change the
>>> semantics here.
>>>
>>> I would go for adding xnarch_end_irq -> rthal_irq_end to stick with the
>>> Linux naming scheme, and have the proper epilogue done from there on a
>>> per-arch basis.
>>>
>>> Current uses of xnarch_enable_irq() should be reserved to the
>>> non-epilogue case, like xnintr_enable() i.e. forcibly unmasking the IRQ
>>> source at PIC level outside of any ISR context for such interrupt (*).
>>> XN_ISR_ENABLE would trigger a call to xnarch_end_irq, instead of
>>> xnarch_enable_irq. I see no reason for this fix to leak to the Adeos
>>> layer, since the HAL already controls the way interrupts are ended
>>> actually; it just does it improperly on some platforms.
>>>
>>> (*) Jan, does rtdm_irq_enable() have the same meaning, or is it intended
>>> to be used from the ISR too in order to revalidate the source at PIC
> level?
>> Nope, rtdm_irq_enable() was never intended to re-enable an IRQ line
>> after an interrupt, and the documentation does not suggest this either.
>> I see no problem here.
>
> But RTDM needs a rtdm_irq_end() functions as well in case the
> user wants to reenable the interrupt outside the ISR, I think.
If this is a valid use-case, it should be really straightforward to add
this abstraction to RTDM. We should just document that rtdm_irq_end()
shall not be invoked from IRQ context - to avoid breaking the chain in
the shared-IRQ scenario. RTDM_IRQ_ENABLE must remain the way to
re-enable the line from the handler.
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 250 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Xenomai-core] Missing IRQ end function on PowerPC
2006-01-30 9:20 ` Jan Kiszka
@ 2006-01-30 9:58 ` Philippe Gerum
2006-01-30 10:12 ` Jan Kiszka
0 siblings, 1 reply; 16+ messages in thread
From: Philippe Gerum @ 2006-01-30 9:58 UTC (permalink / raw)
To: Jan Kiszka; +Cc: xenomai
Jan Kiszka wrote:
> Wolfgang Grandegger wrote:
>
>>>This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
>>>
>>>Philippe Gerum wrote:
>>>
>>>>Gilles Chanteperdrix wrote:
>>>>
>>>>>Wolfgang Grandegger wrote:
>>>>> > Therefore we need a dedicated function to re-enable interrupts in
>>>>>the > ISR. We could name it *_end_irq, but maybe *_enable_isr_irq is
>>>>>more > obvious. On non-PPC archs it would translate to *_irq_enable.
>>>>>I > realized, that *_irq_enable is used in various place/skins and
>>>>>therefore > I have not yet provided a patch.
>>>>>
>>>>>The function xnarch_irq_enable seems to be called in only two
>>
>>functions,
>>
>>>>>xintr_enable and xnintr_irq_handler when the flag XN_ISR_ENABLE is set.
>>>>>
>>>>>In any case, since I am not sure if this has to be done at the Adeos
>>>>>level or in Xenomai, we will wait for Philippe to come back and decide.
>>>>>
>>>>
>>>>->enable() and ->end() all mixed up illustrates a silly x86 bias I once
>>>>had. We do need to differentiate the mere enabling from the IRQ epilogue
>>>>at PIC level since Linux does it - i.e. we don't want to change the
>>>>semantics here.
>>>>
>>>>I would go for adding xnarch_end_irq -> rthal_irq_end to stick with the
>>>>Linux naming scheme, and have the proper epilogue done from there on a
>>>>per-arch basis.
>>>>
>>>>Current uses of xnarch_enable_irq() should be reserved to the
>>>>non-epilogue case, like xnintr_enable() i.e. forcibly unmasking the IRQ
>>>>source at PIC level outside of any ISR context for such interrupt (*).
>>>>XN_ISR_ENABLE would trigger a call to xnarch_end_irq, instead of
>>>>xnarch_enable_irq. I see no reason for this fix to leak to the Adeos
>>>>layer, since the HAL already controls the way interrupts are ended
>>>>actually; it just does it improperly on some platforms.
>>>>
>>>>(*) Jan, does rtdm_irq_enable() have the same meaning, or is it intended
>>>>to be used from the ISR too in order to revalidate the source at PIC
>>
>>level?
>>
>>>Nope, rtdm_irq_enable() was never intended to re-enable an IRQ line
>>>after an interrupt, and the documentation does not suggest this either.
>>>I see no problem here.
>>
>>But RTDM needs a rtdm_irq_end() functions as well in case the
>>user wants to reenable the interrupt outside the ISR, I think.
>
>
> If this is a valid use-case, it should be really straightforward to add
> this abstraction to RTDM. We should just document that rtdm_irq_end()
> shall not be invoked from IRQ context -
It's the other way around: ->end() would indeed be called from the ISR epilogue,
and ->enable() would not.
to avoid breaking the chain in
> the shared-IRQ scenario. RTDM_IRQ_ENABLE must remain the way to
> re-enable the line from the handler.
>
> Jan
>
>
--
Philippe.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Xenomai-core] Missing IRQ end function on PowerPC
2006-01-30 9:58 ` Philippe Gerum
@ 2006-01-30 10:12 ` Jan Kiszka
2006-01-30 11:13 ` Philippe Gerum
0 siblings, 1 reply; 16+ messages in thread
From: Jan Kiszka @ 2006-01-30 10:12 UTC (permalink / raw)
To: Philippe Gerum; +Cc: xenomai
[-- Attachment #1: Type: text/plain, Size: 3442 bytes --]
Philippe Gerum wrote:
> Jan Kiszka wrote:
>> Wolfgang Grandegger wrote:
>>
>>>> This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
>>>>
>>>> Philippe Gerum wrote:
>>>>
>>>>> Gilles Chanteperdrix wrote:
>>>>>
>>>>>> Wolfgang Grandegger wrote:
>>>>>> > Therefore we need a dedicated function to re-enable interrupts in
>>>>>> the > ISR. We could name it *_end_irq, but maybe *_enable_isr_irq is
>>>>>> more > obvious. On non-PPC archs it would translate to *_irq_enable.
>>>>>> I > realized, that *_irq_enable is used in various place/skins and
>>>>>> therefore > I have not yet provided a patch.
>>>>>>
>>>>>> The function xnarch_irq_enable seems to be called in only two
>>>
>>> functions,
>>>
>>>>>> xintr_enable and xnintr_irq_handler when the flag XN_ISR_ENABLE is
>>>>>> set.
>>>>>>
>>>>>> In any case, since I am not sure if this has to be done at the Adeos
>>>>>> level or in Xenomai, we will wait for Philippe to come back and
>>>>>> decide.
>>>>>>
>>>>>
>>>>> ->enable() and ->end() all mixed up illustrates a silly x86 bias I
>>>>> once
>>>>> had. We do need to differentiate the mere enabling from the IRQ
>>>>> epilogue
>>>>> at PIC level since Linux does it - i.e. we don't want to change the
>>>>> semantics here.
>>>>>
>>>>> I would go for adding xnarch_end_irq -> rthal_irq_end to stick with
>>>>> the
>>>>> Linux naming scheme, and have the proper epilogue done from there on a
>>>>> per-arch basis.
>>>>>
>>>>> Current uses of xnarch_enable_irq() should be reserved to the
>>>>> non-epilogue case, like xnintr_enable() i.e. forcibly unmasking the
>>>>> IRQ
>>>>> source at PIC level outside of any ISR context for such interrupt (*).
>>>>> XN_ISR_ENABLE would trigger a call to xnarch_end_irq, instead of
>>>>> xnarch_enable_irq. I see no reason for this fix to leak to the Adeos
>>>>> layer, since the HAL already controls the way interrupts are ended
>>>>> actually; it just does it improperly on some platforms.
>>>>>
>>>>> (*) Jan, does rtdm_irq_enable() have the same meaning, or is it
>>>>> intended
>>>>> to be used from the ISR too in order to revalidate the source at PIC
>>>
>>> level?
>>>
>>>> Nope, rtdm_irq_enable() was never intended to re-enable an IRQ line
>>>> after an interrupt, and the documentation does not suggest this either.
>>>> I see no problem here.
>>>
>>> But RTDM needs a rtdm_irq_end() functions as well in case the
>>> user wants to reenable the interrupt outside the ISR, I think.
>>
>>
>> If this is a valid use-case, it should be really straightforward to add
>> this abstraction to RTDM. We should just document that rtdm_irq_end()
>> shall not be invoked from IRQ context -
>
> It's the other way around: ->end() would indeed be called from the ISR
> epilogue, and ->enable() would not.
I think we are talking about different things: Wolfgang was asking for
an equivalent of RTDM_IRQ_ENABLE outside the IRQ handler. That's the
user API. You are now referring to the back-end which had to provide
some end-mechanism to be used both by the nucleus' ISR epilogue and that
rtdm_irq_end(), and that mechanism shall be told apart from the IRQ
enable/disable API. Well, that's at least how I think to have got it...
>
> to avoid breaking the chain in
>> the shared-IRQ scenario. RTDM_IRQ_ENABLE must remain the way to
>> re-enable the line from the handler.
>>
>> Jan
>>
>>
>
>
Jan
[-- Attachment #2: OpenPGP digital signature --]
[-- Type: application/pgp-signature, Size: 250 bytes --]
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Xenomai-core] Missing IRQ end function on PowerPC
2006-01-30 10:12 ` Jan Kiszka
@ 2006-01-30 11:13 ` Philippe Gerum
0 siblings, 0 replies; 16+ messages in thread
From: Philippe Gerum @ 2006-01-30 11:13 UTC (permalink / raw)
To: Jan Kiszka; +Cc: xenomai
Jan Kiszka wrote:
> Philippe Gerum wrote:
>
>>Jan Kiszka wrote:
>>
>>>Wolfgang Grandegger wrote:
>>>
>>>
>>>>>This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
>>>>>
>>>>>Philippe Gerum wrote:
>>>>>
>>>>>
>>>>>>Gilles Chanteperdrix wrote:
>>>>>>
>>>>>>
>>>>>>>Wolfgang Grandegger wrote:
>>>>>>>
>>>>>>>>Therefore we need a dedicated function to re-enable interrupts in
>>>>>>>
>>>>>>>the > ISR. We could name it *_end_irq, but maybe *_enable_isr_irq is
>>>>>>>more > obvious. On non-PPC archs it would translate to *_irq_enable.
>>>>>>>I > realized, that *_irq_enable is used in various place/skins and
>>>>>>>therefore > I have not yet provided a patch.
>>>>>>>
>>>>>>>The function xnarch_irq_enable seems to be called in only two
>>>>
>>>>functions,
>>>>
>>>>
>>>>>>>xintr_enable and xnintr_irq_handler when the flag XN_ISR_ENABLE is
>>>>>>>set.
>>>>>>>
>>>>>>>In any case, since I am not sure if this has to be done at the Adeos
>>>>>>>level or in Xenomai, we will wait for Philippe to come back and
>>>>>>>decide.
>>>>>>>
>>>>>>
>>>>>>->enable() and ->end() all mixed up illustrates a silly x86 bias I
>>>>>>once
>>>>>>had. We do need to differentiate the mere enabling from the IRQ
>>>>>>epilogue
>>>>>>at PIC level since Linux does it - i.e. we don't want to change the
>>>>>>semantics here.
>>>>>>
>>>>>>I would go for adding xnarch_end_irq -> rthal_irq_end to stick with
>>>>>>the
>>>>>>Linux naming scheme, and have the proper epilogue done from there on a
>>>>>>per-arch basis.
>>>>>>
>>>>>>Current uses of xnarch_enable_irq() should be reserved to the
>>>>>>non-epilogue case, like xnintr_enable() i.e. forcibly unmasking the
>>>>>>IRQ
>>>>>>source at PIC level outside of any ISR context for such interrupt (*).
>>>>>>XN_ISR_ENABLE would trigger a call to xnarch_end_irq, instead of
>>>>>>xnarch_enable_irq. I see no reason for this fix to leak to the Adeos
>>>>>>layer, since the HAL already controls the way interrupts are ended
>>>>>>actually; it just does it improperly on some platforms.
>>>>>>
>>>>>>(*) Jan, does rtdm_irq_enable() have the same meaning, or is it
>>>>>>intended
>>>>>>to be used from the ISR too in order to revalidate the source at PIC
>>>>
>>>>level?
>>>>
>>>>
>>>>>Nope, rtdm_irq_enable() was never intended to re-enable an IRQ line
>>>>>after an interrupt, and the documentation does not suggest this either.
>>>>>I see no problem here.
>>>>
>>>>But RTDM needs a rtdm_irq_end() functions as well in case the
>>>>user wants to reenable the interrupt outside the ISR, I think.
>>>
>>>
>>>If this is a valid use-case, it should be really straightforward to add
>>>this abstraction to RTDM. We should just document that rtdm_irq_end()
>>>shall not be invoked from IRQ context -
>>
>>It's the other way around: ->end() would indeed be called from the ISR
>>epilogue, and ->enable() would not.
>
>
> I think we are talking about different things: Wolfgang was asking for
> an equivalent of RTDM_IRQ_ENABLE outside the IRQ handler. That's the
> user API. You are now referring to the back-end which had to provide
> some end-mechanism to be used both by the nucleus' ISR epilogue and that
> rtdm_irq_end(), and that mechanism shall be told apart from the IRQ
> enable/disable API. Well, that's at least how I think to have got it...
>
My point was only about naming here: *_end() should be reserved for the epilogue
stuff, hence be callable from ISR context. Aside of that, I'm ok with the
abstraction you described though.
>
>> to avoid breaking the chain in
>>
>>>the shared-IRQ scenario. RTDM_IRQ_ENABLE must remain the way to
>>>re-enable the line from the handler.
>>>
>>>Jan
>>>
>>>
>>
>>
>
> Jan
>
--
Philippe.
^ permalink raw reply [flat|nested] 16+ messages in thread
* Re: [Xenomai-core] Missing IRQ end function on PowerPC
@ 2006-01-30 11:09 Wolfgang Grandegger
0 siblings, 0 replies; 16+ messages in thread
From: Wolfgang Grandegger @ 2006-01-30 11:09 UTC (permalink / raw)
To: Jan Kiszka, Philippe Gerum, xenomai
> This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
>
> Philippe Gerum wrote:
> > Jan Kiszka wrote:
> >> Wolfgang Grandegger wrote:
> >>
> >>>> This is an OpenPGP/MIME signed message (RFC 2440 and 3156)
> >>>>
> >>>> Philippe Gerum wrote:
> >>>>
> >>>>> Gilles Chanteperdrix wrote:
> >>>>>
> >>>>>> Wolfgang Grandegger wrote:
> >>>>>> > Therefore we need a dedicated function to re-enable interrupts in
> >>>>>> the > ISR. We could name it *_end_irq, but maybe
*_enable_isr_irq is
> >>>>>> more > obvious. On non-PPC archs it would translate to
*_irq_enable.
> >>>>>> I > realized, that *_irq_enable is used in various place/skins and
> >>>>>> therefore > I have not yet provided a patch.
> >>>>>>
> >>>>>> The function xnarch_irq_enable seems to be called in only two
> >>>
> >>> functions,
> >>>
> >>>>>> xintr_enable and xnintr_irq_handler when the flag XN_ISR_ENABLE is
> >>>>>> set.
> >>>>>>
> >>>>>> In any case, since I am not sure if this has to be done at the
Adeos
> >>>>>> level or in Xenomai, we will wait for Philippe to come back and
> >>>>>> decide.
> >>>>>>
> >>>>>
> >>>>> ->enable() and ->end() all mixed up illustrates a silly x86 bias I
> >>>>> once
> >>>>> had. We do need to differentiate the mere enabling from the IRQ
> >>>>> epilogue
> >>>>> at PIC level since Linux does it - i.e. we don't want to change the
> >>>>> semantics here.
> >>>>>
> >>>>> I would go for adding xnarch_end_irq -> rthal_irq_end to stick with
> >>>>> the
> >>>>> Linux naming scheme, and have the proper epilogue done from
there on a
> >>>>> per-arch basis.
> >>>>>
> >>>>> Current uses of xnarch_enable_irq() should be reserved to the
> >>>>> non-epilogue case, like xnintr_enable() i.e. forcibly unmasking the
> >>>>> IRQ
> >>>>> source at PIC level outside of any ISR context for such
interrupt (*).
> >>>>> XN_ISR_ENABLE would trigger a call to xnarch_end_irq, instead of
> >>>>> xnarch_enable_irq. I see no reason for this fix to leak to the Adeos
> >>>>> layer, since the HAL already controls the way interrupts are ended
> >>>>> actually; it just does it improperly on some platforms.
> >>>>>
> >>>>> (*) Jan, does rtdm_irq_enable() have the same meaning, or is it
> >>>>> intended
> >>>>> to be used from the ISR too in order to revalidate the source at PIC
> >>>
> >>> level?
> >>>
> >>>> Nope, rtdm_irq_enable() was never intended to re-enable an IRQ line
> >>>> after an interrupt, and the documentation does not suggest this
either.
> >>>> I see no problem here.
> >>>
> >>> But RTDM needs a rtdm_irq_end() functions as well in case the
> >>> user wants to reenable the interrupt outside the ISR, I think.
> >>
> >>
> >> If this is a valid use-case, it should be really straightforward to add
> >> this abstraction to RTDM. We should just document that rtdm_irq_end()
> >> shall not be invoked from IRQ context -
> >
> > It's the other way around: ->end() would indeed be called from the ISR
> > epilogue, and ->enable() would not.
>
> I think we are talking about different things: Wolfgang was asking for
> an equivalent of RTDM_IRQ_ENABLE outside the IRQ handler. That's the
> user API. You are now referring to the back-end which had to provide
> some end-mechanism to be used both by the nucleus' ISR epilogue and that
> rtdm_irq_end(), and that mechanism shall be told apart from the IRQ
> enable/disable API. Well, that's at least how I think to have got it...
Yep, I was thinking of deferred interrupt handling in a real-time task.
Then rtdm_irq_end() would be required.
> >
> > to avoid breaking the chain in
> >> the shared-IRQ scenario. RTDM_IRQ_ENABLE must remain the way to
> >> re-enable the line from the handler.
> >>
> >> Jan
> >>
> >>
> >
> >
>
> Jan
>
>
>
Wolfgang.
^ permalink raw reply [flat|nested] 16+ messages in thread
end of thread, other threads:[~2006-02-02 12:52 UTC | newest]
Thread overview: 16+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2006-01-18 10:44 [Xenomai-core] Missing IRQ end function on PowerPC Wolfgang Grandegger
2006-01-19 12:29 ` Gilles Chanteperdrix
2006-01-19 13:06 ` Wolfgang Grandegger
2006-01-19 13:27 ` Gilles Chanteperdrix
2006-01-19 13:40 ` Wolfgang Grandegger
2006-01-24 10:20 ` Wolfgang Grandegger
2006-02-02 12:52 ` Philippe Gerum
2006-01-29 22:56 ` Philippe Gerum
2006-01-30 8:16 ` Jan Kiszka
2006-01-30 10:00 ` Philippe Gerum
-- strict thread matches above, loose matches on Subject: below --
2006-01-30 8:33 Wolfgang Grandegger
2006-01-30 9:20 ` Jan Kiszka
2006-01-30 9:58 ` Philippe Gerum
2006-01-30 10:12 ` Jan Kiszka
2006-01-30 11:13 ` Philippe Gerum
2006-01-30 11:09 Wolfgang Grandegger
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.