processor_set_t pset_create( pset_node_t node) { /* some schedulers do not support multiple psets */ if (SCHED(multiple_psets_enabled) == FALSE) return processor_pset(master_processor); processor_set_t *prev, pset = kalloc(sizeof (*pset)); if (pset != PROCESSOR_SET_NULL) { pset_init(pset, node); simple_lock(&pset_node_lock); prev = &node->psets; while (*prev != PROCESSOR_SET_NULL) prev = &(*prev)->pset_list; *prev = pset; simple_unlock(&pset_node_lock); } return (pset); }
void processor_bootstrap(void) { pset_init(&pset0, &pset_node0); pset_node0.psets = &pset0; simple_lock_init(&pset_node_lock, 0); queue_init(&tasks); queue_init(&threads); simple_lock_init(&processor_list_lock, 0); master_processor = cpu_to_processor(master_cpu); processor_init(master_processor, master_cpu, &pset0); }
processor_set_t pset_create( pset_node_t node) { processor_set_t *prev, pset = kalloc(sizeof (*pset)); if (pset != PROCESSOR_SET_NULL) { pset_init(pset, node); simple_lock(&pset_node_lock); prev = &node->psets; while (*prev != PROCESSOR_SET_NULL) prev = &(*prev)->pset_list; *prev = pset; simple_unlock(&pset_node_lock); } return (pset); }