summaryrefslogtreecommitdiff
path: root/sys/kern/subr_trap.c
diff options
context:
space:
mode:
authorDavid Xu <davidxu@FreeBSD.org>2003-03-11 02:59:50 +0000
committerDavid Xu <davidxu@FreeBSD.org>2003-03-11 02:59:50 +0000
commit21e0492ab15c697fc5a7de8108246df82770008f (patch)
treec28b73dc40a4a07a188972e792db22e3ade7eda9 /sys/kern/subr_trap.c
parentbdc321a648b43ba69385bc69a9d9b94e11aa9e82 (diff)
Notes
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 9eb4aed83177..fe5f1e40599f 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);