Changeset a35b458 in mainline for kernel/generic/src/cpu
- Timestamp:
- 2018-03-02T20:10:49Z (7 years ago)
- Branches:
- lfn, master, serial, ticket/834-toolchain-update, topic/msim-upgrade, topic/simplify-dev-export
- Children:
- f1380b7
- Parents:
- 3061bc1
- git-author:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-02-28 17:38:31)
- git-committer:
- Jiří Zárevúcky <zarevucky.jiri@…> (2018-03-02 20:10:49)
- Location:
- kernel/generic/src/cpu
- Files:
-
- 2 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/cpu/cpu.c
r3061bc1 ra35b458 63 63 if (config.cpu_active == 1) { 64 64 #endif /* CONFIG_SMP */ 65 65 66 66 cpus = (cpu_t *) malloc(sizeof(cpu_t) * config.cpu_count, 67 67 FRAME_ATOMIC); 68 68 if (!cpus) 69 69 panic("Cannot allocate CPU structures."); 70 70 71 71 /* Initialize everything */ 72 72 memsetb(cpus, sizeof(cpu_t) * config.cpu_count, 0); 73 73 74 74 size_t i; 75 75 for (i = 0; i < config.cpu_count; i++) { … … 78 78 if (!stack_phys) 79 79 panic("Cannot allocate CPU stack."); 80 80 81 81 cpus[i].stack = (uint8_t *) PA2KA(stack_phys); 82 82 cpus[i].id = i; 83 83 84 84 irq_spinlock_initialize(&cpus[i].lock, "cpus[].lock"); 85 85 86 86 for (unsigned int j = 0; j < RQ_COUNT; j++) { 87 87 irq_spinlock_initialize(&cpus[i].rq[j].lock, "cpus[].rq[].lock"); … … 89 89 } 90 90 } 91 91 92 92 #ifdef CONFIG_SMP 93 93 } 94 94 #endif /* CONFIG_SMP */ 95 95 96 96 CPU = &cpus[config.cpu_active - 1]; 97 97 98 98 CPU->active = true; 99 99 CPU->tlb_active = true; 100 100 101 101 CPU->idle = false; 102 102 CPU->last_cycle = get_cycle(); 103 103 CPU->idle_cycles = 0; 104 104 CPU->busy_cycles = 0; 105 105 106 106 cpu_identify(); 107 107 cpu_arch_init(); … … 113 113 { 114 114 unsigned int i; 115 115 116 116 for (i = 0; i < config.cpu_count; i++) { 117 117 if (cpus[i].active) -
kernel/generic/src/cpu/cpu_mask.c
r3061bc1 ra35b458 55 55 assert(NULL != cpus); 56 56 assert(cpu_cnt <= config.cpu_count); 57 57 58 58 for (size_t active_word = 0; 59 59 (active_word + 1) * word_bit_cnt <= cpu_cnt; … … 62 62 cpus->mask[active_word] = -1; 63 63 } 64 64 65 65 size_t remaining_bits = (cpu_cnt % word_bit_cnt); 66 66 if (0 < remaining_bits) { … … 89 89 { 90 90 assert(cpus); 91 91 92 92 size_t word_cnt = cpu_mask_size() / word_size; 93 93 94 94 for (size_t word = 0; word < word_cnt; ++word) { 95 95 cpus->mask[word] = 0; … … 102 102 size_t word = cpu_id / word_bit_cnt; 103 103 size_t word_pos = cpu_id % word_bit_cnt; 104 104 105 105 cpus->mask[word] |= (1U << word_pos); 106 106 } … … 111 111 size_t word = cpu_id / word_bit_cnt; 112 112 size_t word_pos = cpu_id % word_bit_cnt; 113 113 114 114 cpus->mask[word] &= ~(1U << word_pos); 115 115 } … … 120 120 size_t word = cpu_id / word_bit_cnt; 121 121 size_t word_pos = cpu_id % word_bit_cnt; 122 122 123 123 return 0 != (cpus->mask[word] & (1U << word_pos)); 124 124 } … … 133 133 return false; 134 134 } 135 135 136 136 return true; 137 137 }
Note:
See TracChangeset
for help on using the changeset viewer.