Messages in this thread | | | Date | Mon, 27 May 2013 13:51:21 -0400 | From | Rik van Riel <> | Subject | Re: [PATCH 1/4] ipc/sem.c: Fix missing wakeups in do_smart_update_queue() |
| |
On 05/26/2013 05:08 AM, Manfred Spraul wrote: > 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. > Avoiding unnecessary scans is implemented in the following patches. > > Signed-off-by: Manfred Spraul <manfred@colorfullife.com>
Very much not optimized, but we need to fix the regression.
Acked-by: Rik van Riel <riel@redhat.com>
| |