C tdq_runq_add

Is MIN and MAX realtime in comment
Code:
/*
     * This queue contains only priorities between MIN and MAX
     * realtime. Use the whole queue to represent these values.
     */
a typo or am I understanding it wrong?
Code:
/*
* Add a thread to the actual run-queue. Keeps transferable counts up to
* date with what is actually on the run-queue. Selects the correct
* queue position for timeshare threads.
*/
static __inline void
tdq_runq_add(struct tdq *tdq, struct thread *td, int flags)
{
  struct td_sched *ts;
  u_char pri;

  TDQ_LOCK_ASSERT(tdq, MA_OWNED);
  THREAD_LOCK_ASSERT(td, MA_OWNED);

  pri = td->td_priority;
  ts = td_get_sched(td);
  TD_SET_RUNQ(td);
  if (THREAD_CAN_MIGRATE(td)) {
    tdq->tdq_transferable++;
    ts->ts_flags |= TSF_XFERABLE;
  }
  if (pri < PRI_MIN_BATCH) {
    ts->ts_runq = &tdq->tdq_realtime;
  } else if (pri <= PRI_MAX_BATCH) {
    ts->ts_runq = &tdq->tdq_timeshare;
    KASSERT(pri <= PRI_MAX_BATCH && pri >= PRI_MIN_BATCH,
      ("Invalid priority %d on timeshare runq", pri));
    /*
     * This queue contains only priorities between MIN and MAX
     * realtime. Use the whole queue to represent these values.
     */
    if ((flags & (SRQ_BORROWING|SRQ_PREEMPTED)) == 0) {
      pri = RQ_NQS * (pri - PRI_MIN_BATCH) / PRI_BATCH_RANGE;
      pri = (pri + tdq->tdq_idx) % RQ_NQS;
      /*
       * This effectively shortens the queue by one so we
       * can have a one slot difference between idx and
       * ridx while we wait for threads to drain.
       */
      if (tdq->tdq_ridx != tdq->tdq_idx &&
        pri == tdq->tdq_ridx)
        pri = (unsigned char)(pri - 1) % RQ_NQS;
    } else
      pri = tdq->tdq_ridx;
    runq_add_pri(ts->ts_runq, td, pri, flags);
    return;
  } else
    ts->ts_runq = &tdq->tdq_idle;
  runq_add(ts->ts_runq, td, flags);
}
 
Last edited:
Back
Top