kernel: fix race condition on boot, using SetBitAtomic
fix #18915 Change-Id: Ia8829822e21f6d6b765746ddab05f8781385745f Reviewed-on: https://review.haiku-os.org/c/haiku/+/7777 Haiku-Format: Haiku-format Bot <[email protected]> Reviewed-by: Fredrik Holmqvist <[email protected]> Reviewed-by: Jérôme Duval <[email protected]> Tested-by: Commit checker robot <[email protected]>
This commit is contained in:
@@ -150,7 +150,7 @@ cpu_preboot_init_percpu(kernel_args *args, int curr_cpu)
|
|||||||
// we can use it for get_current_cpu
|
// we can use it for get_current_cpu
|
||||||
memset(&gCPU[curr_cpu], 0, sizeof(gCPU[curr_cpu]));
|
memset(&gCPU[curr_cpu], 0, sizeof(gCPU[curr_cpu]));
|
||||||
gCPU[curr_cpu].cpu_num = curr_cpu;
|
gCPU[curr_cpu].cpu_num = curr_cpu;
|
||||||
gCPUEnabled.SetBit(curr_cpu);
|
gCPUEnabled.SetBitAtomic(curr_cpu);
|
||||||
|
|
||||||
list_init(&gCPU[curr_cpu].irqs);
|
list_init(&gCPU[curr_cpu].irqs);
|
||||||
B_INITIALIZE_SPINLOCK(&gCPU[curr_cpu].irqs_lock);
|
B_INITIALIZE_SPINLOCK(&gCPU[curr_cpu].irqs_lock);
|
||||||
|
|||||||
@@ -379,7 +379,7 @@ reschedule(int32 nextState)
|
|||||||
|
|
||||||
// select thread with the biggest priority and enqueue back the old thread
|
// select thread with the biggest priority and enqueue back the old thread
|
||||||
ThreadData* nextThreadData;
|
ThreadData* nextThreadData;
|
||||||
if (gCPU[thisCPU].disabled) {
|
if (!gCPUEnabled.GetBit(thisCPU)) {
|
||||||
if (!oldThreadData->IsIdle()) {
|
if (!oldThreadData->IsIdle()) {
|
||||||
if (oldThread->pinned_to_cpu == 0) {
|
if (oldThread->pinned_to_cpu == 0) {
|
||||||
putOldThreadAtBack = true;
|
putOldThreadAtBack = true;
|
||||||
|
|||||||
Reference in New Issue
Block a user