- /* setup run-queues */
- simple_lock_init(&pr->runq.lock, ETAP_THREAD_PROC_RUNQ);
- pr->runq.count = 0;
- for (i = 0; i < NRQBM; i++) {
- pr->runq.bitmap[i] = 0;
- }
- setbit(MAXPRI - IDLEPRI, pr->runq.bitmap);
- pr->runq.highq = IDLEPRI;
- for (i = 0; i < NRQS; i++) {
- queue_init(&(pr->runq.queues[i]));
- }
+ /* setup run queue */
+ p->runq.highq = IDLEPRI;
+ for (i = 0; i < NRQBM; i++)
+ p->runq.bitmap[i] = 0;
+ setbit(MAXPRI - IDLEPRI, p->runq.bitmap);
+ p->runq.urgency = p->runq.count = 0;
+ for (i = 0; i < NRQS; i++)
+ queue_init(&p->runq.queues[i]);
+
+ p->state = PROCESSOR_OFF_LINE;
+ p->active_thread = p->next_thread = p->idle_thread = THREAD_NULL;
+ p->processor_set = PROCESSOR_SET_NULL;
+ p->current_pri = MINPRI;
+ p->deadline = UINT64_MAX;
+ timer_call_setup(&p->quantum_timer, thread_quantum_expire, p);
+ p->timeslice = 0;
+ simple_lock_init(&p->lock, 0);
+ p->processor_self = IP_NULL;
+ processor_data_init(p);
+ PROCESSOR_DATA(p, slot_num) = slot_num;
+
+ simple_lock(&processor_list_lock);
+ if (processor_list == NULL)
+ processor_list = p;
+ else
+ processor_list_tail->processor_list = p;
+ processor_list_tail = p;
+ processor_count++;
+ p->processor_list = NULL;
+ simple_unlock(&processor_list_lock);
+}
+
+/*
+ * pset_deallocate:
+ *
+ * Remove one reference to the processor set. Destroy processor_set
+ * if this was the last reference.
+ */
+void
+pset_deallocate(
+ processor_set_t pset)
+{
+ if (pset == PROCESSOR_SET_NULL)
+ return;
+
+ assert(pset == &default_pset);
+ return;
+}
+
+/*
+ * pset_reference:
+ *
+ * Add one reference to the processor set.
+ */
+void
+pset_reference(
+ processor_set_t pset)
+{
+ if (pset == PROCESSOR_SET_NULL)
+ return;