On 2013-04-10 11:32, Philippe Gerum wrote:
> On 04/08/2013 11:09 PM, Gilles Chanteperdrix wrote:
>> On 04/06/2013 11:43 AM, Jan Kiszka wrote:
>>
>>> On 2013-04-02 23:44, Gilles Chanteperdrix wrote:
>>>> On 03/27/2013 02:30 PM, Jan Kiszka wrote:
>>>>
>>>>> I'm wondering now why we need this differently for the I-pipe case.
>>>>>
>>>>> Let's revisit what happens with a fasteoi normally:
>>>>>
>>>>> - it's masked only if it's a oneshot IRQ before calling the flow
>>>>> handler
>>>>> - it's unmasked after the flow handling if the thread was not woken up
>>>>>
>>>>> With I-pipe we already enter handle_fasteoi_irq with the IRQ
>>>>> masked. The
>>>>> conditions and spots to unmask are:
>>>>> - from handle_fasteoi_irq if the thread wasn't woken up or we have
>>>>> non-threaded or non-oneshot handling
>>>>> - otherwise on end_irq from the handler thread
>>>>>
>>>>> Do you think this is correct? If so, I do not think it matches this
>>>>> patch yet.
>>>>
>>>>
>>>> Hi,
>>>>
>>>> here is a much simpler patch:
>>>> diff --git a/kernel/irq/chip.c b/kernel/irq/chip.c
>>>> index 11e75d1..a1c9918 100644
>>>> --- a/kernel/irq/chip.c
>>>> +++ b/kernel/irq/chip.c
>>>> @@ -421,6 +421,13 @@ static inline void preflow_handler(struct
>>>> irq_desc *desc)
>>>> static inline void preflow_handler(struct irq_desc *desc) { }
>>>> #endif
>>>>
>>>> +static void cond_release_fasteoi_irq(struct irq_desc *desc)
>>>> +{
>>>> + if (desc->irq_data.chip->irq_release &&
>>>> + !irqd_irq_disabled(&desc->irq_data) && !desc->threads_oneshot)
>>>> + desc->irq_data.chip->irq_release(&desc->irq_data);
>>>> +}
>>>> +
>>>> /**
>>>> * handle_fasteoi_irq - irq handler for transparent controllers
>>>> * @irq: the interrupt number
>>>> @@ -463,8 +470,7 @@ handle_fasteoi_irq(unsigned int irq, struct
>>>> irq_desc *desc)
>>>>
>>>> #ifdef CONFIG_IPIPE
>>>> /* XXX: IRQCHIP_EOI_IF_HANDLED is ignored. */
>>>
>>> Makes me wonder what this comment wants to tell us. That there is an
>>> unhandled corner case or that this is intentionally ignored? I support
>>> the latter as I-pipe already does EOI when accepting the IRQ, no? Maybe
>>> you can clarify that line at this chance.
>>
>>
>> I have no idea where this comment come from. I do not think this flag
>> can be handled with the I-pipe kernel, as the EOI is sent before trying
>> to handle the IRQ. The only users are in arch/sparc and arch/powerpc,
>> maybe Philippe knows more?
>>
>
> Jan is right, we ignore EOI_IF_HANDLED and never send EOI from the
> regular flow handler, as a consequence of doing eoi+mask when holding
> the IRQ in the ipipe's flow handler.
OK, then I'll write a clarification patch for that comment - to get rid
of that triple X...
Jan
--
Siemens AG, Corporate Technology, CT RTC ITP SDP-DE
Corporate Competence Center Embedded Linux
_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai