From: Manfred Spraul Date: Wed, 16 Dec 2009 00:47:31 +0000 (-0800) Subject: ipc/sem.c: optimize if semops fail X-Git-Url: https://git.stricted.de/?a=commitdiff_plain;h=b6e90822e77cd476c18410f7003197d466e36ac6;p=GitHub%2Fmt8127%2Fandroid_kernel_alcatel_ttab.git ipc/sem.c: optimize if semops fail Reduce the amount of scanning of the list of pending semaphore operations: If try_atomic_semop failed, then no changes were applied. Thus no need to restart. Additionally, this patch correct an incorrect comment: It's possible to wait for arbitrary semaphore values (do a dec by , wait-for-zero, inc by in one atomic operation) Both changes are from Nick Piggin, the patch is the result of a different split of the individual changes. Signed-off-by: Manfred Spraul Cc: Nick Piggin Cc: Pierre Peiffer Signed-off-by: Andrew Morton Signed-off-by: Linus Torvalds --- diff --git a/ipc/sem.c b/ipc/sem.c index 2705fbbc4374..eac3f46a5968 100644 --- a/ipc/sem.c +++ b/ipc/sem.c @@ -445,13 +445,13 @@ again: * of the completed operation: * - if the operation modified the array, then restart from the * head of the queue and check for threads that might be - * waiting for semaphore values to become 0. + * waiting for the new semaphore values. * - if the operation didn't modify the array, then just * continue. */ alter = q->alter; wake_up_sem_queue(q, error); - if (alter) + if (alter && !error) goto again; } }