summaryrefslogtreecommitdiffstats
path: root/sys/ia64
diff options
context:
space:
mode:
authormarcel <marcel@FreeBSD.org>2002-06-06 22:49:23 +0000
committermarcel <marcel@FreeBSD.org>2002-06-06 22:49:23 +0000
commitdc5340bd65de5c15085ca431071e47320d721be8 (patch)
tree836487252ac8f6c08168062745bfcbcdfeec430e /sys/ia64
parentdf281667d31d06efb78224d4082c214fa312def0 (diff)
downloadFreeBSD-src-dc5340bd65de5c15085ca431071e47320d721be8.zip
FreeBSD-src-dc5340bd65de5c15085ca431071e47320d721be8.tar.gz
Work around a bug in the Linux version of ski, that's specific to
SSC_GET_RTC. This fixes the panic seen shortly after mounting the root file system. Thanks to: "K.Sumitani" <ksumitani@mui.biglobe.ne.jp>
Diffstat (limited to 'sys/ia64')
-rw-r--r--sys/ia64/ia64/ski.c11
1 files changed, 11 insertions, 0 deletions
diff --git a/sys/ia64/ia64/ski.c b/sys/ia64/ia64/ski.c
index 496ce8d..a387000 100644
--- a/sys/ia64/ia64/ski.c
+++ b/sys/ia64/ia64/ski.c
@@ -58,6 +58,17 @@ ssc(u_int64_t in0, u_int64_t in1, u_int64_t in2, u_int64_t in3, int which)
"break 0x80001"
: "=r"(ret0)
: "r"(which), "r"(in0), "r"(in1), "r"(in2), "r"(in3));
+
+ /*
+ * Ugh... Work around a bug in the Linux version of ski for
+ * SSC_GET_RTC. The PSR.dt register is not preserved properly
+ * and causes further memory references to be done without
+ * translation. All we need to do is set PSR.dt again. Note
+ * that dependency violations do not exist in ski, so we
+ * don't have to serialize.
+ */
+ __asm __volatile("ssm psr.dt");
+
return ret0;
}
OpenPOWER on IntegriCloud