- Fix an off by one error in sched_pri_range.
- In tdq_choose() only assert that a thread does not have too high a priority (low value) for the queue we removed it from. This will catch bugs in priority elevation. It's not a serious error for the thread to have too low a priority as we don't change queues in this case as an optimization. Reported by: kris
This commit is contained in:
parent
e1461651a4
commit
dda713dfb8
@ -135,7 +135,7 @@ static struct td_sched td_sched0;
|
||||
#define SCHED_PRI_NHALF (SCHED_PRI_NRESV / 2)
|
||||
#define SCHED_PRI_MIN (PRI_MIN_TIMESHARE + SCHED_PRI_NHALF)
|
||||
#define SCHED_PRI_MAX (PRI_MAX_TIMESHARE - SCHED_PRI_NHALF)
|
||||
#define SCHED_PRI_RANGE (SCHED_PRI_MAX - SCHED_PRI_MIN + 1)
|
||||
#define SCHED_PRI_RANGE (SCHED_PRI_MAX - SCHED_PRI_MIN)
|
||||
#define SCHED_PRI_TICKS(ts) \
|
||||
(SCHED_TICK_HZ((ts)) / \
|
||||
(roundup(SCHED_TICK_TOTAL((ts)), SCHED_PRI_RANGE) / SCHED_PRI_RANGE))
|
||||
@ -938,16 +938,11 @@ tdq_choose(struct tdq *tdq)
|
||||
mtx_assert(&sched_lock, MA_OWNED);
|
||||
|
||||
ts = runq_choose(&tdq->tdq_realtime);
|
||||
if (ts != NULL) {
|
||||
KASSERT(ts->ts_thread->td_priority <= PRI_MAX_REALTIME,
|
||||
("tdq_choose: Invalid priority on realtime queue %d",
|
||||
ts->ts_thread->td_priority));
|
||||
if (ts != NULL)
|
||||
return (ts);
|
||||
}
|
||||
ts = runq_choose_from(&tdq->tdq_timeshare, tdq->tdq_ridx);
|
||||
if (ts != NULL) {
|
||||
KASSERT(ts->ts_thread->td_priority <= PRI_MAX_TIMESHARE &&
|
||||
ts->ts_thread->td_priority >= PRI_MIN_TIMESHARE,
|
||||
KASSERT(ts->ts_thread->td_priority >= PRI_MIN_TIMESHARE,
|
||||
("tdq_choose: Invalid priority on timeshare queue %d",
|
||||
ts->ts_thread->td_priority));
|
||||
return (ts);
|
||||
|
Loading…
Reference in New Issue
Block a user