Jan Kiszka wrote:
 > Hi,
 > 
 > after receiving SIGXCPU for unexpected context switches in a larger
 > application, I found out that the T_FPU bit does not seem to be
 > recognised on x86 during native task creation. Here is a simple test
 > case, watch out for /proc/xenomai/faults after program start and 5 s later:
 > 
 > #include <native/task.h>
 > #include <sys/mman.h>
 > 
 > float x;
 > 
 > void task_func(void *p)
 > {
 >     rt_task_sleep(5000000000LL);
 >     x = 3.14 + (int)p;
 > }
 > 
 > main()
 > {
 >     RT_TASK task;
 > 
 >     mlockall(MCL_CURRENT|MCL_FUTURE);
 > 
 >     rt_task_spawn(&task, NULL, 0, 40, T_FPU | T_JOINABLE, task_func, 0);
 >     rt_task_join(&task);
 > 
 >     return 0;
 > }
 > 
 > 
 > Any immediate ideas?

User-space threads always have the FPU bit anyway. When a user-space
thread in primary mode uses FPU for the first time on x86, the FPU
hardware is initialized in the fault handler, this is the expected
behaviour. This allow the nucleus to not switch FPU context for
user-space threads that never use the FPU.

In case of an abnormal FPU fault, the message "invalid use of FPU" is
printed on console.

-- 


                                            Gilles Chanteperdrix.

_______________________________________________
Xenomai-core mailing list
Xenomai-core@gna.org
https://mail.gna.org/listinfo/xenomai-core

Reply via email to