From: Heikki Lindholm <holindho@domain.hid>
To: xenomai@xenomai.org
Subject: [Xenomai-core] [PATCH] Fix ppc fpu support
Date: Fri, 06 Jan 2006 20:42:21 +0200 [thread overview]
Message-ID: <43BEBA0D.5090708@domain.hid> (raw)
[-- Attachment #1: Type: text/plain, Size: 577 bytes --]
Xenomai might preempt linux when linux has cleared a tasks MSR_FP, but
not yet set last_task_used_math to NULL. As a result the tasks MSR_FP
will get set, although it should be cleared. If the task happens to hit
one of the codepaths that save FPU state if MSR_FP is set, the wrong FPU
state might be saved to the task. The attached patch should fix this. I
couldn't try it on most recent Xenomai trunk, because latency wouldn't
build anymore. However, I see no reason it shouldn't work. All thee
having trouble with X and Xenomai, give this a shot.
-- Heikki Lindholm
[-- Attachment #2: xenomai-060106-ppc-hwfpu.patch --]
[-- Type: text/plain, Size: 1551 bytes --]
diff -Nru xenomai/include/asm-powerpc/system.h xenomai-devel/include/asm-powerpc/system.h
--- xenomai/include/asm-powerpc/system.h 2006-01-06 15:55:19.000000000 +0200
+++ xenomai-devel/include/asm-powerpc/system.h 2006-01-06 16:44:53.000000000 +0200
@@ -55,6 +55,7 @@
rthal_fpenv_t fpuenv __attribute__ ((aligned (16)));
rthal_fpenv_t *fpup; /* Pointer to the FPU backup area */
struct task_struct *user_fpu_owner;
+ unsigned long user_fpu_owner_prev_msr;
/* Pointer the the FPU owner in userspace:
- NULL for RT K threads,
- last_task_used_math for Linux US threads (only current or NULL when MP)
@@ -368,7 +369,10 @@
rthal_save_fpu(tcb->fpup);
if(tcb->user_fpu_owner && tcb->user_fpu_owner->thread.regs)
+ {
+ tcb->user_fpu_owner_prev_msr = tcb->user_fpu_owner->thread.regs->msr;
tcb->user_fpu_owner->thread.regs->msr &= ~MSR_FP;
+ }
}
#endif /* CONFIG_XENO_HW_FPU */
@@ -383,7 +387,13 @@
{
rthal_restore_fpu(tcb->fpup);
- if(tcb->user_fpu_owner && tcb->user_fpu_owner->thread.regs)
+ /* Note: Only enable FP in MSR, if it was enabled when we saved the
+ * fpu state. We might have preempted Linux when it had disabled FP
+ * for the thread, but not yet set last_task_used_math to NULL
+ */
+ if(tcb->user_fpu_owner &&
+ tcb->user_fpu_owner->thread.regs &&
+ ((tcb->user_fpu_owner_prev_msr & MSR_FP) != 0))
tcb->user_fpu_owner->thread.regs->msr |= MSR_FP;
}
next reply other threads:[~2006-01-06 18:42 UTC|newest]
Thread overview: 13+ messages / expand[flat|nested] mbox.gz Atom feed top
2006-01-06 18:42 Heikki Lindholm [this message]
2006-01-06 18:58 ` [Xenomai-core] [PATCH] Fix ppc fpu support Jan Kiszka
2006-01-06 19:14 ` Heikki Lindholm
2006-01-06 19:25 ` Jan Kiszka
2006-01-06 19:42 ` Jan Kiszka
2006-01-06 21:38 ` Heikki Lindholm
2006-01-07 10:38 ` Heikki Lindholm
2006-01-07 10:34 ` Heikki Lindholm
2006-01-07 13:33 ` Philippe Gerum
2006-01-07 17:24 ` Heikki Lindholm
2006-01-07 17:41 ` Philippe Gerum
2006-01-07 18:00 ` Heikki Lindholm
2006-01-07 18:35 ` Philippe Gerum
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=43BEBA0D.5090708@domain.hid \
--to=holindho@domain.hid \
--cc=xenomai@xenomai.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.