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