diff options
author | Manfred Spraul <[email protected]> | 2013-05-26 11:08:52 +0200 |
---|---|---|
committer | Linus Torvalds <[email protected]> | 2013-05-26 15:14:51 -0700 |
commit | ab465df9dda42a997f7537c875127eeb6a88158c (patch) | |
tree | 28a1ec28c15f1b59c938b7757c8f56eed0de0ecd /lib/mpi | |
parent | 89ff77837a67994e4a4a20bb648687fbcc3083f2 (diff) |
ipc/sem.c: Fix missing wakeups in do_smart_update_queue()
do_smart_update_queue() is called when an operation (semop,
semctl(SETVAL), semctl(SETALL), ...) modified the array. It must check
which of the sleeping tasks can proceed.
do_smart_update_queue() missed a few wakeups:
- if a sleeping complex op was completed, then all per-semaphore queues
must be scanned - not only those that were modified by *sops
- if a sleeping simple op proceeded, then the global queue must be
scanned again
And:
- the test for "|sops == NULL) before scanning the global queue is not
required: If the global queue is empty, then it doesn't need to be
scanned - regardless of the reason for calling do_smart_update_queue()
The patch is not optimized, i.e. even completing a wait-for-zero
operation causes a rescan. This is done to keep the patch as simple as
possible.
Signed-off-by: Manfred Spraul <[email protected]>
Acked-by: Davidlohr Bueso <[email protected]>
Cc: Rik van Riel <[email protected]>
Cc: Andrew Morton <[email protected]>
Signed-off-by: Linus Torvalds <[email protected]>
Diffstat (limited to 'lib/mpi')
0 files changed, 0 insertions, 0 deletions