On 09/17/2012 08:54 PM, Jan Kiszka wrote:

> On 2012-09-17 20:37, Gilles Chanteperdrix wrote:
>> On 09/17/2012 08:29 PM, Jan Kiszka wrote:
>>
>>> On 2012-09-17 20:18, Gilles Chanteperdrix wrote:
>>>> On 09/17/2012 08:15 PM, Jan Kiszka wrote:
>>>>
>>>>> On 2012-09-17 20:12, Jan Kiszka wrote:
>>>>>> On 2012-09-17 20:08, Gilles Chanteperdrix wrote:
>>>>>>> On 09/17/2012 08:05 PM, Jan Kiszka wrote:
>>>>>>>
>>>>>>>> On 2012-09-17 19:46, Gilles Chanteperdrix wrote:
>>>>>>>>> ipipe_end is a nop when called from primary domain, yes, but this is 
>>>>>>>>> not
>>>>>>>>> very different from edge irqs. Also, fasteoi become a bit like MSI: in
>>>>>>>>> the same way as we can not mask MSI from primary domain, we should not
>>>>>>>>> mask IO-APIC fasteoi irqs, because the cost is too prohibitive. If we
>>>>>>>>> can live with MSI without masking them in primary mode, I guess we can
>>>>>>>>> do the same with fasteoi irqs.
>>>>>>>>
>>>>>>>> MSIs are edge triggered, fasteois are still level-based. They require
>>>>>>>> masking at the point you defer them - what we do and what Linux may 
>>>>>>>> even
>>>>>>>> extend beyond that. If you mask them by raising the task priority, you
>>>>>>>> have to keep it raised until Linux finally handled the IRQ.
>>>>>>>
>>>>>>>
>>>>>>> Yes.
>>>>>>>
>>>>>>>> Or you
>>>>>>>> decide to mask it at IO-APIC level again.
>>>>>>>
>>>>>>>
>>>>>>> We do not want that.
>>>>>>>
>>>>>>>> If you keep the TPR raised,
>>>>>>>> you will block more than what Linux wants to block.
>>>>>>>
>>>>>>>
>>>>>>> The point is that if the TPR keeps raised, it means that primary domain
>>>>>>> has preempted Linux, so, we want it to keep that way. Otherwise the TPR
>>>>>>> gets lowered when Linux has handled the interrupt.
>>>>>>>
>>>>>>> A week-end of testing made me sure of one thing: it works. I assure you.
>>>>>>
>>>>>> Probably, in the absence of IRQF_ONESHOT Linux interrupts. No longer if
>>>>>> you face threaded IRQs - I assure you.
>>>>>
>>>>> Well, it may work (if mask/unmask callbacks work as native) but the
>>>>> benefit is gone: masking at IO-APIC level will be done again. Given that
>>>>> threaded IRQs become increasingly popular, it will also be hard to avoid
>>>>> them in common setups.
>>>>
>>>>
>>>> The thing is, if we no longer use the IO-APIC spinlock from primary
>>>> domain, we may not have to turn it into an ipipe_spinlock, and may be
>>>> able to preempt the IO-APIC masking.
>>>
>>> That might be true - but is the latency related to the lock or the
>>> hardware access? In the latter case, you will still stall the CPU on it
>>> and have to isolate the load on a non-RT CPU again.
>>>
>>> BTW, the task priority for the RT domain is a quite important parameter.
>>> If you put it too low, Linux can run out of vectors. If you put it too
>>> high, the same may happen to Xenomai - on bigger boxes.
>>
>>
>> Yes, and there are only 16 levels. But Xenomai does not need to many levels.
> 
> How is telling you this? It's part of the system setup. And that may
> lean toward RT or toward non-RT. This level should be adjusted according
> to the current allocation of Linux and the RT domain for a particular
> CPU, not hard-coded or compile-time defined.


In theory, I agree, in practice, lets be crasy, assume someone would
want an RT serial driver with 4 irqs, an RT USB driver with 2 irqs, an
RT CAN driver, and say, 4 RTnet boards. That is still less than the 16
vectors that a single level provides, so, we can probably get along with
2 levels. Or we can use a kernel parameter.

-- 
                                                                Gilles.

_______________________________________________
Xenomai mailing list
Xenomai@xenomai.org
http://www.xenomai.org/mailman/listinfo/xenomai

Reply via email to