summaryrefslogtreecommitdiff
path: root/sys/arch
diff options
context:
space:
mode:
authorJoel Sing <jsing@cvs.openbsd.org>2010-07-02 04:51:14 +0000
committerJoel Sing <jsing@cvs.openbsd.org>2010-07-02 04:51:14 +0000
commit7982ddbbf9f81caf16db2c12cd617e5ca5818b2f (patch)
treeaafe50ff84ff382a47b5189581b41b278e754743 /sys/arch
parente1c381042d06c10cd761be8f99e5d7dbbbd8437c (diff)
Apparently volatile does not mean what it is supposed to mean... avoid a
deadlock by adding a sync instruction to the loop. ok kettenis@
Diffstat (limited to 'sys/arch')
-rw-r--r--sys/arch/hppa/hppa/fpu.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/arch/hppa/hppa/fpu.c b/sys/arch/hppa/hppa/fpu.c
index 6e13acc51ee..6296dcb4fa9 100644
--- a/sys/arch/hppa/hppa/fpu.c
+++ b/sys/arch/hppa/hppa/fpu.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: fpu.c,v 1.2 2010/07/02 00:00:45 jsing Exp $ */
+/* $OpenBSD: fpu.c,v 1.3 2010/07/02 04:51:13 jsing Exp $ */
/*
* Copyright (c) 2010 Joel Sing <jsing@openbsd.org>
@@ -65,7 +65,7 @@ fpu_proc(struct proc *p, int save)
panic("FPU shootdown failed!\n");
while (hfp->hfp_cpu != NULL)
- ;
+ asm volatile ("sync" ::: "memory");
} else if (p->p_md.md_regs->tf_cr30 == ci->ci_fpu_state) {