summaryrefslogtreecommitdiffstats
path: root/sys/kern/subr_trap.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/subr_trap.c')
-rw-r--r--sys/kern/subr_trap.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/sys/kern/subr_trap.c b/sys/kern/subr_trap.c
index 9eb4aed..fe5f1e4 100644
--- a/sys/kern/subr_trap.c
+++ b/sys/kern/subr_trap.c
@@ -253,8 +253,14 @@ ast(struct trapframe *framep)
sigs++;
}
PROC_UNLOCK(p);
- if (p->p_flag & P_THREADED && sigs)
- thread_signal_upcall(td);
+ if (p->p_flag & P_THREADED && sigs) {
+ struct kse_upcall *ku = td->td_upcall;
+ if ((void *)TRAPF_PC(framep) != ku->ku_func) {
+ mtx_lock_spin(&sched_lock);
+ ku->ku_flags |= KUF_DOUPCALL;
+ mtx_unlock_spin(&sched_lock);
+ }
+ }
}
userret(td, framep, sticks);
OpenPOWER on IntegriCloud