From b6e90822e77cd476c18410f7003197d466e36ac6 Mon Sep 17 00:00:00 2001 From: Manfred Spraul Date: Tue, 15 Dec 2009 16:47:31 -0800 Subject: [PATCH] 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 --- ipc/sem.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/ipc/sem.c b/ipc/sem.c index 2705fbbc437453..eac3f46a59686f 100644 --- a/ipc/sem.c +++ b/ipc/sem.c @@ -445,13 +445,13 @@ static void update_queue (struct sem_array * sma) * 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; } }