X-Git-Url: http://demsky.eecs.uci.edu/git/?a=blobdiff_plain;f=ipc%2Fsem.c;h=31fd4027d2b5bd7dbda1ad88a69a6460a6af920c;hb=4aca4831aafad64a8622cd855c5f952228d75d72;hp=19af028a3e380d251d31e4b8ec4cd96ee679a1cb;hpb=529980c8b0b04e8a3f6606cdc156f1f81a5d68cd;p=firefly-linux-kernel-4.4.55.git diff --git a/ipc/sem.c b/ipc/sem.c index 19af028a3e38..31fd4027d2b5 100644 --- a/ipc/sem.c +++ b/ipc/sem.c @@ -56,7 +56,7 @@ * /proc/sysvipc/sem support (c) 1999 Dragos Acostachioaie * * SMP-threaded, sysctl's added - * (c) 1999 Manfred Spraul + * (c) 1999 Manfred Spraul * Enforced range limit on SEM_UNDO * (c) 2001 Red Hat Inc * Lockless wakeup @@ -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; }