From 6a574b2afc2c6274fb15a6fa5fb3bf5ca16d5b60 Mon Sep 17 00:00:00 2001 From: Julian Elischer Date: Mon, 6 Sep 2004 07:23:14 +0000 Subject: [PATCH] Don't do IPIs on behalf of interrupt threads. just punt straight on through to teh preemption code. Make a KASSSERT out of a condition that can no longer occur. MFC after: 1 week --- sys/kern/kern_switch.c | 4 ++-- sys/kern/sched_4bsd.c | 5 +++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/sys/kern/kern_switch.c b/sys/kern/kern_switch.c index eeed120d995d..399e3e9401da 100644 --- a/sys/kern/kern_switch.c +++ b/sys/kern/kern_switch.c @@ -502,8 +502,8 @@ maybe_preempt(struct thread *td) * to the new thread. */ ctd = curthread; - if (ctd->td_kse == NULL || ctd->td_kse->ke_thread != ctd) - return (0); + KASSERT ((ctd->td_kse != NULL && ctd->td_kse->ke_thread == ctd), + ("thread has no (or wrong) sched-private part.")); pri = td->td_priority; cpri = ctd->td_priority; if (pri >= cpri || cold /* || dumping */ || TD_IS_INHIBITED(ctd) || diff --git a/sys/kern/sched_4bsd.c b/sys/kern/sched_4bsd.c index 62cde326ab45..60b13ce9a0f6 100644 --- a/sys/kern/sched_4bsd.c +++ b/sys/kern/sched_4bsd.c @@ -949,9 +949,10 @@ sched_add(struct thread *td, int flags) * the thread is unpinned * or pinned to another cpu, * and there are other available and idle CPUs. - * if we are idle, then skip straight to preemption. + * if we are idle, or it's an interrupt, + * then skip straight to preemption. */ - if ( (! idle) && + if ( (! idle) && ((flags & SRQ_INTR) == 0) && (idle_cpus_mask & ~(hlt_cpus_mask | me)) && ( KSE_CAN_MIGRATE(ke) || ke->ke_runq != &runq_pcpu[PCPU_GET(cpuid)])) {