diff options
author | Miod Vallat <miod@cvs.openbsd.org> | 2008-07-14 13:37:40 +0000 |
---|---|---|
committer | Miod Vallat <miod@cvs.openbsd.org> | 2008-07-14 13:37:40 +0000 |
commit | 88c03896c100736ff0120291180db2c79d1593d5 (patch) | |
tree | f68336d980cebebcfa4850f50d70757f3a8f5bfa | |
parent | dba64875470cd16d0e8ef7ef8ef09766110a1114 (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.c | 6 | ||||
-rw-r--r-- | sys/arch/hppa/hppa/vm_machdep.c | 5 |
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. |