On 21.12.18 14:44, Henning Schild via Xenomai wrote:
From: Henning Schild <henning.sch...@siemens.com>
We should mark the current task as not owning the fpu anymore if it does
actually own the fpu, not if the fpu itself is active.
Fixes cb52e6c7438fa
Reported-by: Mauro Salvini <mauro.salv...@smigroup.net>
Signed-off-by: Henning Schild <henning.sch...@siemens.com>
---
kernel/cobalt/arch/x86/thread.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/kernel/cobalt/arch/x86/thread.c b/kernel/cobalt/arch/x86/thread.c
index a09560075..0c6054338 100644
--- a/kernel/cobalt/arch/x86/thread.c
+++ b/kernel/cobalt/arch/x86/thread.c
@@ -475,7 +475,7 @@ void xnarch_leave_root(struct xnthread *root)
switch_fpu_finish(¤t->thread.fpu, smp_processor_id());
#else
/* mark current thread as not owning the FPU anymore */
- if (¤t->thread.fpu.fpstate_active)
+ if (¤t->thread.fpu.fpregs_active)
Well, if you had used fpregs_active() here, you would have resolved also the
second bug of that line (which I only spotted now):
"if (&something)" is always true...
Jan
fpregs_deactivate(¤t->thread.fpu);
#endif
}