Changes in kernel/generic/src/mm/tlb.c [63e27ef:a35b458] in mainline
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
kernel/generic/src/mm/tlb.c
r63e27ef ra35b458 87 87 CPU->tlb_active = false; 88 88 irq_spinlock_lock(&tlblock, false); 89 89 90 90 size_t i; 91 91 for (i = 0; i < config.cpu_count; i++) { 92 92 if (i == CPU->id) 93 93 continue; 94 94 95 95 cpu_t *cpu = &cpus[i]; 96 96 97 97 irq_spinlock_lock(&cpu->lock, false); 98 98 if (cpu->tlb_messages_count == TLB_MESSAGE_QUEUE_LEN) { … … 118 118 irq_spinlock_unlock(&cpu->lock, false); 119 119 } 120 120 121 121 tlb_shootdown_ipi_send(); 122 122 123 123 busy_wait: 124 124 for (i = 0; i < config.cpu_count; i++) { … … 126 126 goto busy_wait; 127 127 } 128 128 129 129 return ipl; 130 130 } … … 153 153 { 154 154 assert(CPU); 155 155 156 156 CPU->tlb_active = false; 157 157 irq_spinlock_lock(&tlblock, false); 158 158 irq_spinlock_unlock(&tlblock, false); 159 159 160 160 irq_spinlock_lock(&CPU->lock, false); 161 161 assert(CPU->tlb_messages_count <= TLB_MESSAGE_QUEUE_LEN); 162 162 163 163 size_t i; 164 164 for (i = 0; i < CPU->tlb_messages_count; i++) { … … 167 167 uintptr_t page = CPU->tlb_messages[i].page; 168 168 size_t count = CPU->tlb_messages[i].count; 169 169 170 170 switch (type) { 171 171 case TLB_INVL_ALL: … … 183 183 break; 184 184 } 185 185 186 186 if (type == TLB_INVL_ALL) 187 187 break; 188 188 } 189 189 190 190 CPU->tlb_messages_count = 0; 191 191 irq_spinlock_unlock(&CPU->lock, false);
Note:
See TracChangeset
for help on using the changeset viewer.