- int i;
-
- /* 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]));
- }
-
- queue_init(&pr->processor_queue);
- pr->state = PROCESSOR_OFF_LINE;
- pr->next_thread = THREAD_NULL;
- pr->idle_thread = THREAD_NULL;
- timer_call_setup(&pr->quantum_timer, thread_quantum_expire, pr);
- pr->slice_quanta = 0;
- pr->processor_set = PROCESSOR_SET_NULL;
- pr->processor_set_next = PROCESSOR_SET_NULL;
- queue_init(&pr->processors);
- simple_lock_init(&pr->lock, ETAP_THREAD_PROC);
- pr->processor_self = IP_NULL;
- pr->slot_num = slot_num;
+ run_queue_init(&p->runq);
+
+ p->state = PROCESSOR_OFF_LINE;
+ p->active_thread = p->next_thread = p->idle_thread = THREAD_NULL;
+ p->processor_set = pset;
+ p->current_pri = MINPRI;
+ timer_call_setup(&p->quantum_timer, thread_quantum_expire, p);
+ p->deadline = UINT64_MAX;
+ p->timeslice = 0;
+ p->processor_self = IP_NULL;
+ simple_lock_init(&p->lock, 0);
+ processor_data_init(p);
+ PROCESSOR_DATA(p, slot_num) = slot_num;
+ p->processor_list = NULL;
+
+ 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++;
+ simple_unlock(&processor_list_lock);