diff options
Diffstat (limited to 'ipc/sem.c')
-rw-r--r-- | ipc/sem.c | 5 |
1 files changed, 4 insertions, 1 deletions
@@ -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 | } |