[Xenomai] arm imx6 and hardware FPU

Paolo Minazzi Paolo.Minazzi at mitrol.it
Fri Apr 11 14:15:08 CEST 2014


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.

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.

Paolo





More information about the Xenomai mailing list