X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=ipc%2Fsem.c;h=46bb8a678decb50f760193c94cf2dcbce9f0e4e8;hb=5d870c8e216f121307445c71caa72e7e10a20061;hp=19af028a3e380d251d31e4b8ec4cd96ee679a1cb;hpb=c324b44c34050cf2a9b58830e11c974806bd85d8;p=firefly-linux-kernel-4.4.55.git diff --git a/ipc/sem.c b/ipc/sem.c index 19af028a3e38..46bb8a678dec 100644 --- a/ipc/sem.c +++ b/ipc/sem.c @@ -73,6 +73,7 @@ #include #include #include +#include #include #include #include "util.h" @@ -381,6 +382,7 @@ static void update_queue (struct sem_array * sma) /* hands-off: q will disappear immediately after * writing q->status. */ + smp_wmb(); q->status = error; q = n; } else { @@ -461,6 +463,7 @@ static void freeary (struct sem_array *sma, int id) n = q->next; q->status = IN_WAKEUP; wake_up_process(q->sleeper); /* doesn't sleep */ + smp_wmb(); q->status = -EIDRM; /* hands-off q */ q = n; }