summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMiod Vallat <miod@cvs.openbsd.org>2008-07-14 13:37:40 +0000
committerMiod Vallat <miod@cvs.openbsd.org>2008-07-14 13:37:40 +0000
commit88c03896c100736ff0120291180db2c79d1593d5 (patch)
treef68336d980cebebcfa4850f50d70757f3a8f5bfa
parentdba64875470cd16d0e8ef7ef8ef09766110a1114 (diff)
Be sure to propagate PSL_O in psw on PCXU* processors to userland processes
and signal handlers. ok kettenis@
-rw-r--r--sys/arch/hppa/hppa/machdep.c6
-rw-r--r--sys/arch/hppa/hppa/vm_machdep.c5
2 files changed, 5 insertions, 6 deletions
diff --git a/sys/arch/hppa/hppa/machdep.c b/sys/arch/hppa/hppa/machdep.c
index 921cd6175ea..4f395192bdb 100644
--- a/sys/arch/hppa/hppa/machdep.c
+++ b/sys/arch/hppa/hppa/machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: machdep.c,v 1.167 2008/06/27 17:22:14 miod Exp $ */
+/* $OpenBSD: machdep.c,v 1.168 2008/07/14 13:37:39 miod Exp $ */
/*
* Copyright (c) 1999-2003 Michael Shalayeff
@@ -560,8 +560,6 @@ cpuid()
/* force strong ordering for now */
if (p->features & HPPA_FTRS_W32B) {
- extern register_t kpsw; /* intr.c */
-
kpsw |= PSL_O;
}
@@ -1426,7 +1424,7 @@ sys_sigreturn(p, v, retval)
tf->tf_iisq_tail = HPPA_SID_KERNEL;
else
tf->tf_iisq_tail = p->p_addr->u_pcb.pcb_space;
- tf->tf_ipsw = ksc.sc_ps;
+ tf->tf_ipsw = ksc.sc_ps | (kpsw & PSL_O);
#ifdef DEBUG
if ((sigdebug & SDB_FOLLOW) && (!sigpid || p->p_pid == sigpid))
diff --git a/sys/arch/hppa/hppa/vm_machdep.c b/sys/arch/hppa/hppa/vm_machdep.c
index 528a1dba26c..78ab03bb2a3 100644
--- a/sys/arch/hppa/hppa/vm_machdep.c
+++ b/sys/arch/hppa/hppa/vm_machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: vm_machdep.c,v 1.62 2007/10/10 15:53:51 art Exp $ */
+/* $OpenBSD: vm_machdep.c,v 1.63 2008/07/14 13:37:39 miod Exp $ */
/*
* Copyright (c) 1999-2004 Michael Shalayeff
@@ -151,7 +151,8 @@ cpu_fork(p1, p2, stack, stacksize, func, arg)
*/
tf->tf_sr7 = HPPA_SID_KERNEL;
mfctl(CR_EIEM, tf->tf_eiem);
- tf->tf_ipsw = PSL_C | PSL_Q | PSL_P | PSL_D | PSL_I /* | PSL_L */;
+ tf->tf_ipsw = PSL_C | PSL_Q | PSL_P | PSL_D | PSL_I /* | PSL_L */ |
+ (kpsw & PSL_O);
/*
* If specified, give the child a different stack.