aboutsummaryrefslogtreecommitdiffstats
path: root/ipc/sem.c
diff options
context:
space:
mode:
Diffstat (limited to 'ipc/sem.c')
-rw-r--r--ipc/sem.c5
1 files changed, 4 insertions, 1 deletions
diff --git a/ipc/sem.c b/ipc/sem.c
index 19af028a3e..31fd4027d2 100644
--- a/ipc/sem.c
+++ b/ipc/sem.c
@@ -56,7 +56,7 @@
56 * /proc/sysvipc/sem support (c) 1999 Dragos Acostachioaie <dragos@iname.com> 56 * /proc/sysvipc/sem support (c) 1999 Dragos Acostachioaie <dragos@iname.com>
57 * 57 *
58 * SMP-threaded, sysctl's added 58 * SMP-threaded, sysctl's added
59 * (c) 1999 Manfred Spraul <manfreds@colorfullife.com> 59 * (c) 1999 Manfred Spraul <manfred@colorfullife.com>
60 * Enforced range limit on SEM_UNDO 60 * Enforced range limit on SEM_UNDO
61 * (c) 2001 Red Hat Inc <alan@redhat.com> 61 * (c) 2001 Red Hat Inc <alan@redhat.com>
62 * Lockless wakeup 62 * Lockless wakeup
@@ -73,6 +73,7 @@
73#include <linux/security.h> 73#include <linux/security.h>
74#include <linux/syscalls.h> 74#include <linux/syscalls.h>
75#include <linux/audit.h> 75#include <linux/audit.h>
76#include <linux/capability.h>
76#include <linux/seq_file.h> 77#include <linux/seq_file.h>
77#include <asm/uaccess.h> 78#include <asm/uaccess.h>
78#include "util.h" 79#include "util.h"
@@ -381,6 +382,7 @@ static void update_queue (struct sem_array * sma)
381 /* hands-off: q will disappear immediately after 382 /* hands-off: q will disappear immediately after
382 * writing q->status. 383 * writing q->status.
383 */ 384 */
385 smp_wmb();
384 q->status = error; 386 q->status = error;
385 q = n; 387 q = n;
386 } else { 388 } else {
@@ -461,6 +463,7 @@ static void freeary (struct sem_array *sma, int id)
461 n = q->next; 463 n = q->next;
462 q->status = IN_WAKEUP; 464 q->status = IN_WAKEUP;
463 wake_up_process(q->sleeper); /* doesn't sleep */ 465 wake_up_process(q->sleeper); /* doesn't sleep */
466 smp_wmb();
464 q->status = -EIDRM; /* hands-off q */ 467 q->status = -EIDRM; /* hands-off q */
465 q = n; 468 q = n;
466 } 469 }