Maksym Veremeyenko wrote:
 > Gilles Chanteperdrix ~~~~~:
 > 
 > >  > My problem with non-RT application happens only if RT application 
 > >  > (running in the same time) uses native skin. Perl and Eclipse 
 > >  > application fails when switchbench is running, but not problems during 
 > >  > switchtest.
 > > 
 > > Ok. If you can run switchtest at the same time as your application and
 > > switchtest does not fail, it does not look like an FPU bug. What is
 > > the error message when perl or eclipse fail to start ?
 > > 
 > 
 > Perl scripts fails with various compilation errors - approximately 6 
 > types (seems it could be much more if more modules were used).
 > 
 > Eclipse fails with Java VM init error:
 > [EMAIL PROTECTED] ~]$ /usr/local//eclipse/eclipse
 > Error occurred during initialization of VM
 > java.lang.IllegalArgumentException: Illegal Load: NaN
 > 
 > During runned 'latency' i even have ssh fail:
 > Mar 15 01:47:18 dev-3 sshd[2908]: fatal: Couldn't obtain random bytes 
 > (error 604389476)
 > Mar 15 01:52:11 dev-3 sshd[3006]: Received signal 15; terminating.

Well, it really looks like an FPU bug. Could you try to:
- upgrade your trunk to latest revision, then test
- then apply the attached patch to your up-to-date trunk, then test
  again ?

-- 


                                            Gilles Chanteperdrix.
Index: include/asm-i386/bits/pod.h
===================================================================
--- include/asm-i386/bits/pod.h (revision 2299)
+++ include/asm-i386/bits/pod.h (working copy)
@@ -209,7 +209,6 @@
 {
        struct task_struct *task = tcb->user_task;
 
-       if (!tcb->is_root) {
                if (task) {
                        /* fpu not used or already saved by __switch_to. */
                        if (!wrap_test_fpu_used(task))
@@ -219,14 +218,7 @@
                        hardware of this task. */
                        wrap_clear_fpu_used(task);
                }
-       } else {
-               if (tcb->cr0_ts || 
-                   (tcb->ts_usedfpu && !wrap_test_fpu_used(task)))
-                       return;
 
-               wrap_clear_fpu_used(task);
-       }
-
        clts();
 
        if (cpu_has_fxsr)
@@ -239,7 +231,6 @@
 {
        struct task_struct *task = tcb->user_task;
 
-       if (!tcb->is_root) {
                if (task) {
                        if (!xnarch_fpu_init_p(task)) {
                                stts();
@@ -250,17 +241,7 @@
                         * the FPU hardware. */
                        wrap_set_fpu_used(task);
                }
-       } else {
-               /* Restore state of FPU only if TS bit in cr0 was clear. */
-               if (tcb->cr0_ts) {
-                       stts();
-                       return;
-               }
 
-               if (tcb->ts_usedfpu)
-                       wrap_set_fpu_used(task);
-       }
-
        /* Restore the FPU hardware with valid fp registers from a
           user-space or kernel thread. */
        clts();
@@ -277,7 +258,6 @@
 {
        struct task_struct *task = tcb->user_task;
 
-       if (!tcb->is_root) {
                if (task) {
                        if (!xnarch_fpu_init_p(task))
                                return;
@@ -289,20 +269,7 @@
                                return;
                        }
                }
-       } else {
-               if (tcb->cr0_ts)
-                       return;
 
-               if (wrap_test_fpu_used(task)) {
-                       /* Fpu context was not even saved, do not restore */
-                       clts();
-                       return;
-               }
-               
-               xnarch_restore_fpu(tcb);
-               return;
-       }
-
        clts();
 
        if (!cpu_has_fxsr && task)
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help

Reply via email to