kernel: insert memory barrier in the scheduler before setting up->mach = nil

we have to ensure that all stores saving the process state
have completed before setting up->mach = nil in the scheduler.
otherwise, another cpu could observe up->mach == nil while
the stores such as the processes p->sched label have not finnished.
This commit is contained in:
cinap_lenrek 2019-05-01 09:35:51 +02:00
parent 97a2f14b1c
commit 54562b6ac2

View file

@ -70,6 +70,9 @@ schedinit(void) /* never returns */
edfrecord(up);
m->proc = nil;
switch(up->state) {
default:
updatecpu(up);
break;
case Running:
ready(up);
break;
@ -88,8 +91,8 @@ schedinit(void) /* never returns */
mmurelease(up);
unlock(&palloc);
up->mach = nil;
updatecpu(up);
up->mach = nil;
up->qnext = procalloc.free;
procalloc.free = up;
@ -99,8 +102,8 @@ schedinit(void) /* never returns */
unlock(&procalloc);
sched();
}
coherence();
up->mach = nil;
updatecpu(up);
up = nil;
}
sched();