summaryrefslogtreecommitdiffstats
path: root/sys/ia64
diff options
context:
space:
mode:
Diffstat (limited to 'sys/ia64')
-rw-r--r--sys/ia64/ia64/trap.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/sys/ia64/ia64/trap.c b/sys/ia64/ia64/trap.c
index 8626641..d22b8ff0 100644
--- a/sys/ia64/ia64/trap.c
+++ b/sys/ia64/ia64/trap.c
@@ -699,7 +699,9 @@ trap(int vector, struct trapframe *framep)
/*
* Additionally check the privilege level. We don't want to
* panic when we're in the gateway page, running at user
- * level. This happens for the signal trampolines.
+ * level. This happens for the signal trampolines. Note that
+ * when that happens, user is defined as 0 above. We need to
+ * set user to 1 to force calling userret() and do_ast().
*/
if (!TRAPF_USERMODE(framep)) {
/* Check for copyin/copyout fault. */
@@ -711,7 +713,8 @@ trap(int vector, struct trapframe *framep)
goto out;
}
goto dopanic;
- }
+ } else
+ user = 1;
ucode = va;
i = (rv == KERN_PROTECTION_FAILURE) ? SIGBUS : SIGSEGV;
break;
OpenPOWER on IntegriCloud