summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--sys/kern/kern_intr.c4
-rw-r--r--sys/kern/kern_synch.c3
2 files changed, 3 insertions, 4 deletions
diff --git a/sys/kern/kern_intr.c b/sys/kern/kern_intr.c
index ac9213b..07ee598 100644
--- a/sys/kern/kern_intr.c
+++ b/sys/kern/kern_intr.c
@@ -344,7 +344,6 @@ ithread_schedule(struct ithd *ithread, int do_switch)
{
struct int_entropy entropy;
struct proc *p;
- critical_t savecrit;
/*
* If no ithread or no handlers, then we have a stray interrupt.
@@ -383,13 +382,10 @@ ithread_schedule(struct ithd *ithread, int do_switch)
p->p_stat = SRUN;
setrunqueue(p);
if (do_switch && curproc->p_stat == SRUN) {
- savecrit = sched_lock.mtx_savecrit;
- mtx_intr_enable(&sched_lock);
if (curproc != PCPU_GET(idleproc))
setrunqueue(curproc);
curproc->p_stats->p_ru.ru_nivcsw++;
mi_switch();
- sched_lock.mtx_savecrit = savecrit;
} else
need_resched(curproc);
} else {
diff --git a/sys/kern/kern_synch.c b/sys/kern/kern_synch.c
index 95b98d2..ce6adb5 100644
--- a/sys/kern/kern_synch.c
+++ b/sys/kern/kern_synch.c
@@ -821,6 +821,7 @@ mi_switch()
#if 0
register struct rlimit *rlim;
#endif
+ critical_t sched_crit;
u_int sched_nest;
mtx_assert(&sched_lock, MA_OWNED | MA_NOTRECURSED);
@@ -881,12 +882,14 @@ mi_switch()
PCPU_SET(switchtime, new_switchtime);
CTR3(KTR_PROC, "mi_switch: old proc %p (pid %d, %s)", p, p->p_pid,
p->p_comm);
+ sched_crit = sched_lock.mtx_savecrit;
sched_nest = sched_lock.mtx_recurse;
curproc->p_lastcpu = curproc->p_oncpu;
curproc->p_oncpu = NOCPU;
clear_resched(curproc);
cpu_switch();
curproc->p_oncpu = PCPU_GET(cpuid);
+ sched_lock.mtx_savecrit = sched_crit;
sched_lock.mtx_recurse = sched_nest;
sched_lock.mtx_lock = (uintptr_t)curproc;
CTR3(KTR_PROC, "mi_switch: new proc %p (pid %d, %s)", p, p->p_pid,
OpenPOWER on IntegriCloud