[Xenomai] arm imx6 and hardware FPU [SOLVED]

Paolo Minazzi Paolo.Minazzi at mitrol.it
Fri Apr 18 10:47:58 CEST 2014


Il 17/04/2014 15.33, Gilles Chanteperdrix ha scritto:
> On 04/17/2014 02:20 PM, Paolo Minazzi wrote:
>> Il 11/04/2014 15.15, Gilles Chanteperdrix ha scritto:
>>> On 04/11/2014 03:05 PM, Paolo Minazzi wrote:
>>>> Il 11/04/2014 14.45, Gilles Chanteperdrix ha scritto:
>>>>> On 04/11/2014 02:32 PM, Paolo Minazzi wrote:
>>>>>> Il 11/04/2014 14.24, Gilles Chanteperdrix ha scritto:
>>>>>>> On 04/11/2014 02:15 PM, Paolo Minazzi wrote:
>>>>>>>> Il 11/04/2014 13.49, Gilles Chanteperdrix ha scritto:
>>>>>>>>> On 04/11/2014 01:44 PM, Paolo Minazzi wrote:
>>>>>>>>>> Hi to all,
>>>>>>>>>> I'm trying to test my imx6 with xenomai 2.6.3.
>>>>>>>>>> I use the linaro cross-compiler that uses the hardware floating
>>>>>>>>>> point.
>>>>>>>>>>
>>>>>>>>>> I made a simple floating point test.
>>>>>>>>>>
>>>>>>>>>> If I use two non-realtime user-space tasks the test works OK 
>>>>>>>>>> and I
>>>>>>>>>> have
>>>>>>>>>> no errors in calculations.
>>>>>>>>>> This means that compiler and hardware works well.
>>>>>>>>>>
>>>>>>>>>> But I I use two realtime user-space tasks I have errors in
>>>>>>>>>> calculations.
>>>>>>>>>> Real-time tasks are created with rt_task_create(&demo, 
>>>>>>>>>> "demo", 0,
>>>>>>>>>> 99,
>>>>>>>>>> T_FPU);
>>>>>>>>>>
>>>>>>>>>>
>>>>>>>>>> This is my kernel config
>>>>>>>>>> ============================================
>>>>>>>>>> ...
>>>>>>>>>> #
>>>>>>>>>> # Machine
>>>>>>>>>> #
>>>>>>>>>> CONFIG_IPIPE_WANT_PREEMPTIBLE_SWITCH=y
>>>>>>>>>> CONFIG_IPIPE_WANT_ACTIVE_MM=y
>>>>>>>>>> CONFIG_XENO_HW_FPU=y
>>>>>>>>>> CONFIG_XENO_HW_UNLOCKED_SWITCH=y
>>>>>>>>>> ...
>>>>>>>>>> #
>>>>>>>>>> # At least one emulation must be selected
>>>>>>>>>> #
>>>>>>>>>> CONFIG_VFP=y
>>>>>>>>>> CONFIG_VFPv3=y
>>>>>>>>>> CONFIG_NEON=y
>>>>>>>>>> CONFIG_VFP_3_2_BACKPORT=y
>>>>>>>>>> ...
>>>>>>>>>> ============================================
>>>>>>>>>>
>>>>>>>>>> Is it possible to use ***hardware floating point*** with 
>>>>>>>>>> realtime
>>>>>>>>>> user-space tasks ?
>>>>>>>>>
>>>>>>>>> Yes, it should be. Do you get the same issue when running both 
>>>>>>>>> the
>>>>>>>>> switchtest and switchtest -s 1000 tests? Do you have the same 
>>>>>>>>> issue
>>>>>>>>> with the I-pipe patch for Linux 3.8?
>>>>>>>>>
>>>>>>>>>
>>>>>>>> / # ./switchtest -s 1000
>>>>>>>> == Testing FPU check routines...
>>>>>>>> d0: 1 != 2
>>>>>>>> d1: 1 != 2
>>>>>>>> d2: 1 != 2
>>>>>>>> d3: 1 != 2
>>>>>>>> d4: 1 != 2
>>>>>>>> d5: 1 != 2
>>>>>>>> d6: 1 != 2
>>>>>>>> d7: 1 != 2
>>>>>>>> d8: 1 != 2
>>>>>>>> d9: 1 != 2
>>>>>>>> d10: 1 != 2
>>>>>>>> d11: 1 != 2
>>>>>>>> d12: 1 != 2
>>>>>>>> d13: 1 != 2
>>>>>>>> d14: 1 != 2
>>>>>>>> d15: 1 != 2
>>>>>>>> == FPU check routines: OK.
>>>>>>>>
>>>>>>>> / # ./switchtest
>>>>>>>> == Testing FPU check routines...
>>>>>>>> d0: 1 != 2
>>>>>>>> d1: 1 != 2
>>>>>>>> d2: 1 != 2
>>>>>>>> d3: 1 != 2
>>>>>>>> d4: 1 != 2
>>>>>>>> d5: 1 != 2
>>>>>>>> d6: 1 != 2
>>>>>>>> d7: 1 != 2
>>>>>>>> d8: 1 != 2
>>>>>>>> d9: 1 != 2
>>>>>>>> d10: 1 != 2
>>>>>>>> d11: 1 != 2
>>>>>>>> d12: 1 != 2
>>>>>>>> d13: 1 != 2
>>>>>>>> d14: 1 != 2
>>>>>>>> d15: 1 != 2
>>>>>>>> == FPU check routines: OK.
>>>>>>>>
>>>>>>>> As you can see the test seems OK.
>>>>>>>> But If I understand correctly switchtest is not a real-time test.
>>>>>>>
>>>>>>> You do not understand correctly. You should run
>>>>>>> switchtest & switchtest -s 1000
>>>>>>>
>>>>>>> And let them run for some time.
>>>>>>>
>>>>>>>> I see the problem If I use my floating point test.
>>>>>>>> I try to calculate sin(2x).
>>>>>>>> Then I claculate 2*sin(x)*cos(x).
>>>>>>>> They should be similar. But sometime they are very different ===>
>>>>>>>> fpu
>>>>>>>> error
>>>>>>>>
>>>>>>>>
>>>>>>>> I have kerne 3.0.35.
>>>>>>>> For me it is not so easy try 3.8.
>>>>>>>
>>>>>>> How is that? To test xenomai you do not need all the drivers, just
>>>>>>> the
>>>>>>> uart.
>>>>>>>
>>>>>>>
>>>>>> I'm able to do it.
>>>>>> But I'm paid for use this board. Try I cannot loose too time to test
>>>>>> configurations that we will not use.
>>>>>> I understand you, but you should try to understand me.
>>>>>> Have you got some ideas ?
>>>>>
>>>>> I have given you my ideas. Of course, you are free to ignore them and
>>>>> debug the issue on your own.
>>>>>
>>>>>
>>>> I understand your hard words.
>>>> I understand only because in my life I worked (in my free time) on a
>>>> very complex project : colinux64.
>>>> If you do not know, colinux is a porting of linux kernel on windows.
>>>> Only who works on these complex parts of the system know the hard 
>>>> works
>>>> there is to do and what it means find bug. The same complexity of
>>>> xenomai.
>>>>
>>>> I have done my homework, but not in xenomai project world.
>>>> Repeat, I understand your words ... but remember that not all the 
>>>> people
>>>> are stupid and do not want to find bug.
>>>> You do not know the skills of the persons on the other side, so my
>>>> advice is to try to understand which kind of person you are 
>>>> contacting.
>>>> It is not so easy ... but it could be important in your work.
>>>
>>> What are you talking about? You ask a question, I reply rapidly with
>>> some ideas to test. You do not want to test these ideas, so the
>>> conclusion is: debug the issue on your own. I do not know any other
>>> answer than the one I gave you.
>>>
>>>
>> Studying the problem it seems that xenomai works fine.
>> The problem maybe is related to not re-entrance of sin and cos function.
>> If I use simple float operation I do not see the problem.
>>
>> I have the same problem using two non realtime task, so I can say that
>> the problem is not related to xenomai.
>
> In order to be sure that the bug is not introduced by Xenomai, you 
> should disable CONFIG_XENOMAI, CONFIG_IPIPE, and in fact, even try the 
> unpatched kernel. And again: you can use the switchtest tool to test 
> whether FPU is OK (with CONFIG_XENOMAI), and if switchtest fails after 
> some time, we have tools to make debugging much easier.
>
> Also note that the 3.0 kernel was released more than 3 years ago, so 
> it is entirely possible that mainline bugs have been fixed since then, 
> both on Linux side, and on I-pipe side, which is the reason I asked 
> you to test a more recent kernel.
>
I'm sorry ... all works correctly, also with hardware floating point. It 
was all my fault.
Paolo





More information about the Xenomai mailing list