diff options
Diffstat (limited to 'sys/arch/hppa')
-rw-r--r-- | sys/arch/hppa/hppa/genassym.cf | 4 | ||||
-rw-r--r-- | sys/arch/hppa/hppa/locore.S | 25 |
2 files changed, 27 insertions, 2 deletions
diff --git a/sys/arch/hppa/hppa/genassym.cf b/sys/arch/hppa/hppa/genassym.cf index 04caaa5196c..a5690d283d5 100644 --- a/sys/arch/hppa/hppa/genassym.cf +++ b/sys/arch/hppa/hppa/genassym.cf @@ -1,4 +1,4 @@ -# $OpenBSD: genassym.cf,v 1.41 2010/07/01 05:33:32 jsing Exp $ +# $OpenBSD: genassym.cf,v 1.42 2010/12/30 14:30:12 jsing Exp $ # # Copyright (c) 1982, 1990, 1993 @@ -164,6 +164,8 @@ member ci_cpl member ci_ipending member ci_trap_save member ci_fpu_state +member ci_ipi +member ci_hpa struct hppa_fpstate member hfp_regs diff --git a/sys/arch/hppa/hppa/locore.S b/sys/arch/hppa/hppa/locore.S index a76b179973d..d4430e2f00b 100644 --- a/sys/arch/hppa/hppa/locore.S +++ b/sys/arch/hppa/hppa/locore.S @@ -1,4 +1,4 @@ -/* $OpenBSD: locore.S,v 1.182 2010/12/21 14:56:23 claudio Exp $ */ +/* $OpenBSD: locore.S,v 1.183 2010/12/30 14:30:12 jsing Exp $ */ /* * Copyright (c) 1998-2004 Michael Shalayeff @@ -1087,6 +1087,29 @@ $fpusw_set sync $fpusw_nosave + +#ifdef MULTIPROCESSOR + /* See if this process has FPU context on another CPU. */ + ldw HFP_CPU(r9), r1 + comb,=,n r1, r0, $fpusw_noshoot + + /* Perform FPU shootdown. */ + ldi (1 << HPPA_IPI_FPU_SAVE), r1 + ldw HFP_CPU(r9), r16 + stw r1, CI_IPI(r16) + ldi 1, r1 + ldw CI_HPA(r16), r16 + stw r1, 0(r16) + +$fpusw_spin + /* Wait for shootdown to complete. */ + sync + ldw HFP_CPU(r9), r1 + comb,<>,n r1, r0, $fpusw_spin + +$fpusw_noshoot +#endif + /* count switches */ .import uvmexp, data ldil L%(uvmexp+FPSWTCH), r1 |