summaryrefslogtreecommitdiffstats
path: root/sys/kern/sched_ule.c
diff options
context:
space:
mode:
Diffstat (limited to 'sys/kern/sched_ule.c')
-rw-r--r--sys/kern/sched_ule.c15
1 files changed, 7 insertions, 8 deletions
diff --git a/sys/kern/sched_ule.c b/sys/kern/sched_ule.c
index 9fbfb0c..635a0dd 100644
--- a/sys/kern/sched_ule.c
+++ b/sys/kern/sched_ule.c
@@ -182,7 +182,9 @@ struct td_sched *thread0_sched = &td_sched;
#define SCHED_INTERACTIVE(kg) \
(sched_interact_score(kg) < SCHED_INTERACT_THRESH)
#define SCHED_CURR(kg, ke) \
- (ke->ke_thread->td_priority < PRI_MIN_TIMESHARE || SCHED_INTERACTIVE(kg))
+ (ke->ke_thread->td_priority < PRI_MIN_TIMESHARE || \
+ SCHED_INTERACTIVE(kg) || \
+ mtx_ownedby(&Giant, (ke)->ke_thread))
/*
* Cpu percentage computation macros and defines.
@@ -925,13 +927,10 @@ sched_fork_kse(struct kse *ke, struct kse *child)
child->ke_cpu = ke->ke_cpu; /* sched_pickcpu(); */
child->ke_runq = NULL;
- /*
- * Claim that we've been running for one second for statistical
- * purposes.
- */
- child->ke_ticks = 0;
- child->ke_ltick = ticks;
- child->ke_ftick = ticks - hz;
+ /* Grab our parents cpu estimation information. */
+ child->ke_ticks = ke->ke_ticks;
+ child->ke_ltick = ke->ke_ltick;
+ child->ke_ftick = ke->ke_ftick;
}
void
OpenPOWER on IntegriCloud